- 論壇徽章:
- 1
|
回復 1# 范特喬
你的這個項目不難, 這樣做:
假定你有5個tasks, task0~task4. task0 是后臺,只要沒有其他任務(wù)運行它就運行,task1 是每10ms運行一次, task2是每50ms task3 每100ms運行一次; task4每1000 ms 運行一次;task0優(yōu)先級最低。 每個task代碼大致這樣
task0(void)
{
while(TRUE){
// 運行后臺任務(wù)
}
}
task1(void)
{
while(TRUE){
PEND(10_MS_EVENT);
//接著運行task1的任務(wù)
}
}
task2(void)
{
while(TRUE){
PEND(50_MS_EVENT);
//接著運行task2的任務(wù)
}
}
task3(void)
{
while(TRUE){
PEND(100_MS_EVENT);
//接著運行task3的任務(wù)
}
}
task4(void)
{
while(TRUE){
PEND(1000_MS_EVENT);
//接著運行task4的任務(wù)
}
}
用一個標準timer, 來post event喚醒各個task. 在標準timer的ISR里
timer_isr()
{
每10ms, POST(10_MS_EVENT);
每50ms, POST(50_MS_EVENT)&POST(10_MS_EVENT) ;
每100ms, POST(100_MS_EVENT)& POST(50_MS_EVENT)& POST(10_MS_EVENT);
每1000ms, POST(1000_MS_EVENT)& POST(100_MS_EVENT)& POST(50_MS_EVENT)& POST(10_MS_EVENT);
}
這樣你的系統(tǒng)里所有的任務(wù)都按你指定的周期跑起來;CPU空閑的時候就運行task0.
你可以改變系統(tǒng)里task數(shù)目和周期。但優(yōu)先級有講究;跑得快的任務(wù)優(yōu)先級要高。 |
|