当前位置: 首页 > news >正文

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

常见系统名称及其含义

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

轮询系统

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

int main(void)
{HardWareInit();  // 初始化硬件while(1){if(CheckCondition1()) {  // 检查是否需要执行任务1Do_Something();      // 执行任务1Delay_ms(1000);}if(CheckCondition2()) {  // 检查是否需要执行任务2Do_Something2();     // 执行任务2Delay_ms(1000);}if(CheckCondition3()) {  // 检查是否需要执行任务3Do_Something3();     // 执行任务3Delay_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){// 任务1if(flag_1) {               // 检查标志位是否由中断设置flag_1 = 0;            // 清除标志位Do_Something();        // 执行任务1}// 任务2if(flag_2) {               // 检查标志位是否由中断设置flag_2 = 0;            // 清除标志位Do_Something2();       // 执行任务2}// 任务3if(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大小。在一些内存小的单片机上跑不了操作系统

表格特点

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

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


http://www.mrgr.cn/news/36931.html

相关文章:

  • 三、人物骨骼介绍
  • Ubuntu 22.04无法连接网络(网络图标丢失)解决方案
  • 大城市有哪些增加现金流的方式?
  • 2024.9.26 作业 +思维导图
  • Git常用方法——详解
  • windows 录音编码为flv格式时,pcm采样格式
  • element-plus 日历组件 Calendar设置每周第一天为周一-非国际化版
  • 关于uniapp wifi调用走过的坑
  • 面向对象的三大特性:封装、继承、多态
  • FPGA学习--verlog基础语法篇
  • 天童美语:培养孩子的环保意识
  • 【在Linux世界中追寻伟大的One Piece】进程间通信
  • Redis篇(初识Redis)
  • 二叉树进阶
  • 【RabbitMQ 项目】客户端:信道模块
  • Redis篇(环境搭建)
  • python实现石头,剪刀,布(turtle库简易版)
  • centos系统安装宝塔面板
  • Oracle查询(下)
  • “JavaScript 与 HTML 表单交互”