Contiki高级程序设计
2015-12-06 09:04
274 查看
Contiki高级程序设计
一. Process和Protothread
Contiki进程的阻塞是建立在“函数返回”的基础上的,如上图所示,当进程调用PROCESS_YIELD()本质就是return,它向ContikiOS让出系统控制权。
当进程需要处理更复杂的逻辑时,如果把所有的阻塞语句“裹挟”在进程主体函数时,就会带来如下问题:主体函数会很冗长,并且很复杂。这违背软件开发的精髓----降低程序的复杂度。
以uc/os-ii为代表的RTOS对于任务阻塞(一般使用等待:信号量、邮箱、消息队列等)是很轻松的,这种基于“上下文切换”(Context Switch)的系统,可以在任务调用的任意函数语句中“挂起自己”,如上图所示。
其实Contiki进程可以调用protothread实现“函数级阻塞”,如上图所示:
①当protothread等待事件时,它先向process调用PT_YIELD()“挂起函数”;process收到protothread的PT_YIELDED返回值时,执行PROCESS_YIELD()“挂起进程”,向ContikiOS让出系统控制权。
②当外部事件(一般为中断)向ContikiOS发消息时,ContikiOS先调度对应的process,process则继续调用protothread,protothread再处理该事件。
③当protothread处理完所有逻辑后,它向process返回PT_ENDED,此时process知道该protothread已经完成工作。
通过这种“函数级阻塞”技术,可以将逻辑复杂的进程分解成多个protothread,采用分而冶之的办法,让程序设计和维护代价大大降低。
小结:Contiki系统调度和阻塞实质是“函数返回”,因此进程设计有3条原则:
① 每个进程响应一个硬件的poll消息;
② 多个硬件之间的时序交给ISR用状态机完成;
③ 进程主体函数尽可能简单,如果复杂将拆分成多个protothread。
免费下载Contiki源代码+原理+功能+编程+移植+驱动+网络,
请链接:http://www.rimelink.com/nd.jsp?id=31&_np=105_315
相关文章推荐
- 对javascript的一点点认识总结《javascript高级程序设计》读书笔记
- contiki udp 使用
- windows cc2530 6lowpan(contiki)报文监控
- SQLserver 用户进程堵塞解决方案;
- Packetbuffer Basics (包缓冲区基础知识)
- Contiki 实例hello_world详细剖析
- cc2650鼓捣教程-2.一切的开始 Hello world程序!
- cc2650鼓捣教程-1.硬件选型与contiki 6lowpan环境配置
- 基于keil的contiki系统的stm32移植
- 对contiki原理的一些理解
- Windows内核之线程的调度,优先级,亲缘性
- 由一个线程例子引发的思考
- contiki的5种定时器理解
- contiki的rime协议分析-abc
- contiki的rime协议分析-channel
- Setup contiki toolchain in ubuntu 13.04
- 开始学习Contiki
- 智渔课堂官方免费教程四十 :Java基础教程之线程同步
- 在自己的Ubuntu系统中安装Contiki开发工具链
- 线程调度一(join的用法)