contiki--process data structure

进程是contiki以及其他操作系统的核心之一,首先看一下process.h中的进程的数据结构定义

1.进程是一个链表的结构,next指向下一个进程,结构如下:

2.通过platform目录下contiki-conf.h的宏定义 PROCESS_CONF_NO_PROCESS_NAMES来确定是否需要定义进程名。默认PROCESS_CONF_NO_PROCESS_NAMES=1,即不定义进程名,可修改PROCESS_CONF_NO_PROCESS_NAMES=0定义进程名,首先声明一个字符串变量 name,然后通过PROCESS_NAME_STRING(process)宏定义获取进程名,如果不定义进程名,返回为空字符串,如定义了进程名,将name值定义为进程名。

3.观察在pt.h中的PT_THREAD宏定义,

      #define PT_THREAD(name_args) char name_args

      将  PT_THREAD((*thread)(struct pt *, process_event_t, process_data_t));展开

      char (*thread)(struct pt *, process_event_t, process_data_t);

      可以看出为一个返回值为char类型的函数指针,函数中有三个参数,这里其实指向进程的回调函数,当进程运行时,调用该函数,这也是进程的主体。

4.观察在pt.h中对struct pt的定义

扫描二维码关注公众号,回复: 3106719 查看本文章

    struct pt {

     lc_t lc;

     };

    在lc-switch.h中对lc_t进行定义typedef unsigned short lc_t;所以pt中实际有用的就一个unsigned short类型的变量,它用于保存进程执行函数被中断的行数,便于进程下次被调度时可继续执行。

5.state为进程状态,在contiki中进程有3种状态

6.needpoll为进程优先级,当needpoll为1时,进程为高优先级,反之为低优先级,实际运行中,将needpoll为1的进程投入运行。

另外,contiki中还有几个全局变量和process有关。

struct process *process_list = NULL;//进程链表头
struct process *process_current = NULL;//当前正在运行的进程

static volatile unsigned char poll_requested;//用于标识系统是否存在高优先级进程

猜你喜欢

转载自blog.csdn.net/qq_15391889/article/details/81275347