Contiki Process概述
本文涉及到的Protothread机制知识,在http://www.cnblogs.com/songdechiu/p/5793717.html
一、进程类型
进程类型主要有协同式(cooperative)和抢占式(preemptive)两种。
协同式进程,要等其他进程运行完进程实体函数(进程不一定运行完,这个时候有可能是阻塞,总之只要执行到return语句,具体看protothread机制),然后才能开始运行。
抢占式进程,会优先运行,当有抢占式进程需要执行时,协同式进程将会被挂起,直到抢占式进程实体函数执行完毕。中断和实时任务就需要用抢占式进程实现。
二、进程结构
1、进程结构体
struct process {
struct process *next;//指向下个进程结构体,在进程链表中使用
#if PROCESS_CONF_NO_PROCESS_NAMES//配置进程字符串名字?
#define PROCESS_NAME_STRING(process) ""//没有,空
#else
//有字符串名字
const char *name;//定义进程字符串名字
#define PROCESS_NAME_STRING(process) (process)->name//取名字
#endif
PT_THREAD((* thread)(struct pt *, process_event_t, process_data_t));//进程执行实体函数
struct pt pt;//pt结构体,存储实体函数阻塞时的位置
unsigned char state, needspoll;//state是进程状态,needspoll标志进程是否需要优先执行
};
2、进程链表
process_list ----->
参考:http://blog.chinaunix.net/uid-9112803-id-2976187.html
只要抓住了进程链表头process_list,那么进程的各种操作都做得到了。
3、进程执行实体函数
HelloWorld例子
PROCESS_THREAD(hello_world_process, ev, data)
{
PROCESS_BEGIN(); printf("Hello, world\n"); PROCESS_END();
} #define PROCESS_THREAD(name, ev, data) \
static PT_THREAD(process_thread_##name(struct pt *process_pt, \
process_event_t ev, \
process_data_t data)) #define PT_THREAD(name_args) char name_args
最后展开为
static char process_thread_hello_world_process(struct pt *process_pt, process_event_t ev, process_data_t data)
{
//略
}
这就是进程的执行实体函数
三、事件
1、非同步事件
非同步事件处理中,先将事件放到事件队列中,然后事件处理程序再把事件传递给接收这个事件的进程。
2、同步事件
同步事件处理中,事件立马就传递给了特定的进程,表现为立马执行ProcessB的执行实体函数。
3、Polling(推举)
推举某个进程,让这个进程尽可能快的执行。抢占式进程的唯一调用方式。
四、进程调度函数
先处理所有poll的进程,再处理一个事件,最后返回剩余的事件数。
int
process_run(void)
{
/* Process poll events. */
if(poll_requested) {
do_poll();
} /* Process one event from the queue */
do_event(); return nevents + poll_requested;
}
五、参考资料
https://github.com/contiki-os/contiki/wiki/Processes
http://blog.chinaunix.net/uid-9112803-id-2976187.html
源码:$contiki$\core\sys\process.c
源码:$contiki$\core\sys\process.h
Contiki Process概述的更多相关文章
- 简单的玩玩etimer <contiki学习笔记之九 补充>
这幅图片是对前面 <<contiki学习笔记之九>> 的一个补充说明. 简单的玩玩etimer <contiki学习笔记之九> 或许,自己正在掀开contiki ...
- [置顶] STM32移植contiki进阶之三(中):timer 中文版
鉴于自己英语水平不高,在这里,将上一篇关于contiki 的timer的文章翻译为中文,让自己在学习的时候,更方便点.文中有许多不是很通顺的地方,将就吧. Timers Contiki系统提供了一套时 ...
- Contiki-Timer 概述
Contiki有一个clock模块和一系列timer模块:timer,stimer,ctimer,etimer,和rtimer. 一.clock模块 clock模块提供一些处理系统时间的函数,还有一些 ...
- cg tut
Gesture Drawing with Alex Woo Gesture Drawing with Alex Woo and Louis Gonzales http://eisneim.com/?p ...
- contiki-main.c 中的process系列函数学习笔记 <contiki学习笔记之六>
说明:本文依然依赖于 contiki/platform/native/contiki-main.c 文件. ---------------------------------------------- ...
- ILOG JRules 和 WebSphere Process Server 集成概述
ILOG JRules 和 WebSphere Process Server 集成概述 简介 业务流程管理(Business Process Management,BPM)和业务规则管理系统(Busi ...
- contiki学习笔记---process结构体
process,字面意义,进程,看看它的结构 struct process { struct process *next; #if PROCESS_CONF_NO_PROCESS_NAMES #def ...
- (转载)虚拟化(1):进程概述(The Process)
转自:https://zhuanlan.zhihu.com/p/37917981 这一章主要是对如下问题的解释. 1.Process(进程)是什么? 简单说process就是一个运行中的程序. 2.怎 ...
- RUP(Rational Unified Process)统一软件过程概述
RUP是Rational公司三位杰出的软件工程大师Grady Booch,Ivar Jacobson,James Rumbaugh提出的一个软件工程过程方法.软件开发过程是将一个用户需求转化为软件系统 ...
随机推荐
- Vmware+gdb调试Linux内核——工欲善其事,必先利其器
今天我最终忍受不了qemu的低速跟不可理喻的各种bug,開始寻找新的调试内核的方法.然后想到了Vmware,那么成熟的虚拟机怎么可能调试不了内核.于是尝试了一番,发现结果很的棒!所以立刻奋笔疾书.把这 ...
- JDK5新特性之线程同步工具类(三)
一. Semaphore Semaphore能够控制同一时候訪问资源的线程个数, 比如: 实现一个文件同意的并发訪问数. Semaphore实现的功能就类似厕全部5个坑, 增加有十个人要上厕所, 那么 ...
- 阿里云 RDS实例间的数据迁移
使用数据传输DTS可以实现两个RDS实例间的数据迁移.对于支持增量迁移的存储引擎,还可以使用DTS在源RDS实例不停服的情况下,将数据迁移到目标RDS实例.目前对于RDS不同存储引擎,只支持同构迁移( ...
- jquery实现图片的依次加载图片
css代码: ul#portfolio{margin:0;padding:0;} ul#portfolio li{float:left;margin:0 5px 0 0;width:250px;hei ...
- 让你十分钟学会shell
1.先介绍下shell的工作原理 Shell可以被称作是脚本语言,因为它本身是不需要编译的,而是通过解释器解释之后再编译执行,和传统语言相比多了解释的过程所以效率会略差于传统的直接编译的语言. 这是s ...
- 详细解析用Squid实现反向代理的方法
代理服务器是使 用非常普遍的一种将局域网主机联入互联网的一种方式,使用代理上网可以节约紧缺的IP地址资源,而且可以阻断外部主机对内部主机的访问,使内部网主机免受 外部网主机的攻击.但是,如果想让互联网 ...
- VESA-ADV7123-SOCKIT-DE2115
/*--VGA Timing--Horizontal :-- ______________ _____________-- | | |--_______________| VIDEO |_______ ...
- 华为P20无敌拍摄能力开放 如何即刻获得?
在全球专业相机测评机构DXOmark发布的相机评测排行中,华为P20.P20 Pro成功登顶“全球拍照最好智能手机”.P20 Pro综合得分高达109分,P20综合得分102分.“华为并非简单地将第三 ...
- NUTCH2.3 hadoop2.7.1 hbase1.0.1.1 solr5.2.1部署(二)
Precondition: hadoop 2.7.1 hbase 1.0.1.1 / hbase 0.98.13 192.168.1.106 ->master 192.168.1.105 ...
- 【转】一步一步带你反编译apk,并教你修改smali和重新打包
一.工具介绍: 1.apktool:aapt.exe,apktool.bat,apktool.jar;三个在同一目录结合使用,用来反编译apk,apk重新打包: 2.dex2jar:该工具作用是将cl ...