第四篇:只有延時服務的協作式的核心 cooperative multitasking
前後臺系統,協作式核心系統,與佔先式核心系統,有什麼不同呢?
記得在21ic上看過這樣的比喻,「你(小工)在用廁所,經理在外面排第一,老闆在外面排第二。如果是前後臺,不管是誰,都必須按排隊的次序使用廁所;如果是協作式,那麼可以等你用完廁所,老闆就要比經理先進入;如果是佔先式,只要有更高階的人在外面等,那麼廁所裡無論是誰,都要第一時間讓出來,讓最高端別的人先用。」
#include
#include
#include
unsigned char stack[200];
register unsigned char osrdytbl asm("r2"); //任務執行就緒表
register unsigned char ostaskrunningprio asm("r3"); //正在執行的任務
#define os_tasks 3 //設定執行任務的數
struct taskctrblock //任務控制塊
tcb[os_tasks+1];
//防止被編譯器占用
register unsigned char tempr4 asm("r4");
register unsigned char tempr5 asm("r5");
register unsigned char tempr6 asm("r6");
register unsigned char tempr7 asm("r7");
register unsigned char tempr8 asm("r8");
register unsigned char tempr9 asm("r9");
register unsigned char tempr10 asm("r10");
register unsigned char tempr11 asm("r11");
register unsigned char tempr12 asm("r12");
register unsigned char tempr13 asm("r13");
register unsigned char tempr14 asm("r14");
register unsigned char tempr15 asm("r15");
register unsigned char tempr16 asm("r16");
register unsigned char tempr17 asm("r17");
//建立任務
void ostaskcreate(void (*task)(void),unsigned char *stack,unsigned char taskid)
//開始任務排程,從最低優先順序的任務的開始
void osstarttask()
//進行任務排程
void ossched(void)
void ostimedly(unsigned int ticks)
} void tcn0init(void) // 計時器0
signal(sig_overflow0)
} }
tcnt0=100; }
void task0()
} void task1()
} void task2()
} void taskscheduler()
} int main(void)
在上面的例子中,一切變得很簡單,三個正在執行的主任務,都通過延時服務,主動放棄對cpu的控制權。
在時間中斷中,對各個任務的的延時進行計時,如果某個任務的延時結束,將任務重新在就緒表中置位。
最低階的系統任務taskscheduler(),在三個主任務在放棄對cpu的控制權後開始不斷地進行排程。如果某個任務在就緒表中置位,通過排程,進入最高端別的任務中繼續執行。
打造自己的rtos(5)
第五篇 完善的協作式的核心 現在為上面的協作式核心新增一些os中所必須的服務 1 掛起和重新執行任務 2 訊號量 在必要時候,可以擴充套件成郵箱和資訊佇列 3 延時 include include include unsigned char stack 400 register unsigned c...
打造自己的簡易HTML Editor
href ms help hx hxruntime hxlink.css type text css rel stylesheet html的很多控制項都提供乙個叫contenteditable 首先定義乙個div,並設定contenteditable true 接著需要有一些命令來操作這個div ...
打造自己的php框架
自己打造php框架,首先要對自己的框架定位,為什麼現在已經有這麼多非常成熟的框架而不用,要用自己的php框架。1 為了更快的開發效率 2 為了更高的執行效率 3 彰顯出自己的實力 一 框架流程 要想打造乙個自己的php框架還要了解框架的執行流程 入口檔案 定義常量 引入函式庫 自動載入類 啟動框架 ...