contiki学习笔记1:helloworld+process结构分析
2016-05-05 12:28
495 查看
contiki学习笔记参考的是阿巴睇的博客,简直太棒了,真是大神,我按照他的思路一边看我移植好的程序,一遍配合大神的博客进行分析。写的很多都一样,之所以再写一遍是想理清思路。分析程序并不难,关键是有耐心,一个人分析总是不带了看,配合大神的博客一起看,就非常有意思,耐心杠杠的。
修改:现在看起来,还是应该去Wiki上看看contiki,翻译翻译感觉不错,还是自己去看去分析吧。大神的博客process这里分析的不错,后面感觉作用稍微小一些。contikios的Wiki可以多看看,自己多看看源码,看看英文文档。
将其带入并展开,所以PT_THREAD宏即为
thread是一个函数指针,指向一个三个形参,返回值为char类型的函数。
unsigned char state:
unsigned char needspoll:表示进程优先级。
替换一下为:
PROCESS_THREAD宏,带入PROCESS_THREAD(ZT, ev, data);
继续展开PT_THREAD宏:
总之,PROCESS宏声明了一个process_thread_ZT函数,声明了一个ZT结构体。
这句话声明了一个autostart_processes数组,数组元素是指向process结构体的常量指针,此处初始化了两个元素。
总结一下头文件:以PT开头的宏全都在PT.h里面定义。process_pt在这里定义了。
process结构体里面的struct pt pt;这个pt结构体中唯一的变量lc或许和进程执行有关??
将helloworld展开:
修改:现在看起来,还是应该去Wiki上看看contiki,翻译翻译感觉不错,还是自己去看去分析吧。大神的博客process这里分析的不错,后面感觉作用稍微小一些。contikios的Wiki可以多看看,自己多看看源码,看看英文文档。
对process的解析
struct process{ struct process *next; 链表指针 const char *name; 名称 PT_THREAD((* thread)(struct pt *, process_event_t, process_data_t)); 函数 struct pt pt; 短整型无符号变量 unsigned char state, needspoll; 进程状态,优先级 } #define PT_THREAD(name_args) char name_args
将其带入并展开,所以PT_THREAD宏即为
char (* thread)(struct pt *, process_event_t, process_data_t)
thread是一个函数指针,指向一个三个形参,返回值为char类型的函数。
<pt.h> struct pt { lc_t lc; }; typedef unsigned short lc_t; 也就是process结构体里面的pt结构只有一个lc成员。
unsigned char state:
<process.c> #define PROCESS_STATE_NONE 0 #define PROCESS_STATE_RUNNING 1 #define PROCESS_STATE_CALLED 2
unsigned char needspoll:表示进程优先级。
helloworld例程
#include "contiki.h" #include <stdio.h> PROCESS(ZT,"zhoutao"); AUTOSTART_PROCESSES(&ZT); PROCESS_THREAD(ZT,ev,data) { PROCESS_BEGIN(); printf("hello\n"); PROCESS_END(); }
PROCESS宏:(PROCESS(ZT,”zhoutao”))
#define PROCESS(name, strname) \ PROCESS_THREAD(name, ev, data); \ struct process name = { NULL, strname, \ process_thread_##name } 这是宏源码
替换一下为:
PROCESS_THREAD(ZT, ev, data); struct process ZT = { NULL, zhoutao,process_thread_ZT} 这样子就定义了一个名为ZT的process结构体;
PROCESS_THREAD宏,带入PROCESS_THREAD(ZT, ev, data);
#define PROCESS_THREAD(name, ev, data) \ static PT_THREAD(process_thread_##name(struct pt *process_pt, \ process_event_t ev, \ process_data_t data)) 变为了 static PT_THREAD(process_thread_ZT(struct pt *process_pt,process_event_t ev, process_data_t data))
继续展开PT_THREAD宏:
static char process_thread_ZT(struct pt *process_pt,process_event_t ev, process_data_t data); 声明了一个函数,此处有分号
总之,PROCESS宏声明了一个process_thread_ZT函数,声明了一个ZT结构体。
AUTOSTART_PROCESSES(&ZT)分析
展开后为struct process * const autostart_processes[] = {__VA_ARGS__, NULL},是一个变参数组,代入得到 struct process * const autostart_processes[] = {&ZT, NULL}
这句话声明了一个autostart_processes数组,数组元素是指向process结构体的常量指针,此处初始化了两个元素。
PROCESS_THREAD(ZT,ev,data)分析
此处无分号,所以声明了函数的主体。static char process_thread_ZT(struct pt *process_pt,process_event_t ev, process_data_t data)
总结一下头文件:以PT开头的宏全都在PT.h里面定义。process_pt在这里定义了。
PROCESS_BEGIN分析
层层带入可以得到{ char PT_YIELD_FLAG = 1; if (PT_YIELD_FLAG) {;} switch((process_pt)->lc) { case 0:
PROCESS_END分析
层层展开为} PT_YIELD_FLAG = 0; (process_pt)->lc = 0; return 3; //我认为PT_ENDED表示线程正常结束了 }
process结构体里面的struct pt pt;这个pt结构体中唯一的变量lc或许和进程执行有关??
将helloworld展开:
#include<stdio.h>
#include"contiki.h"
static char process_thread_ZT(struct pt *process_pt,process_event_t ev, process_data_t data);
struct process ZT = { NULL, zhoutao,process_thread_ZT}
struct process * const autostart_processes[] = {&ZT, NULL}
static char process_thread_ZT(struct pt *process_pt,process_event_t ev, process_data_t data){
char PT_YIELD_FLAG = 1;
if (PT_YIELD_FLAG) {;}
switch((process_pt)->lc){
case 0:
printf("hello\n");
}
PT_YIELD_FLAG = 0;
(process_pt)->lc = 0;
return 3;
}
相关文章推荐
- 最全的tcpdump使用详解
- 关于UIView用户交互相关的属性和方法
- JBake入门教程
- 【DSP开发】DSP通用并行端口uPP
- PHP的内存限制 Allowed memory size of 134217728 bytes exhausted (tried to allocate 1099 bytes) in
- 通过锁对象实现买票
- 【SignalR-入门】
- mysql如何开启远程连接
- LoadRunner 11 安装及破解
- 杜教筛
- 线程死锁
- Redis Essentials 读书笔记 - 第三章:Time Series (A Collection of Observations)
- HttpClientGetPost_MultiThreading_ResumeFromBreakPoint
- 百度指数爬取工具
- 在Linux下卸载Oracle 11g
- 地图之CoreLocation
- HDOJ(HDU) 2153 仙人球的残影(谜一样的题、、、)
- HDOJ(HDU) 2153 仙人球的残影(谜一样的题、、、)
- Activity深入学习(1)生命周期
- HTML中图片位置及大小的控制