在实际的项目开发中并不是所有的mcu都可以利用rtos或者其他的操作系统进行开发,大部分mcu可能是flash太小或者是RAM空间不足以支撑rtos运行,在有限的产品成本下只能选择裸机进行开发,下面分享一种我自己常用的裸机工程架构
#include "stdio.h"
unsigned char Task_flag = 0;
int main(void)
{
unsigned char Task_count = 0;
if(1 == Task_flag)//系统定时器中断标志--->5ms or 10ms
{
Task_flag = 0;
//ADC TASK
//uart send Task --> 发送数据时暂停接收
//uart recv task --> 接收数据时暂停发送 遵循单发单收---例如modbus协议请求回复
switch(Task_count)
{
case 0:
{
//Task 1
break;
}
case 24:
{
//last Task
break;
}
default:
{
break;
}
}
if(Task_count++ > 24)
{
Task_count = 0;//last task Task_count = 0
}
}
return 0;
}
void Tim_IQr(void)
{
//判断中断
//清除定时器中断
Task_flag = 1;
}
注意,使用这个结构需要给系统留一定的中断时间每个task的时间应该保持使用整个time中断的80%左右,同时尽可能的减少整个系统的中断使用,最好整个系统就只有一个定时器中断,其他外设则使用查询的方式执行获取相应的状态。还有一个注意点就是在使用裸机编程时不应该去使用delay函数,裸机编程不同于操作系统,delay只会使得MCU空转浪费系统资源。
以上纯属个人见解,如有错误敬请指正,感谢!!!!!