- 论坛徽章:
- 1
|
回复 1# 范特乔
你的这个项目不难, 这样做:
假定你有5个tasks, task0~task4. task0 是后台,只要没有其他任务运行它就运行,task1 是每10ms运行一次, task2是每50ms task3 每100ms运行一次; task4每1000 ms 运行一次;task0优先级最低。 每个task代码大致这样
task0(void)
{
while(TRUE){
// 运行后台任务
}
}
task1(void)
{
while(TRUE){
PEND(10_MS_EVENT);
//接着运行task1的任务
}
}
task2(void)
{
while(TRUE){
PEND(50_MS_EVENT);
//接着运行task2的任务
}
}
task3(void)
{
while(TRUE){
PEND(100_MS_EVENT);
//接着运行task3的任务
}
}
task4(void)
{
while(TRUE){
PEND(1000_MS_EVENT);
//接着运行task4的任务
}
}
用一个标准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);
}
这样你的系统里所有的任务都按你指定的周期跑起来;CPU空闲的时候就运行task0.
你可以改变系统里task数目和周期。但优先级有讲究;跑得快的任务优先级要高。 |
|