标签:显示 编程 splay 状态机 closed 运行时 保存 pre 不容易
前言
定性认识
1、在编写单片机程序时,分为裸机程序和带操作系统的程序。裸机程序在运行时,从上而下顺序、串行地执行。
例如:
void main(){ init(); while(1){ key();//按键操作 Display();//显示 GetsensorVal();//获取传感器输出 CtrlGpio();//输出 GetBeijingTime();//获取北京时间 Drivestepmotor();//控制步进电机 } }
按键:需要实时响应
显示:需要定时1s更新北京时间
步进电机:按键控制步进电机转动
传感器:获取传感器数值
其中,按键、步进电机需要实时响应,显示需要定时更新等。每个函数得到重复执行就必须等待一个完整的while(1)周期,这样,获取传感器数据、按键控制步进电机时,可能显示就不能定时更新,实时性不容易得到保证。当然,可以使用状态机和搭配外部中断、定时器中断设置一些flag,缩短while(1)执行的周期,来保证显示的实时性。但,如果程序再复杂一些,程序员不仅要写功能函数、逻辑函数、还要维护这套函数的调用逻辑,工作量就比较大了。
2、操作系统是一套完善的函数调用机制,可以保证程序运行的实时性。主要方法是划分时间片,在每个时间片去轮番运行各个函数(也可以叫任务、进程)。如果任务比较多,轮番执行起来的周期仍然很慢,所以,操作系统对各个任务划分状态(就绪、运行、挂起等),只有就绪态,才可以得到执行,这样就跳过了很多没有就绪好的任务,缩短了轮番执行的周期。另外,用户需要对各任务分配优先级,保证在多个任务都就绪时,操作系统可以按照优先级有序地执行。
3、操作系统在按时间片切换各个任务时,并不能保证在时间片内此任务能够运行完毕,在下一次切换到此任务时,需要接着上次执行的状态继续执行。这就需要保护现场、恢复现场。编程时,给每个任务定义并分配一定的堆栈,对其数据进行保存。c语言不能操作寄存器,汇编可以,所以操作系统是c和汇编混写的。
标签:显示 编程 splay 状态机 closed 运行时 保存 pre 不容易
原文地址:http://www.cnblogs.com/isha2088/p/6882929.html