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

单片机开发1

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

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

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

轮询系统:

概述

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

详述

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

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

举例:

int main(void{
	/*系统初始化*/
	mcu_int();//软件与硬件初始化
	
	while(1)
	{
		Task1();
		Task2();
		...
	}
}

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

前后台系统

概述

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

详述

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

int main(void{
	/*系统初始化*/
	mcu_int();//软件与硬件初始化
	/*中断初始化*/
	Interrupt_init();
	
	while(1)
	{
		Task1();//轮询任务
		Task2();
		...
		Task_event_handle();//外部事件任务
	}
}
void interrupt_fun(void)
{}
Task_event_handle();//是根据中断的一些信号完成某些功能的函数。

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

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

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

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

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xiawucha159

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值