裸机多任务编程实例

在实际的项目开发中并不是所有的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空转浪费系统资源。

以上纯属个人见解,如有错误敬请指正,感谢!!!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值