打造自己的rtos(4)

2021-05-18 04:40:45 字數 2042 閱讀 3193

第四篇:只有延時服務的協作式的核心   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框架還要了解框架的執行流程 入口檔案 定義常量 引入函式庫 自動載入類 啟動框架 ...