基于contiki系统的MCU使用经验总结

来源:互联网 发布:全民神将翅膀进阶数据 编辑:程序博客网 时间:2024/05/21 06:19

Contiki 是一个小型的,开源的,极易移植的多任务电脑操作系统。它专门设计以适用于一系列的内存受限的网络系统,包括从8位电脑到微型控制器的嵌入系统

在使用contiki系统中字节总结了如下几个情况:

contiki进程使用:

1、系统应用一直处在一个大的WHILE循环中,contiki也会提供进程式的服务(PROCESS_THREAD),进程通常也是处于WHILE循环中系统同一时刻只能运行一个进程,并且没有进程轮转的功能,进程之间的同步通过POST事件处理,当运行中的进程POST一个事件出去,则需要使用PROCESS_WAIT_EVENT_UNTIL函数来等待进程重新获得使用权。

2、基本上有几个状态机式的应用就会有几个WHILE小循环,PROCESS_WAIT_EVENT_UNTIL等待的时间可以是PROCESS_EVENT_TIMER(相当于sleep时间到,配合etimer_set实现),PROCESS_EVENT_CONTINUE,resolv_event_founddeng等。

3、post事件用于进程间实现同步以及通讯,然而状态机的实现一般需要依赖于本任务一直处于轮询的状态,比如进程1是一个会频繁调动的进程(如基于UIP实现的套接字进程),进程1是一个WHILE循环,并且根据主要的flag进行状态变化实现功能(监听、发送、接受、数据),当进程1post出去一个事件到另外一个进程2后(比如说接收完数据等待处理),虽然进程1是一个WHILE循环,但这个时候已经丧失是CPU的执行权,如果要让进程1继续执行,则可以在post事件的同时使用更新标志位和etimer_set配合是进程继续处于轮询的状态,当进程2执行结束后,就可以通过更新标志位的方法直接配合PROCESS_WAIT_EVENT_UNTIL等待函数来实现进程2继续往下实现功能及同步。这样理论上对于向进程2使用post要好一点,应为太多的post和PROCESS_WAIT_EVENT_UNTIL往往到最后容易混乱。

4、etimer_set是是当前进程休眠一段时间,等到时间到了会有PROCESS_EVENT_TIMER的时间通知,借助while可以达到轮询的效果。

使用注意:

1、要时刻留意进程卡死的情况,注意时刻更新主flag

2、contiki在主任务函数中不能使用switch/case语句,另外慎用局部变量,post时间携带参数不能使用局部变量。


0 0