zoukankan      html  css  js  c++  java
  • 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/
  • 相关阅读:
    学习也可以有趣,喜欢上pandas,你该这么学!No.4
    Umbral:新型分散式密钥管理系统的代理重加密方案
    同态加密
    解决方案 | MySQL DBA主从复制出错怎么办?
    干货分享 | 史上最全Oracle体系结构整理
    点开,看一段,你就会喜欢上学习pandas,你该这么学!No.3
    mysql集群搭建(PXC)
    Centos7 离线安装mysql 5.6详细步骤
    tomcat别名配置多域名访问配置
    关于打印机状态的获取【转】
  • 原文地址:https://www.cnblogs.com/linux-farmer/p/13365065.html
Copyright © 2011-2022 走看看