首页 > 代码库 > 【ucosii】笔记1----入门

【ucosii】笔记1----入门

前言

定性认识

1、在编写单片机程序时,分为裸机程序和带操作系统的程序。裸机程序在运行时,从上而下顺序、串行地执行。

例如:

技术分享
void main(){
    init();
    while(1){
    key();//按键操作
    Display();//显示
    GetsensorVal();//获取传感器输出
    CtrlGpio();//输出
    GetBeijingTime();//获取北京时间
    Drivestepmotor();//控制步进电机
    }
}
View Code

按键:需要实时响应

显示:需要定时1s更新北京时间

步进电机:按键控制步进电机转动

传感器:获取传感器数值

其中,按键、步进电机需要实时响应,显示需要定时更新等。每个函数得到重复执行就必须等待一个完整的while(1)周期,这样,获取传感器数据、按键控制步进电机时,可能显示就不能定时更新,实时性不容易得到保证。当然,可以使用状态机和搭配外部中断、定时器中断设置一些flag,缩短while(1)执行的周期,来保证显示的实时性。但,如果程序再复杂一些,程序员不仅要写功能函数、逻辑函数、还要维护这套函数的调用逻辑,工作量就比较大了。

2、操作系统是一套完善的函数调用机制,可以保证程序运行的实时性。主要方法是划分时间片,在每个时间片去轮番运行各个函数(也可以叫任务、进程)。如果任务比较多,轮番执行起来的周期仍然很慢,所以,操作系统对各个任务划分状态(就绪、运行、挂起等),只有就绪态,才可以得到执行,这样就跳过了很多没有就绪好的任务,缩短了轮番执行的周期。另外,用户需要对各任务分配优先级,保证在多个任务都就绪时,操作系统可以按照优先级有序地执行。

3、操作系统在按时间片切换各个任务时,并不能保证在时间片内此任务能够运行完毕,在下一次切换到此任务时,需要接着上次执行的状态继续执行。这就需要保护现场、恢复现场。编程时,给每个任务定义并分配一定的堆栈,对其数据进行保存。c语言不能操作寄存器,汇编可以,所以操作系统是c和汇编混写的。

【ucosii】笔记1----入门