单片机开发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(什么是中断)