contiki-main.c 文件的进程分析

基本进程的创建实例:

共三部分:创建进程、进程自启动和进程的主体部分

 1 /* 声明一个名为hello_world_process和led_process进程
 2 PROCESS 宏实际上声明一个函数并定义一个进程控制块,
 3 新创建的进程 next 指针指向空,进程名称为“Hello world”和“led”*/
 4 PROCESS(hello_world_process, "Hello world");
 5 PROCESS(led_process, "led");
 6 /* 进程需要自动启动,即当节点启动时启动本进程 */
 7 AUTOSTART_PROCESSES(&led_process,&hello_world_process);
 8 
 9 /* hello_world_process进程的主体部分 */
10 PROCESS_THREAD(hello_world_process, ev, data)
11 {
12     /* 所有的进程开始执行前都必须要有这条语句 */
13     PROCESS_BEGIN();
14 
15     printf("Hello world :)\n");
16 
17     /* 所有的进程结束时都必须要有这条语句 */
18     PROCESS_END();
19 }
20 /*led_process进程的主题部分*/
21 PROCESS_THREAD(led_process, ev, data)
22 {
23   PROCESS_BEGIN();//宏用于辅助保存断点信息 (即行数 ),
24   //欲实现的代码必须放在宏 PROCESS_BEGIN 与 PROCESS_END 之间
25   while(1)
26   {
27     static struct etimer et;
28     etimer_set(&et, CLOCK_SECOND/10);
29     PROCESS_WAIT_EVENT_UNTIL(etimer_expired(&et));
30     
31     led_on(0);
32     printf("LED0 ----ON-----\r\n");
33      
34     led_off(1); 
35     printf("LED1 -----OFF-----\r\n"); 
36  
37     etimer_set(&et, CLOCK_SECOND/10);
38     PROCESS_WAIT_EVENT_UNTIL(etimer_expired(&et));
39         
40     led_off(0);
41     printf("LED0 -----OFF-----\r\n");  
42     led_on(1); 
43     printf("LED1 ----ON-----\r\n");
44     
45   }
46    PROCESS_END();//宏用于辅助保存断点信息 (即行数 )
47 }

然后在main函数中:

 1 int main()
 2 {
 3   
 4     BoardInit();
 5     DEBUG("BoardInit Done!");
 6     printf("Initialising\r\n"); 
 7     clock_init();//时钟初始化
 8     process_init();//进程初始化
 9 
10     process_start(&etimer_process, NULL);//启动系统进程
11     autostart_start(autostart_processes);//启动用户自启动进程
12     printf("Processes running\r\n");
13     while(1) {
14          do 
15         {
16          } 
17         while(process_run() > 0);
18         idle_count++;
19     }
20 }        

参考博客:http://blog.csdn.net/ferlansue/article/details/7256964

 

posted @ 2016-11-22 16:03  一只奋斗的考拉  阅读(444)  评论(0编辑  收藏  举报