立志最细,你是否知道,嵌入式开发常见系统名称及其含义!!!

常见系统名称及其含义

        后台有小伙伴问,这里附带介绍,小伙伴们可能听过,不知道定义细节的系统。

轮询系统

        轮询系统指在,裸机编程状态下,首先完成各种硬件的初始化,然后死循环中,按照顺序执行各种命令,这种系统仅引用在非常简单的要求中,没有实时响应能力

int main(void)
{
    HardWareInit();  // 初始化硬件
    while(1)
    {
        if(CheckCondition1()) {  // 检查是否需要执行任务1
            Do_Something();      // 执行任务1
            Delay_ms(1000);
        }

        if(CheckCondition2()) {  // 检查是否需要执行任务2
            Do_Something2();     // 执行任务2
            Delay_ms(1000);
        }

        if(CheckCondition3()) {  // 检查是否需要执行任务3
            Do_Something3();     // 执行任务3
            Delay_ms(1000);
        }
    }
}

        这里假设每个任务触发条件是三个不同的按键,跑代码的时候就能发现,疯狂按下按键3(任务3触发条件),2S以后才有反应,也就是说,在这个系统中, Do_Something3();,在急也要等前面的执行完,才能执行,这个就是轮询系统,这个就是没有实时响应能力。       

前后台系统

       前后台系统,是在轮询系统的基础上加入了中断,中断用来相应外部紧急事件,普通功能的执行在轮询系统中,在这个系统中中断称为前台,main()函数中的无限循环称为后台

// 全局标志位
volatile uint8_t flag_1 = 0;
volatile uint8_t flag_2 = 0;
volatile uint8_t flag_3 = 0;

int main(void)
{
    HardWareInit();  // 初始化硬件
    while(1)
    {
        // 任务1
        if(flag_1) {               // 检查标志位是否由中断设置
            flag_1 = 0;            // 清除标志位
            Do_Something();        // 执行任务1
        }

        // 任务2
        if(flag_2) {               // 检查标志位是否由中断设置
            flag_2 = 0;            // 清除标志位
            Do_Something2();       // 执行任务2
        }

        // 任务3
        if(flag_3) {               // 检查标志位是否由中断设置
            flag_3 = 0;            // 清除标志位
            Do_Something3();       // 执行任务3
        }
    }
}

// 中断服务程序 (ISR) 用于后台处理
void IRQ_Handle(void)
{
    flag_1 = 1;           // 设置任务1的标志位
    Do_IRQ_Function();     // 后台处理任务1相关的中断
}

void IRQ_Handle2(void)
{
    flag_2 = 1;           // 设置任务2的标志位
    Do_IRQ_Function2();    // 后台处理任务2相关的中断
}

void IRQ_Handle3(void)
{
    flag_3 = 1;           // 设置任务3的标志位
    Do_IRQ_Function3();    // 后台处理任务3相关的中断
}

        前后台系统,有了实时响应能力,但是这种裸机系统,还是有缺陷,使用中断函数来充当前台,当中断响应函数执行的之后,while()循环中的函数是没有办法正常执行的,所以要求中断响应函数只能执行,简单快速的功能,如果反之,后台系统不能正常执行,也会导致系统没有功能运行。

多任务系统

        这个是常说的操作系统,有很多种FreeRtos,RT_Thread,Linux,μC/OS-II / μC/OS-III,都有一个特性,支持多种任务并发执行,有人经常会说同时执行,这里细扣是并发执行,只是切换Task的速度比较快。

// 全局标志位
volatile uint8_t flag_1 = 0;
volatile uint8_t flag_2 = 0;
volatile uint8_t flag_3 = 0;

int main(void)
{
    HardWareInit();  // 初始化硬件
    
    RTOSInit();//RTOS初始化
    
    RTOSStart();//开启RTOS任务调度器
    
}

// 中断服务程序 (ISR) 用于后台处理
void IRQ_Handle(void)
{
    flag_1 = 1;           // 设置任务1的标志位
    Do_IRQ_Function();     // 后台处理任务1相关的中断
}

void IRQ_Handle2(void)
{
    flag_2 = 1;           // 设置任务2的标志位
    Do_IRQ_Function2();    // 后台处理任务2相关的中断
}

void IRQ_Handle3(void)
{
    flag_3 = 1;           // 设置任务3的标志位
    Do_IRQ_Function3();    // 后台处理任务3相关的中断
}

        多任务系统中的Task是,无限循环不能返回的小程序,由操作系统调度器,管理调度,没有什么硬性缺点,但是移植操作系统使用在工程中,对单片机FlashRam有要求,因为操作系统本身有占用flash大小。在一些内存小的单片机上跑不了操作系统

表格特点

系统紧急事件事件处理缺点
轮询系统主程序主程序没有实时响应能力
前后台系统前台中断主程序前台只能处理简单事件
多任务系统前台中断主程序

                                    我是大狗,希望对你,有所帮助,欢迎指正!!!

评论 18
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值