使用KEIL MDK环境,移植到STM32L051C8单片机上,根据网上资料与里程总结如下:

1、创建STM32工程。

2、复制contiki-3.0目录下,core、cpu文件夹到工程目录下

3、保留core下sys文件夹和.h文件,其他文件夹删除

4、保留cpu\arm\stm32f103\clock.c文件,其他删除

5、复制contiki-3.0\platform\stm32test\contiki-conf.h配置文件到core目录下

二、Contiki移植二、Contiki移植目录如下

二、Contiki移植

二、Contiki移植

二、Contiki移植


6、添加文件到keil工程,.c与.h

二、Contiki移植二、Contiki移植

7、更改clock函数

a)系统时钟中断函数更改

b)系统时钟初始化函数更改

更改后如图

二、Contiki移植

8、配置contiki

在contiki-conf.h文件中添加#define AUTOSTART_ENABLE1u,使能进程自动运行功能

其他配置日后在一点点研究

9、编译工程

会有错误,屏蔽掉找不到的头文件。

直到编译成功

10、编写进程例子

编写两个进程,一个进程打印hello ,另一个进程打印world,间隔时间1s打印一次,通过串口打印。

a)先声明注册进程

PROCESS(PrintfHello_ps, "Hello");
PROCESS(PrintWorld_ps, "World");

b)自动启动的进程放到自动启动数组中

AUTOSTART_PROCESSES(&PrintfHello_ps, &PrintWorld_ps);

c)创建事件标志变量

static process_event_t event_flag;

d)打印hello线程

PROCESS_THREAD(PrintfHello_ps, ev, data)

{

  //线程开始

  PROCESS_BEGIN();

  //定义一个事件定时器

  static struct etimer timer; 
  //设置事件定时器时间,并绑定为当前进程,溢出时间1s
  etimer_set(&timer, 1*CLOCK_SECOND );
  printf("PrintfHello_ps start\n");
  //分配一个新的事件
  event_flag = process_alloc_event();

  while (1)
  {
    //等待定时器超时事件

    PROCESS_WAIT_EVENT_UNTIL(ev == PROCESS_EVENT_TIMER);

    //打印 hello 

    printf("hello ");
    //投递事件,把event_flag这个事件投递到PrintWorld_ps进程,数据参数为NULL
    process_post(&PrintfHello_ps, event_flag, NULL);
    //复位定时器,重新开始计时
    etimer_reset(&timer);
  }
  PROCESS_END();

}

e)打印world进程

PROCESS_THREAD(PrintWorld_ps, ev, data)
{
PROCESS_BEGIN();
printf("PrintfWorld_ps start\n");
while (1)
{
//等待event_flag事件
PROCESS_WAIT_EVENT_UNTIL(ev == event_flag);
//打印world.
printf("world.\n");
}
PROCESS_END();

}

f)主函数

int main(void){
  /* Configure the system clock to 32 MHz */
        SystemClock_Config();
PeripheralClock_Config();

BspHardwareInit();
//contiki时钟初始配置

clock_init();

        //进程初始化

process_init(); 

        //开始事件定时器

process_start(&etimer_process, NULL);

        //自动启动线程

autostart_start(autostart_processes);

while(1) {
    do {
    } while(process_run() > 0);
    idle_count++;
    /* Idle! */
    /* Stop processor clock */
    /* asm("wfi"::); */ 
  }
  return 0;

}

11、输出结果

二、Contiki移植

相关文章: