基本进程的创建实例:
共三部分:创建进程、进程自启动和进程的主体部分
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
时间: 2024-10-13 05:17:06