ucosii笔记1----入门

Posted Phil的博客园

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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----入门的主要内容,如果未能解决你的问题,请参考以下文章

UCOSII笔记---信号量邮箱消息队列信号量集软件定时器

学习ucosii要用到的几本书

关于UCOSII的学习资料

AngularJS入门学习笔记一

UCOSii和Linux的区别和联系

2019-2020-1 20175226 《信息安全系统设计基础》ucosii