#include "contiki.h"
#include "debug-uart.h"/* For usart_puts()*/
#include <stdio.h>/* For printf() */
PROCESS(hello_world_process,"Hello world");/*参照二*/
AUTOSTART_PROCESSES(&hello_world_process);/*参照三*/
/*Define the process code*/
PROCESS_THREAD(hello_world_process,ev,data)/*参见四*/
{
PROCESS_BEGIN();/*参照5.1*/
usart_puts("Hello, world!\n");/*向串口打印字符串"Hello,world"*/
PROCESS_END();/*参考5.2*/
}
PROCESS=process+function;
所以PROCESS 声明了下自己的实体函数,并且初始化了自己的process结构体。
PROCESS 用于声明一个process 并且初始化一个struct process结构。
AUTOSTART_PROCESSES 用于初始化一个可变参数的process数组,存放Contiki系统运行时需自动启动的进程
PROCESS_THREAD 用于开始process的定义部分,注意这个宏是没有分号的,它仅仅是将PROCESS声明的process 搬了过来而已。最后的原型是一个char XXXXX() 这样的一个函数实体。
RPOCESS_BEGIN()宏
char PT_YIELD_FLAG =1;
switch((process_pt)->lc)
{
case0:
;
PROCESS_END() 宏
}
PT_YIELD_FLAG =0;
(process_pt)->pt =0;
return 3;
}
刚好是一对,其中在PROCESS_BEGIN和PROCESS_END()之间一般会用到阻塞函数,阻塞函数的作用就是根据编译器的内置宏__LINE__来记录当前代码的行数,成为一个端点,阻塞这里这,然后使用return返回,等它所等待的条件满足(一般是事件到来的时候)就会冲PROCESS_BEGIN开始运行,由于PROCESS_BEGIN是一个switch(lc) 结构,所以会根据(lc)的值,直接锁定到他被阻塞的哪行代码那里,继续执行下去,知道遇到PROCESS_END()宏。
将上面的宏全部展开后:
#include "contiki.h"
#include "debug-uart.h"/* For usart_puts()*/
#include <stdio.h>/* For printf() */
static char process_thread_hello_world_process(structpt *process_pt,process_event_t ev,process_data_t data);
struct process hello_world_process ={((void*)0),"Hello world process",process_thread_hello_world_process};
struct process* constautostart_processes[]={&hello_world_process,((void*)0)};
char process_thread_hello_world_process(structpt *process_pt,process_event_t ev,process_data_t data)
{
{
char PT_YIELD_FLAG =1;
switch((process_pt)->lc)
{
case0:
;
/*中间一般有阻塞函数,张开后也是case 语句,*/
usart_puts("Hello, world!\n");
};
}
PT_YIELD_FLAG =0;
(process_pt)->lc =0;;
return3;
}
编程模型:
#include "contiki.h"
#include <stdio.h>/* For printf() */
PROCESS(hello_world_process,"Hello world");//PROCESS(name, strname)
AUTOSTART_PROCESSES(&hello_world_process);//AUTOSTART_PROCESS(...)
/*Define the process code*/
PROCESS_THREAD(hello_world_process,ev,data)//PROCESS_THREAD(name, ev, data)
{
PROCESS_BEGIN();
/***这里填入你的代码***/
PROCESS_END();
}
以上内容转载自:http://blog.chinaunix.net/uid-9112803-id-2898026.html