• 单片机开发-软件架构与系统设计(工程实现使用的也是轮询系统、前后台系统和多任务系统)


    单片机开发1

    单片机开发可以分为程序裸跑与多任务。 在单片机的工程使用中,可以分为裸机系统和多任务系统。

    裸机系统一般被叫做裸跑,大部分的代码都是应用程序。
    多任务系统也可以称为操作系统,它是在我们的应用程序与单片机硬件之间增加了一个中间层。

    裸跑(裸机系统)又分为轮询系统前后台系统

    轮询系统:

    概述

    裸机轮询系统就是在编程时,首先完成相关硬件和软件的初始化,然后让主应用程序在一个死循环里不断的循环,顺序处理各个应用功能事件。

    详述

    在main函数或规定的入口函数,初始化相关硬件和数据库。然后让主程序在死循环while(1)中不断循环。
    顺序的处理各种事件,适合不需要外部事件驱动就能完成的工作。

    因为如果有外部事件,轮询系统还在执行其他代码,不能及时处理外部事件,导致错过处理外部事件。实时性很低。

    举例:

    int main(void{
    	/*系统初始化*/
    	mcu_int();//软件与硬件初始化
    	
    	while(1)
    	{
    		Task1();
    		Task2();
    		...
    	}
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    轮询系统是一种比较简单的软件结构,适合于顺序执行的应用程序且不需要外部事件驱动就能完成的应用。

    前后台系统

    概述

    裸机前后台系统就是在编程时,加入能够处理外部事件的中断响应和中断处理程序,其他部分与轮询系统类似。

    详述

    前后台系统是在轮询系统的基础上加上中断得到前后台系统。
    中断为前台,轮询为后台。外部事件相当于饭店的客人,客人的点单由前台负责,点单的内容制作由后厨(后台)处理。
    这个前台其实就是一个中断处理任务,后台使我们原来的顺序执行的死循环。
    举例:

    int main(void{
    	/*系统初始化*/
    	mcu_int();//软件与硬件初始化
    	/*中断初始化*/
    	Interrupt_init();
    	
    	while(1)
    	{
    		Task1();//轮询任务
    		Task2();
    		...
    		Task_event_handle();//外部事件任务
    	}
    }
    void interrupt_fun(void)
    {}
    Task_event_handle();//是根据中断的一些信号完成某些功能的函数。
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    在后台程序执行时,如果有外部事件发生,则会产生中断,打断正在执行的后台程序,转去执行中断响应。
    在这里不要把中断响应和需要依据中断信号完成的某些任务混淆,中断响应会打断后台程序的正常执行,保存现场,转去执行中断响应程序,处理完中断后,返回原来后台被打断执行的位置。直到后台执行到Task_event_handle时,其中内部程序会依据中断响应时标记的时间,在做相应的处理。

    关于中断,要辩证看待,如果要处理的事情很简单,用时短,可以直接在中断响应函数中处理完。
    如果要处理的事情比较复杂,就像上文中说的,要返回后台处理,把中断的响应和应用处理分开,也是在后台顺序执行的。

    相比于轮询系统,前后台系统可以确保外部事件不会丢失,提高程序的实时性和实时响应能力。

    有关中断内容参考http://t.csdn.cn/fZWqf(什么是中断)

  • 相关阅读:
    在3D视觉技术的帮助下,轻松实现纸箱拆码垛
    webWorker
    go项目部署:docker部署go项目&直接运行二进制文件部署(两种方式,步骤详细)
    CH08_搬迁特性
    Optional的应用
    Flutter高仿微信-第24篇-隐私政策
    Polygon Miden VM架构总览
    verilog实现分频(奇数分频,偶数分频,且50%占空比,通用版本)
    通过脚本(awk,grep)清洗实体类数据,存入数据库
    MySql 执行count(1)、count(*) 与 count(列名) 区别
  • 原文地址:https://blog.csdn.net/xiawucha159/article/details/127797760