Contiki 宏定义

1130阅读 0评论2013-04-19 jsjkj
分类:嵌入式




PROCESS宏定义在core\sys的process.h文件内,如下:

  1. #define PROCESS(name, strname) \
  2.   PROCESS_THREAD(name, ev, data); \
  3.   struct process name = { NULL, strname, \
  4.                           process_thread_##name }
  5. #define PROCESS_THREAD(name, ev, data) \
  6. static PT_THREAD(process_thread_##name(struct pt *process_pt, \
  7.                        process_event_t ev, \
  8.                        process_data_t data))
  9. #define PT_THREAD(name_args) char name_args


  1. #define AUTOSTART_PROCESSES(...) \
  2. struct process * const autostart_processes[] = {__VA_ARGS__, NULL}



  1. #define PROCESS_BEGIN() PT_BEGIN(process_pt)
  2. #define PT_BEGIN(pt) { char PT_YIELD_FLAG = 1; LC_RESUME((pt)->lc)
  3. #define LC_RESUME(s) switch(s) { case 0:

把参数替换,结果如下:
  1. {
  2.     char PT_YIELD_FLAG = 1; /*将PT_YIELD_FLAG置1,类似于关中断???*/
  3.     switch(process_pt->lc) /*程序根据lc的值进行跳转,lc用于保存程序断点*/
  4.     {
  5.         case 0: /*第一次执行从这里开始,可以放一些初始化的东东*/
  6.             ;
  1. #define PROCESS_END() PT_END(process_pt)
  2. #define PT_END(pt) LC_END((pt)->lc); PT_YIELD_FLAG = 0; \ PT_INIT(pt); return PT_ENDED; }
  3. #define LC_END(s) }
  4. #define PT_INIT(pt) LC_INIT((pt)->lc)
  5. #define LC_INIT(s) s = 0;
  6. #define PT_ENDED 3

  7. 把参数替换,结果如下:
  8.     }
  9.     PT_YIELD_FLAG = 0;
  10.     (process_pt)->lc = 0;
  11.     
  12.     return 3;
  13. }
  1. /*即进程主动让出执行权*/
  2. #define PROCESS_YIELD() PT_YIELD(process_pt)
  3. #define LC_SET(s) s = __LINE__; case __LINE__: /*保存被中断的行数*/

  4. /*继续展开如下,Yield from the current protothread*/
  5. #define PT_YIELD(pt) \
  6. do { \
  7. PT_YIELD_FLAG = 0; \
  8. LC_SET((pt)->lc); \
  9. if(PT_YIELD_FLAG == 0) { \
  10. return PT_YIELDED; \
  11. } \
  12. } while(0)

// 把参数替换,结果如下:
  1. do {
  2.     PT_YIELD_FLAG = 0;
  3.     (process_pt)->lc = __LINE__;
  4.     case __LINE__:
  5.     if(PT_YIELD_FLAG == 0) {
  6.         return PT_YIELDED;
  7.     }
  1. } while(0)



上一篇:Contiki 进程模型 Protothreads
下一篇:Contiki:Rime 协议栈目录