• UCOSII


    泉水

    UCOSII

    提出者

    UCOSII的前身是UCOS,最早出自于1992 年美国嵌入式系统专家Jean J.Labrosse 在《嵌入式系统编程》杂志的5月和6月刊上刊登的文章连载,并把UCOS 的源码发布在该杂志的
    BBS 上。

    是什么

    UCOSII是一个可以基于ROM运行的、可裁减的、抢占式、实时多任务内核,具有高度可
    移植性,特别适合于微处理器和控制器,是和很多商业操作系统性能相当的实时操作系统
    (RTOS)。

    开发及特性

    UCOSII最大程度上使用ANSI C语言进行开发,并且已经移植到近40多种处理器体系上,涵盖了从8位到64位各种CPU(包括DSP)
    UCOSII是专门为计算机的嵌入式应用设计的, 绝大部分代码是用C语言编写的。
    CPU 硬件相关部分是用汇编语言编写的、总量约200行的汇编语言部分被压缩到最低限度,为的是便于移植到任何一种其它的CPU 上。
    用户只要有标准的ANSI 的C交叉编译器,有汇编器、连接器等软件工具,就可以将UCOSII嵌人到开发的产品中。
    UCOSII具有执行效率高、占用空间小、实时性能优良和可扩展性强等特点, 最小内核可编译至 2KB 。
    UCOSII已经移植到了几乎所有知名的CPU 上。
    UCOSII构思巧妙。结构简洁精练,可读性强,同时又具备了实时操作系统的全部功能。
    虽然它只是一个内核,但非常适合初次接触嵌入式实时操作系统的朋友,可以说是麻雀虽小,五脏俱全。

    UCOSII结构

    在这里插入图片描述
    上图可以看出,UCOSII的移植,我们只需要修改:os_cpu.h、os_cpu_a.asm和os_cpu.c
    等三个文件即可

    • os_cpu.h,进行数据类型的定义,以及处理器相关代码和几个函数原型;
    • os_cpu_a.asm,是移植过程中需要汇编完成的一些函数,主要就是任务切换函数;
    • os_cpu.c,定义一些用户HOOK函数。

    定时器的作用是为UCOSII提供系统时钟节拍,实现任务切换和任务延时等功能。

    • 这个时钟节拍由OS_TICKS_PER_SEC(在os_cfg.h中定义)设置,一般我们设置UCOSII的系统时钟节拍为1ms~100ms,具体根据你所用处理器和使用需要来设置。
    • 本章,我们利用STM32F4的SYSTICK定时器来提供UCOSII时钟节拍。

    UCOSII早期版本只支持64个任务,但是从2.80版本开始,支持任务数提高到255个。

    • UCOSII保留了最高4个优先级和最低4个优先级的总共8个任务,用于拓展使用。
    • 实际上,UCOSII一般只占用了最低2个优先级,分别用于空闲任务(倒数第一)和统计任务(倒数第二),所以剩下给我们使用的任务最多可达255-2=253个(V2.91)。

    所谓的任务,其实就是一个死循环函数,该函数实现一定的功能,一个工程可以有很多这样的任务(最多255个)

    • UCOSII对这些任务进行调度管理,让这些任务可以并发工作(注意不是同时工作,并发只是各任务轮流占用CPU,而不是同时占用,任何时候还是只有1个任务能够占用CPU),这就是UCOSII最基本的功能。

    UCOSII

    Ucos任务的一般格式为:

    void MyTask (void *pdata) 
    {  
     任务准备工作… 
     While(1)//死循环 
    { 任务MyTask实体代码; 
      OSTimeDlyHMSM(x,x,x,x);//调用任务延时函数,释放cpu控制权, 
    } 
    } 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    并发

    假如我们新建了2个任务为MyTask和YourTask,这里我们先忽略任务优先级的概念,两个任务死循环中延时时间为1s。

    • 如果某个时刻,任务MyTask在执行中,当它执行到延时函数OSTimeDlyHMSM的时候,它释放cpu控制权
    • 这个时候,任务YourTask获得cpu控制权开始执行,任务YourTask执行过程中,也会调用延时函数延时1s释放CPU控制权
    • 这个过程中任务A延时1s到达,重新获得CPU控制权,重新开始执行死循环中的任务实体代码。
    • 如此循环,现象就是两个任务交替运行,就好像CPU在同时做两件事情一样。
  • 相关阅读:
    Idea git 提交(push) github失败的原因和解决办法
    CAP理论和BASE思想
    使用IDEA 将Eclipse java工程转为maven格式
    ubuntu 安装 opencv 【亲测有效】
    Vue弹窗的使用与传值
    大咖说*每周推荐 | 云采销助力中小企业获客提升 300%
    DIY官网可视化工具打造UNIAPP-uviewUI可视化
    NineData:高效、安全、可靠的DB2数据管理平台
    高速公路堵车动力学
    计算机毕业设计 基于SpringBoot的医院档案管理系统的设计与实现 Java实战项目 附源码+文档+视频讲解
  • 原文地址:https://blog.csdn.net/qq_45578181/article/details/127715007