基於作業系統的簡單應用

2021-04-13 06:57:01 字數 1705 閱讀 2682

基於作業系統的簡單應用

在建立應用之前,還應該先設定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...