• contiki初始化:最小系统的搭建


    最小系统的搭建:

    contiki源码比较庞大,有点让人看着烦,没地方入手。

    这里整理一下,在我们的平台上,添加如下文件:

    1 core/sys/timer.c
    2 core/sys/etimer.c
    3 core/sys/process.c
    4 
    5 core/sys/autostart.c    // AUTOSTART_PROCESSES,不适用可以屏蔽

    另外我们需要定义一个clock文件:

    1,提供clock_time()函数的原型(systick的计数器的返回)

    2,周期性etimer_request_poll,实现contiki的时钟调度接口。

    我这里把上述功能添加到一个文件里面,具体实现代码如下:

     1 #include <sys/clock.h>
     2 #include <sys/etimer.h>
     3 
     4 // contiki滴答计数器
     5 static clock_time_t                contiki_tick;
     6 
     7 // 提供内核调用的函数接口,必须实现
     8 clock_time_t
     9 clock_time(void)
    10 {
    11     // 返回系统秒计数器
    12     return contiki_tick;
    13 }
    14 
    15 // systick的中断回调函数,周期性调用etimer_request_poll()函数
    16 static void
    17 contiki_tick_handler(void)
    18 {
    19     contiki_tick++;
    20     if (etimer_pending() && etimer_next_expiration_time() <= contiki_tick) {
    21         etimer_request_poll();
    22     }
    23 }
    24 
    25 // 初始化系统port接口
    26 static void
    27 contiki_port_init(void)
    28 {
    29     contiki_tick = 0;
    30     // 注册systick的中断回调函数
    31     CPU_AppTimeTickHookPtr = contiki_tick_handler;
    32 }
    33 
    34 // contiki初始化
    35 void
    36 contiki_init(void)
    37 {
    38     contiki_port_init();
    39     // contiki初始化
    40     process_init();
    41     // 必须把etimer_process任务最先插入任务队列
    42     process_start(&etimer_process, NULL);
    43 }

    这样我们可以实现基本的任务初始化了。

    3, 添加任务

     1 // 函数名: thread_hello_world
     2 PROCESS(thread_hello_world, "Hello world");
     3 PROCESS_THREAD(thread_hello_world, ev, data)
     4 { 
     5     static struct etimer et;
     6 
     7     PROCESS_BEGIN();
     8     while(1) {
     9         etimer_set(&et, CLOCK_SECOND*3);
    10         PROCESS_WAIT_EVENT_UNTIL(etimer_expired(&et));
    11         printf("Hello, world!
    ");
    12     }
    13     PROCESS_END();
    14 }

    OK!

    博客园:http://www.cnblogs.com/linux-farmer/
  • 相关阅读:
    Smartform中表(table)的行间距设置
    ◆◆0Smartform中如何设置背景阴影色(Shading)
    ◆◆0如何在Smartforms中设置左右对齐
    如何在smartform中设置行间距
    ◆◆0如何在smartform中的table节点插入分页
    ◆◆0如何翻译smartform中的Text module
    如何在smartforms中插入复选框(checkbox)
    ◆◆0选择屏幕-SELECTION-SCREEN(一)
    科研呢喃-2
    遇到杠精,浪费时间
  • 原文地址:https://www.cnblogs.com/linux-farmer/p/13365065.html
Copyright © 2020-2023  润新知