打造自己的rtos(5)

2021-05-18 04:39:44 字數 2213 閱讀 5111

第五篇: 完善的協作式的核心   

現在為上面的協作式核心新增一些os中所必須的服務:

1   掛起和重新執行任務

2   訊號量(在必要時候,可以擴充套件成郵箱和資訊佇列)

3   延時

#include

#include

#include

unsigned char stack[400];

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 ostimedly(unsigned int ticks) }

//訊號量

struct semblk

sem[10];

//初始化訊號量

void ossemcreat(unsigned char index,unsigned char type)

//任務等待訊號量,掛起

unsigned char ostasksempend(unsigned char index,unsigned int timeout)

else

return 1;

} //傳送乙個訊號量,可以從任務或中斷傳送

void ossempost(unsigned char index)

else                                        //當要求的訊號量為獨佔型

else }

} //從任務傳送乙個訊號量,並進行排程

void ostasksempost(unsigned char index)   

//清除乙個訊號量,只對共享型的有用。

//對於獨佔型的訊號量,在任務占用後,就交得不可以用了。   

void ossemclean(unsigned char index)

void tcn0init(void)     // 計時器0

signal(sig_overflow0) }

} tcnt0=100;

} void task0() }

void task1() }

void task2() }

void taskscheduler() }

int main(void)

打造自己的rtos(4)

第四篇 只有延時服務的協作式的核心 cooperative multitasking 前後臺系統,協作式核心系統,與佔先式核心系統,有什麼不同呢?記得在21ic上看過這樣的比喻,你 小工 在用廁所,經理在外面排第一,老闆在外面排第二。如果是前後臺,不管是誰,都必須按排隊的次序使用廁所 如果是協作式,...

打造自己的簡易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框架還要了解框架的執行流程 入口檔案 定義常量 引入函式庫 自動載入類 啟動框架 ...