方案1:大锅饭
int main(){
init();
while(1)
{
sensorTask();
hmiTask();
}
}
- 实际开发比较少使用,因为任务的调度频率要求不同,导致不需要频繁执行的任务浪费CPU的资源
方案2: 按需分配,效率更高
基于时间片的机制来实现
- 缺点:如果业务模块多了,比如有10个业务,就会在while(1)中有10个if 语句,代码不美观
优化:采用方案3
方案3: 按需分配,软件架构更优
循环判断看哪个任务到了执行的时间,如果run标志位为1 ,说明可以运行
1ms 一次的滴答定时器,对各个任务的计数器进行计数,到了计数的时间,则触发run = 1
结构体成员封装、任务调度周期初始化