Contiki官网下载V2.5源码http://www.contiki-os.org/
contiki-2.5源码中,stm32移植的相关内容分散在两个文件夹中,第一, cpu\arm\stm32f103,这个文件夹存放的stm32移植的相关文件;第二,platform\stm32test,这个文件夹中有一个不是那么完整的例子。
在Contiki-2.5源码文件夹下用到的有:\core\sys\下面所有文件,\cpu\arm\stm32f103\clock.c文件主要修改,\platform\stm32test\contiki-conf.h文件。
STM32工程下主要用到的文件:core_cm3.c,system_stm32f10x.c,startup_stm32f10_hd.s,stm32f10x_it.c
例子代码如下:
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
unsigned int idle_count = 0;
int
main()
{
dbg_setup_uart();
printf("Initialising\n");
clock_init();
process_init();
process_start(&etimer_process, NULL);
autostart_start(autostart_processes);
printf("Processes running\n");
while(1) {
do {
} while(process_run() > 0);
idle_count++;
/* Idle! */
/* Stop processor clock */
/* asm("wfi"::); */
}
return 0;
}
Contiki 系统移植步骤
在cpu\arm\stm32f10\clock.c文件中添加:
#include "stm32f10x.h"
在cpu\arm\stm32f10\clock.c文件中删除:
#include
#include
1
2
修改void clock_init()函数为:
void
clock_init()
{
//every msec got int
if (SysTick_Config(SystemCoreClock / CLOCK_SECOND))
{
/* Capture error */
while (1);
}
}
修改void SysTick_Handler(void)函数为:
void SysTick_Handler(void)
{
current_clock++;
if(etimer_pending() && etimer_next_expiration_time() <= current_clock) {
etimer_request_poll();
/* printf("%d,%d\n", clock_time(),etimer_next_expiration_time ()); */
}
if (--second_countdown == 0) {
current_seconds++;
second_countdown = CLOCK_SECOND;
}
}
在keil中新建一个工程,就可以了。
新建测试工程主函数:
#include
#include
#include
#include
#include
#include
#include
#include
#include "bsp.h"
PROCESS_NAME(led_process);
AUTOSTART_PROCESSES(&led_process);
void
main()
{
bsp_init();
dbg_setup_uart();
printf("Initialising...\r\n");
clock_init();
process_init();
process_start(&etimer_process, NULL);
autostart_start(autostart_processes);
printf("Processes running...\r\n");
while(1) {
do {
} while(process_run() > 0);
}
//return 0;
}
一个点灯的线程:
#include
#include
#include
#include
#include "bsp.h"
PROCESS(led_process, "Led");
PROCESS_THREAD(led_process,ev,data){
static struct etimer et;
PROCESS_BEGIN();
etimer_set(&et, (CLOCK_SECOND*2));
while(1){
printf("-->Waiting .......\r\n");
//PROCESS_WAIT_EVENT_UNTIL(etimer_expired(&et));
PROCESS_WAIT_EVENT_UNTIL(ev==PROCESS_EVENT_TIMER);
printf("-->Timer Got.\r\n");
bsp_led_toggle(BOARD_LED_ALL);
etimer_reset(&et);
}
PROCESS_END();
}
以下图片为keil工程结构的参考
上一篇:keil 的stm32启动文件分析
下一篇:基于keil的contiki系统的stm32移植
推荐阅读最新更新时间:2024-03-16 16:10