基於作業系統的簡單應用
在建立應用之前,還應該先設定os_cfg.h標頭檔案來確定uc/os-ii允許的各種功能,包括定義最大任務數,任務最低優先順序,事件控制塊數目,記憶體塊數目,佇列控制塊數目等,不用的選項可以禁止掉,以減少編譯後的**長度。
本文設計乙個運用uc/os-ii的簡單應用,利用板上的乙個七段數碼管和3個led,主要程式設計思路是:建立乙個優先順序較高的七段數碼管顯示任務,迴圈顯示從1到9的數字;建立乙個優先順序較低的led閃爍任務,同時迴圈控制3個led的亮滅;建立乙個最高優先順序的任務後將之掛起,為外部中斷0編寫乙個中斷服務程式,用來恢復掛起的高優先順序任務。高優先順序任務將led快速閃爍數次,然後將自身掛起以待下次中斷發生。為保證同一時間只能有乙個任務訪問led顯示函式,使用了訊號量保護資源。具體程式如下:
main.c
#include 「includes.h」
#include 「main.h」
os_stk taskstk[task_stk_size];
os_stk taskstkstart[task_stk_size];
os_event *randomsem;
u_int num,led_num;
void taskstart(void *);
void task(void *);
int main(void)
main.c
中先宣告兩個任務堆疊和乙個訊號量變數,主函式
main
中先呼叫
osinit()
初始化系統,然後生成乙個訊號量。通過
ostaskcreate()
函式建立兩個任務
taskstart
和task
,然後呼叫
osstart()
執行核心,進行程序排程。
task.c
#include "includes.h"
#include "main.h"
void ostimedly (int16u);
void taskstart(void *);
int8u ostasksuspend(int8u);
int8u ostaskresume(int8u);
void ossempend (os_event *,int16u,int8u *);
int8u ossempost (os_event *);
void sp_compensate(void);
void irq_isr(void);
extern num;
extern led_num;
extern *randomsem;
os_stk taskfiqstk[task_stk_size];
void display(u_int num)
} void irq_resume(void)
void init(void)
void taskisr(void *pdata)
} void taskstart(void *pdata)
} void task(void *pdata)
ossempost((os_event *)randomsem);
ostimedly(1); }
}
作業系統的具體應用
使用者獨佔全機,cpu等待人工操作 計算機資源利用率很低 直到出現離線輸入 輸出方式。2 離線輸入 輸出 off line i o 方式 程式和資料都在外圍機的控制下完成,或者說,他們在脫離主機的情況下進行的,故此稱為離線輸入 輸出 反之,在主機的直接控制下進行的輸入 輸出的方式稱為聯機輸入 輸出方...
基於r Kernel的LiteOS作業系統
liteos是應用於資源受限的感測網路的一種基於執行緒的類unix作業系統。也就是說它跑在儲存空間和ram有限的超低電壓微控制器上,這也是吸引我關注它的原因 在超低電壓下系統更易出錯 它採用r kernel核心,r kernel有三個特徵 1 為執行緒建立checkpoint,可以在出錯時進行rol...
基於r Kernel的LiteOS作業系統
liteos是應用於資源受限的感測網路的一種基於執行緒的類unix作業系統。也就是說它跑在儲存空間和ram有限的超低電壓微控制器上,這也是吸引我關注它的原因 在超低電壓下系統更易出錯 它採用r kernel核心,r kernel有三個特徵 1 為執行緒建立checkpoint,可以在出錯時進行rol...