?? 嵌入式os minos概要.txt
字號:
/********************************************************************************/
嵌入式OS minOS 0.01v概要
1. 使用環境 ; WinAVR c編譯器,AVR系列單片機。
2. 需要的CPU資源;
內核所需程序code長度約900-1200字節。
內核所需RAM長度字節數 = 每個任務控制塊4字節*任務數 + 3字節
每個任務使用獨立的硬件堆棧空間,最少17字節,要根據任務需要選定。
內核可工作在RAM ,XRAM和PDATA三種存儲方式。
3. 基本性能和特點;
用函數模擬的"軟中斷"方式進行任務切換,是非剝奪型占先式OS。
任務切換的執行時間約100-300指令周期。
任務有四種狀態既;運行(run),掛起(suspend),等待時間到(timeout),準備就緒(ready)。
內核沒有任何關中斷的操作,所以對中斷響應沒有任何影響。
程序全部由c函數實現,但其中的"軟中斷"函數嵌入了部分匯編程序。
4. OS功能函數概要;
OSInit() --- 初始化OS任務控制塊(initialization OSTCB)。
OSStart() --- 啟動OS(Start OS)。
OSTaskCreate() --- 建立一個任務(Create a Task)。
OSTaskSuspend() --- 把正在運行的任務掛起(Suspend a task)。
OSTaskResume() --- 恢復被掛起的任務(resume a task)。
OSTimeDly() --- 把正在運行任務暫停n個時間節拍(stop task for ticks)。
5. OS程序文件說明;
OS_Core.c --- 內核功能函數文件,上面的OS功能函數主要在該文件中實現。
OS_CPU.c --- CPU接口,其中是和CPU硬件相關的函數,有任務切換用的"軟中斷"函數等。
OS_Includes.h --- OS的全部頭文件,其中包括;
OS_CPU.h --- 與CPU硬件相關的頭文件。
OS_CFG.h --- 與OS配置相關的頭文件。
OS_Minos.h --- OS的變量和函數聲明文件。
6. 關于任務控制塊和任務優先級;
在OS_Minos.h頭文件里聲明了一個結構體類型OS_TCB,它就是任務控制塊。每個任務都需要一個任
務控制塊用于控制任務的運行。為了控制每個任務,定義了一個OS_TCB的結構體數OSTCB[OS_MAX_TASKS]
其中OS_MAX_TASKS是最大任務數,OS_MAX_TASKS要大于需要建立的任務數。
任務優先級是一個數值,每個任務都需要有自己的優先級,兩個任務的優先級不能相同。當OS內核
進行任務切換時,總是優先級最高的準備就緒的任務首先運行。數值0的優先級最高。
所有任務優先級的值必須 < 最大任務數OS_MAX_TASKS
7. OS使用概要;
每個任務都需要自己的運行堆棧空間和任務優先級。main()函數也是一個任務,它的優先級在頭文
件OS_CFG.h里聲明,main()函數任務的堆棧空間由c51編譯器自動配置,不需要用戶處理。其它要建立的
任務,需要聲明該任務的堆棧空間和優先級。任務的堆棧空間是51存儲器的idata區。
任務的堆棧空間大小 > 17字節 + 任務的函數調用深度*2 + 中斷的堆棧深度
任務優先級的值必須小于在頭文件OS_CFG.h里聲明的任務數。
下面是建立一個任務TaskA(void)需要的代碼示例;
#include "OS_Includes.h"
#define LED_ON 1
#define LED_OFF 0
sbit LED1=P1^0;
sbit LED2=P1^1;
void TaskA(void);
#define TaskAPrio 1 //聲明任務TaskA(void)的優先級。
unsigned char idata TaskAStk[MAX_STK_SIZE]; //聲明任務TaskA(void)的堆棧空間。
void main(void)
{
OSInit(); //初始化OS任務控制塊(initialization OSTCB)。
OSTaskCreate(TaskA,TaskAStk,TaskAPrio); //建立任務TaskA(void)。
OSStart(); //起動OS。
while (1)
{
LED1=LED_ON;
OSTimeDly(50);
LED1=LED_OFF;
OSTimeDly(50);
}
}
void TaskA(void)
{
while (1)
{
LED2=LED_OFF;
OSTimeDly(50);
LED2=LED_ON;
OSTimeDly(50);
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -