ubuntu 在 R40e 上 還有 Debian 在 Sempron 2600 上

2012年11月8日 星期四

草稿:簡單的小系統 os .. 1

先作 schuduler 和 delay

就只有 8 個 task,每個數字代表一個 priority,每個 priority 只有一個 task。
task 0 是 reserverd system task,作 background task 使用。

這樣 scheduler 就很簡單: SAVECONTEXT; currtaski=0; for(i=7;i>0;i--) if(readytask[i]==true){ currtaski=i; break; } RESTORECONTEXT;
bool readytask[] 就是標示現在是 ready to run 的 task。



delay 要實做,要配合 timer

int delaytask[i];

timer 的 ISR:
for(i=1;i<8;i++) if(delaytask[i]>0){ delaytask[i]--; if(delaytask[i]==0){ readytask[i]=true; delaytask[i]=-1; // for safe } } ... 然後如果有改變,就要 call reschedule()

create task 就超簡單,stack 也是預先宣告好的 array..
createTask(int priority, (void *taskbody)(), int *stack);
task 都create 完,call start_scheduler( ) 就可以了。




download 下來包含 atmel studio 4, 6 的project 檔,可以 build OK (使用 native compileer , not winavr)

沒有留言:

標籤

網誌存檔