程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> contiki學習筆記---process結構體,contiki---process

contiki學習筆記---process結構體,contiki---process

編輯:關於C語言

contiki學習筆記---process結構體,contiki---process


process,字面意義,進程,看看它的結構

 1 struct process {
 2       struct process *next;
 3 #if PROCESS_CONF_NO_PROCESS_NAMES
 4 #define PROCESS_NAME_STRING(process) ""
 5 #else
 6       const char *name;
 7 #define PROCESS_NAME_STRING(process) (process)->name
 8 #endif
 9       PT_THREAD((* thread)(struct pt *, process_event_t, process_data_t));
10       struct pt pt;
11       unsigned char state, needspoll;
12 };

process表示一個進程,它是一個結構體:

1、struct process *next;       第一個成員*next,類型為自己,名字起為next,明顯是為鏈表准備的,表示所有進程會存放於一個鏈表之中。 2、const char *name;     這個表示進程的名稱,3~8行,當全局變量PROCESS_CONF_NO_PROCESS_NAMES時名字為空,表示進程沒名字,這應該是為某些特殊CPU准備的,直接忽略吧,我們就當所有進程都會有名字。     #define PROCESS_NAME_STRING(process) (process)->name 使用宏定義了一個方法  PROCESS_NAME_STRING(),它的作用就是返回此結構體的name成員。這個實現方式挺有意思,跟C#是完全不同的兩種精神世界,以後要多多適應。 3、PT_THREAD((* thread)(struct pt *, process_event_t, process_data_t));     PT_THREAD在Pt.h頭文件中,定義如下:     #define PT_THREAD(name_args) char name_args     將整句代碼代入宏定義中,展開如下:     char  (* thread)(struct pt *, process_event_t, process_data_t)     thread是一個函數指針,指向的是一個含有3個參數,返回值為char類型的函數。這個函數是做什麼的呢?稍後研究。
4、struct pt pt;     變量名和結構體名相同,C語言果然不一樣啊,不過這變量名只在結構體內有效。先看看結構體pt的定義吧,還是在Pt.h頭文件中。
1  struct pt {
2         lc_t lc;
3     };
 lc_t是什麼?繼續追蹤,Lc-switch.h頭文件中     typedef unsigned short lc_t;     unsigned short類型,只是一個數字,一個標識。為何pt結構體只有一個成員,這樣做的意義何在?後面搞清楚了再回來改吧。 5、unsigned char state;     這個表示進程的狀態,三個數字:0、1、2。有宏定義,在Process.c文件中
#define PROCESS_STATE_NONE           0
#define PROCESS_STATE_RUNNING     1
#define PROCESS_STATE_CALLED        2
這三種狀態只有到時碰到用的時候再回來講解吧,現在只能放著。 6、unsigned char needspoll;     表示進程優先級,後面用到再研究吧。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved