51系列小型作業系統精髓 簡單實現3

2021-09-08 03:59:31 字數 953 閱讀 9918

如今遇到的問題:

1.任務不用預載入,進入乙個任務。載入乙個任務。

沒有任務時。定時器怎麼處理?當僅僅有乙個任務時,怎麼處理?多個任務怎麼輪轉或按優先順序切換?

2.關於各任務定時時間,乙個乙個地減是否麻煩,有沒有更好的方法?

3.沒有保護寄存,這樣切換,是否對?當任務函式有多個層巢狀時。有沒有問題?

#include "stc12c5a.h"

#define timer_reload() //使能t/c 初始10ms

#define max_tasks 8 //任務槽個數.必須和實際任務數一至

#define max_task_dep //最大棧深.最低不得少於2 個,保守值為12.

unsigned char idata task_stack[max_tasks][2];//任務堆疊.

unsigned char idata task_time[max_tasks];

unsigned char task_id=0; //當前活動任務號

bit akg=0,bkg=0;

/*//任務切換函式(任務排程器)

void task_switch() */

/*//任務裝入函式.將指定的函式(引數1)裝入指定(引數2)的任務槽中.假設該槽中原來就有任

//務,則原任務丟失,但系統本身不會錯誤發生.

void task_load(unsigned int fn, unsigned char tid) */

void task_switch_wait(unsigned char time)

void task_a()

}void task_b()

}void timer0init()

void main()

}void tm0_isr() interrupt 1 using 1

51系列小型作業系統精髓 簡單實現3

現在遇到的問題 1.任務不用預載入,進入乙個任務,載入乙個任務。沒有任務時,定時器怎麼處理?當只有乙個任務時,怎麼處理?多個任務怎麼輪轉或按優先順序切換?2.關於各任務定時時間,乙個乙個地減是否麻煩,有沒有更好的方法?3.沒有保護寄存,這樣切換,是否對?當任務函式有多個層巢狀時,有沒有問題?incl...

51系列小型作業系統精髓 簡單實現4

include define max tasks 2 任務槽個數.必須和實際任務數一至 define max task dep 12 最大棧深.最低不得少於2 個,保守值為12.unsigned char idata task stack max tasks max task dep 任務堆疊.un...

51系列小型作業系統精髓 簡單實現2

在51微控制器中,不能直接改動pc,但有一種方法是能夠改變pc的。函式呼叫裡會把pc值壓入堆疊中,呼叫結束後,會把pc值彈出到 pc中。能改變pc就能夠控制程式流程。1.在任務中切換出去 define max tasks 8 任務槽最大個數.unsigned char idata task stac...