惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

P
Privacy & Cybersecurity Law Blog
Vercel News
Vercel News
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
N
Netflix TechBlog - Medium
罗磊的独立博客
F
Fortinet All Blogs
T
Threatpost
Y
Y Combinator Blog
博客园_首页
美团技术团队
Security Latest
Security Latest
博客园 - 三生石上(FineUI控件)
T
Tailwind CSS Blog
V
V2EX - 技术
The Cloudflare Blog
L
LINUX DO - 热门话题
博客园 - 司徒正美
Jina AI
Jina AI
P
Proofpoint News Feed
宝玉的分享
宝玉的分享
C
CXSECURITY Database RSS Feed - CXSecurity.com
C
Cybersecurity and Infrastructure Security Agency CISA
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
WordPress大学
WordPress大学
The Hacker News
The Hacker News
P
Privacy International News Feed
T
The Exploit Database - CXSecurity.com
Scott Helme
Scott Helme
有赞技术团队
有赞技术团队
V
V2EX
Stack Overflow Blog
Stack Overflow Blog
M
MIT News - Artificial intelligence
Latest news
Latest news
NISL@THU
NISL@THU
Google DeepMind News
Google DeepMind News
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
C
Cisco Blogs
雷峰网
雷峰网
Application and Cybersecurity Blog
Application and Cybersecurity Blog
B
Blog RSS Feed
W
WeLiveSecurity
D
DataBreaches.Net
G
Google Developers Blog
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
G
GRAHAM CLULEY
Spread Privacy
Spread Privacy
Know Your Adversary
Know Your Adversary
TaoSecurity Blog
TaoSecurity Blog
S
Securelist
Help Net Security
Help Net Security

博客园 - abatei

AT指令之 TCP/IP 命令 使用 AT 指令进行 Socket 通信 使用 Visual Studio Code 进行远程开发 QR 码详解(下) - abatei QR 码详解(上) Contiki学习笔记  第一个程序:Hello World 用Silverlight打造位运算器(3)--完成 用Silverlight打造位运算器(2)--制作数字文本框控件 用Silverlight打造位运算器(1)--制作简易工具条控件 C#与数据结构--哈希表(Hashtable) 《数据结构(C#语言描述)》目录 C#与数据结构--树论--红黑树(Red Black Tree) Silverlight版拼图游戏 C#与数据结构--树论--平衡二叉树(AVL Tree) 二叉树遍历非递归算法视频 - abatei 新书预告---《数据结构--C#语言描述》 - abatei C#与数据结构--图的遍历 - abatei C#与数据结构--二叉树的遍历 - abatei 位标志 - abatei
contiki学习笔记---process结构体
abatei · 2016-01-17 · via 博客园 - abatei

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

 1 struct process {
 2       struct process *next;
 3 #if PROCESS_CONF_NO_PROCESS_NAMES
 4 #define PROCESS_NAME_STRING(process) ""
 5 #else
 6       const char *name;
 7 #define PROCESS_NAME_STRING(process) (process)->name
 8 #endif
 9       PT_THREAD((* thread)(struct pt *, process_event_t, process_data_t));
10       struct pt pt;
11       unsigned char state, needspoll;
12 };

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));

    #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头文件中。

1  struct pt {
2         lc_t lc;
3     };

 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;

    表示进程优先级,后面用到再研究吧。