本文涉及到的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//取名字
#endifPT_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

转载于:https://www.cnblogs.com/songdechiu/p/5797041.html

Contiki Process概述相关推荐

  1. process设置超时_概述并设置Process Center单集群拓扑

    process设置超时 这个由三部分组成的系列指南将指导您使用IBM Business Process Manager(BPM)高级版V8.5建立具有常用拓扑的业务流程管理环境. 本系列文章首先快速概 ...

  2. ibm键盘部分失灵_IBM Business Process Manager操作概述,第1部分,拓扑,安全性,基本管理和监视

    ibm键盘部分失灵 存档日期:2019年5月13日 | 首次发布:2015年7月30日 维护与许多后端和前端系统和服务交互的IBM®Business Process Manager(BPM)的集群服务 ...

  3. 系统诊断概述-如何通过windbg来dump特定process的memory.

    关键字:系统异常system exception  内存dump (信息转储),windbg工具. 1.为什么需要dump 内存     系统经常出现各种各样的问题,这些问题,可能是本身程序设计的时候 ...

  4. 【TSCH概述/CONTIKI】

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一.TSCH是什么? 二.TSCH的Timeslot通信 1.Timeslot结构 2.Contiki时间同步机制 总 ...

  5. ibm键盘部分失灵_IBM Business Process Manager操作概述,第3部分,高级操作

    ibm键盘部分失灵 存档日期:2019年5月13日 | 首次发布:2015年10月15日 本系列的第3部分介绍了高级操作任务,IBM®Business Process Manager(IBM BPM) ...

  6. 自然语言处理概述(Natural Language Process)

    近年来,人工智能逐渐成为了当前社会最热门的行业之一,也逐渐的进入了寻常百姓家.比如我们熟知的AlphaGo击败韩国围棋冠军李世石,小米的语音助手小爱同学,英国的智能机器人Sophia,喜马拉雅的小雅音 ...

  7. Contiki Etimer 模块

    一.Etimer概述 Etimer提供产生时间事件(timed event)的机制,当设定好的timer到期时,将会给设定etimer的process发送一个PROCESS_EVENT_TIMER 事 ...

  8. Contiki教程——进程

    概述 Contiki中的代码可以运行在下列两种执行上下文之一:合作式或者抢占式.合作式代码按顺序运行,抢占式代码可以暂停正在运行的合作式代码.Contiki中的进程运行在合作式上下文中,而中断和实时定 ...

  9. 2021年大数据Flink(一):乘风破浪的Flink-Flink概述

    目录 乘风破浪的Flink-Flink概述 实时即未来 一切从Apache开始 富二代Flink Flink官方介绍 官网地址: Flink组件栈 ​​​​​​​Flink基石 Checkpoint ...

最新文章

  1. 【Redis学习笔记】2018-05-30 Redis源码学习之Ziplist、Server
  2. tensorflow 回归的例子,包括保存模型和重新预测
  3. windows和Linux内存的对齐方式
  4. html怎么调整成苹方,html苹方字体
  5. [USACO]Sprinklers 2: Return of the Alfalfa P(网格DP)
  6. .gitignore文件_【第1739期】为Git仓库里的.idea文件夹正名
  7. Java基础:BufferedWriter和PushbackReader
  8. sqlite3 的基本使用 以及封装使用
  9. iOS 很酷的动画效果
  10. Filenet 周报(2019.12.23-2020.01.05)
  11. cass等距离等分线段的命令键_cad等分快捷键(cad等分线段快捷键命令)
  12. 故障集——user is currently used(无法删除用户)
  13. 调研内容(算法相关--MDP)
  14. comp3411 -prolog语言
  15. 一步成高手:终极图解内存(上篇)
  16. 分门别类输入输出,Go lang1.18入门精炼教程,由白丁入鸿儒,go lang基本数据类型和输入输出EP03
  17. 安卓辅助功能获取控件id
  18. 移动机器人五种坐标系
  19. C语言实现扫描文件下所有目录
  20. 03-Python基础语法(下)

热门文章

  1. hadoop块的存储方式
  2. 保湿护肤要注意的一些细节 - 生活至上,美容至尚!
  3. Service Worker 图片加载失败处理
  4. Android Studio连接天天模拟器
  5. 用Vue框架和后台请求的时候传递的参数的方式
  6. Jackson的简单用法
  7. linux 条件判断
  8. 关于持续集成几点知识点
  9. Codejock的使用--皮肤
  10. sql server支持gb18030里面的疑难中文字