第1章 方式一(平均主义)
int main(int argc, char **argv){
/* RTC 初始化 */
bsp_RTC_Init(&rtc);
/* 串口初始化 */
uartInit(115200);
/* LED初始化 */
ledInit();
while(1){
// 任务1(获取传感器数据)
// 任务2
// 任务3
}
}
1.1 平均主义的缺陷
获取传感器数据可以600ms去读取一次,但是按照上面的架构,可能十几微妙就去获取一次传感器的数据,照成CPU的浪费;
第2章 方式二(基于时基)
不同的时间点执行不同的任务
2.1 时基机制
uint8_t flag_1ms = 0; // 每来1ms, 该标志位被置位为1;
uint8_t cnt_1ms = 0; // 每来1ms, 该毫秒计数值加1;
uint8_t flag_10ms = 0; // 10ms时间到, 该标志位被置位为1;
uint8_t cnt_10ms = 0; // 10ms时间到, 该毫秒计数值加1;
uint8_t flag_100ms = 0; // 100ms时间到, 该标志位被置位为1;
uint8_t cnt_100ms = 0; // 100ms时间到, 该毫秒计数值加1;
uint8_t flag_1s = 0; // 1000ms时间到, 该标志位被置位为1;
uint8_t cnt_1s = 0; // 1000ms时间到, 该毫秒计数值加1;
int main(int argc, char **argv){
while(1){
// 1ms时间到达
if(flag_1ms == 1){
flag_1ms = 0;
cnt_1ms++;
// 累加到10ms后
if(cnt_1ms >= 10){
cnt_1ms = 0;
flag_10ms = 1;
}
// TODO: 1ms到后需要执行的任务
}
// 10ms时间到达
if(flag_10ms == 1){
flag_10ms = 0;
cnt_10ms++;
// 累加到100ms后
if(cnt_10ms >= 10){
cnt_10ms = 0;
flag_100ms = 1;
}
// TODO: 10ms到后需要执行的任务
}
// 100ms时间到达
if(flag_100ms == 1){
flag_100ms = 0;
cnt_100ms++;
// 累加到1000ms后
if(cnt_100ms >= 10){
cnt_100ms = 0;
flag_1s = 1;
}
// TODO: 100ms到后需要执行的任务
}
// 1s时间到达
if(flag_1s == 1){
flag_1s = 0;
cnt_1s++;
// TODO: 1s到后需要执行的任务
}
}
}
2.1 时基机制的缺陷
主循环内部出现很多if判断;