process,字面意义,进程,看看它的结构

 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;
unsigned char state, needspoll;
};

process表示一个进程,它是一个结构体:

1、struct process *next;  
    第一个成员*next,类型为自己,名字起为next,明显是为链表准备的,表示所有进程会存放于一个链表之中。
2、const char *name;
    这个表示进程的名称,3~8行,当全局变量PROCESS_CONF_NO_PROCESS_NAMES时名字为空,表示进程没名字,这应该是为某些特殊CPU准备的,直接忽略吧,我们就当所有进程都会有名字。
    #define PROCESS_NAME_STRING(process) (process)->name 使用宏定义了一个方法  PROCESS_NAME_STRING(),它的作用就是返回此结构体的name成员。这个实现方式挺有意思,跟C#是完全不同的两种精神世界,以后要多多适应。
3、PT_THREAD((* thread)(struct pt *, process_event_t, process_data_t));
    PT_THREAD在Pt.h头文件中,定义如下:
    #define PT_THREAD(name_args) char name_args
    将整句代码代入宏定义中,展开如下:
    char  (* thread)(struct pt *, process_event_t, process_data_t)
    thread是一个函数指针,指向的是一个含有3个参数,返回值为char类型的函数。这个函数是做什么的呢?稍后研究。
4、struct pt pt;
    变量名和结构体名相同,C语言果然不一样啊,不过这变量名只在结构体内有效。先看看结构体pt的定义吧,还是在Pt.h头文件中。
  struct pt {
lc_t lc;
};
 lc_t是什么?继续追踪,Lc-switch.h头文件中
    typedef unsigned short lc_t;
    unsigned short类型,只是一个数字,一个标识。为何pt结构体只有一个成员,这样做的意义何在?后面搞清楚了再回来改吧。
5、unsigned char state;
    这个表示进程的状态,三个数字:0、1、2。有宏定义,在Process.c文件中
#define PROCESS_STATE_NONE           0
#define PROCESS_STATE_RUNNING 1
#define PROCESS_STATE_CALLED 2
这三种状态只有到时碰到用的时候再回来讲解吧,现在只能放着。
6、unsigned char needspoll;
    表示进程优先级,后面用到再研究吧。

contiki学习笔记---process结构体的更多相关文章

  1. C#学习笔记之结构体

    1.概述 结构是一种与类相似的数据类型,不过它较类更为轻量,一般适用于表示类似Point.Rectangle.Color的对象.基本上结构能办到的类全都能办到,但在某些情况下使用结构更为合适,后面会有 ...

  2. 《PHP7底层设计与源码实现》学习笔记2——结构体对齐

    书里给了一段代码,假如有个结构体如下: struct test {     char a;     int b;     long c;     void* d;     int e;     cha ...

  3. c语言学习笔记之结构体存储

    今天讲讲结构体存储问题 首先,结构体简单说是对不同类型的封装,一开始我们可能会想结构体在内存中的存储的大小是直接元素的和 例如 我们可能会觉得是 结构体大小=int(4个字节)+ short(2个字节 ...

  4. C语言学习笔记--枚举&结构体

    枚举 枚举是一种用户定义的数据类型,它用关键字enum以如下语法格式来声明: enum 枚举类型名字 {名字0,名字1,...,名字n}: 枚举类型名字通常并不真的使用,要用的是大括号里面的名字,因为 ...

  5. 【C#学习笔记】结构体使用

    using System; namespace ConsoleApplication { struct _st { public string name; public int age; } clas ...

  6. Contiki学习笔记  第一个程序:Hello World

    想来想去,还是得先写一个程序,找下感觉,增强一下自信心,那就国际惯例Hello World吧.先到这个网址下一个Instant Contiki 2.7.之所以没用3.0的,是因为有些问题,我源码是下的 ...

  7. 简单的玩玩etimer <contiki学习笔记之九 补充>

    这幅图片是对前面  <<contiki学习笔记之九>>  的一个补充说明. 简单的玩玩etimer <contiki学习笔记之九> 或许,自己正在掀开contiki ...

  8. 简单的玩玩etimer <contiki学习笔记之九>

    好吧,我承认etimer有点小复杂,主要是它似乎和contiki的process搅在一起,到处都在call_process.那就先搜搜contiki下的etimer的example看看,然后再试着写一 ...

  9. Go学习笔记07-结构体与方法

    Go学习笔记07-结构体与方法 Go语言 面向对象 结构的定义与创建 面向对象 Go语言只支持封装,不支持继承和多态. Go语言中只有struct,即结构体:没有class. 结构的定义与创建 pac ...

随机推荐

  1. svn回滚版本

    1.本地修改了内容,但是没有commit可以通过Revert-来覆盖当前版本. 2.已经commit了.首先第一步,应该知道需要回滚的版本编号, 第二步,选择 updata to revision

  2. python 笔记2:python语法基础

    python语法学习笔记: 1 输入输出 input(),print(). name = input('input your name : ')print('hello ,'+name)print(& ...

  3. webpack vuejs项目学习心得

    最近在做移动端的项目,最近webpack和vuejs很火,就想到了用vuejs webpack来构建我的项目 先了解了一些webpack的入门基础 http://webpack.github.io/d ...

  4. 使用 IDEA + Maven + Git 快速开发 JAVA或者Web 应用(转)

    0-0 前言 最近和同事做爬虫,其中我主要遇到的问题是:同事在github上放了爬虫demo让我自己去下载,然后自己能搭好环境让整个项目跑起来去抓51job找工作数据.git上克隆一个项目下来,项目是 ...

  5. 用js编程输出100以内所有的质数和个数(提示:一个大于1的自然数,除了1和它本身外,不能被其他自然数整除的数都是质数)

    <script type="text/javascript"> for(var i = 3; i <= 100; i ++) {//控制2-100所有的数i fo ...

  6. Linux下memcache的安装

    memcache是高性能,分布式的内存对象缓存系统,用于在动态应用中减少数据库负载,提升访问速度.目前用memcache解决互联网上的大用户读取是非常流行的一种用法,在互联网企业中有着广泛的应用.‍关 ...

  7. 安装.cer证书并将证书从.cer格式转化为.pem格式

    ## 安装.cer证书并将证书从.cer格式转化为.pem格式 ### 安装.cer证书到本地 打开*运行*窗口 输入MMC.exe, 单击*确定* 在打开的控制台1的窗口中. 选择*文件*, 选择* ...

  8. 修改hive分区表,在分区列前增加一个字段

    本文主要为了测试,在有数据的分区表中增加新的一个非分区字段后,新数据加入表中是否正常. 原始数据 1;zhangsan 2;zhangsan 3;zhangsan 4;lisi 5;lisi 6;li ...

  9. 105 董婷婷 第一次Sprint总结

    总结: 经过一个多星期,第一次Sprint在今天结束了,在这次Sprint中我们的工作主要做的是对项目的构建及各种界面的设计和完善,一些比较具体的功能还没有实现.在这次Sprint中因为有上学期合作的 ...

  10. HDFS的工作原理(读和写操作)

    工作原理: NameNode和DateNode,NameNode相当于一个管理者,它管理集群内的DataNode,当客户发送请求过来后,NameNode会 根据情况指定存储到哪些DataNode上,而 ...