0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

STM32入门学习笔记之uCOS-II系统移植1

jf_78858299 来源:滑小稽笔记 作者:电子技术园地 2023-02-16 16:13 次阅读

23.1 操作系统概述

之前的实验都是利用单片机实现某个单一功能,但是有时候需要在两个功能同时运行,这时就需要引入操作系统的概念,操作系统(Operating System,简称OS)是一种管理电脑硬件与软件资源的程序,同时也是计算机系统的内核与基础,操作系统大致包括5种功能:进程管理,作业管理,存储管理,设备管理与文件管理。

23.1.1 操作系统分类

操作系统有三种基本类型:多道程序系统,分时系统,实时系统,最初操作系统是不支持这种微型单片机的运行的,随着科技的发展才产生了针对于这种M系列内核的嵌入式操作系统,常见的嵌入式操作系统有FreeeRTOSuCos,uC-Linux(一种Linux精简版本),在STM32中一般运用FreeRTOS和uCos这两种系统,Linux由于必须有内存才能运行,一般Linux系统需要大约200M的存储空间才能装下,我们这里采用uCos-II系统为例来进行嵌入式操作系统的移植实验。

23.1.2 uCOS简介

uCos系统最早出自于1992年美国嵌入式专家Jean J.Labrosse发表在《嵌入式系统编程》上的,并在该杂志的BBS上发布了源码,发展到现在uCos-III已经出来,但是目前使用最广泛的还是uCos-II,本单元我们采用uCos-II来进行介绍。

   uCos-II是一个可以基于ROM运行的,可裁剪的,抢占式,实时多任务内核,采用C语言进行编写,这是一种专门为计算机的嵌入式应用设计的,CPU硬件相关部分采用汇编语言编写,执行效率高,占用空间小,最小内核可编译至2Kbyte,uCos-II体系结构如下图所示。

图片

从上图可以发现,我们移植系统的时候,只需要修改os_cpu.h,os_cpu_a.asm和os_cpu.c等三个文件即可,其中其中:os_cpu.h,进行数据类型的定义,以及处理器相关代码和几个函数原型;os_cpu_a.asm,是移植过程中需要汇编完成的一些函数,主要就是任务切换函数;os_cpu.c,定义一些用户HOOK函数。

图中定时器的作用是为UCOS-II提供系统时钟节拍,实现任务切换和任务延时等功能。这个时钟节拍由OS_TICKS_PER_SEC(在os_cfg.h中定义)设置,一般我们设置uCos-II的系统时钟节拍为1ms~100ms,具体根据你所用处理器和使用需要来设置。我们利用STM32F1的SYSTICK定时器来提供UCOS-II时钟节拍。

uCos-II早期版本只支持64个任务,但是从2.80版本开始,支持任务数提高到255个,不过对我们来说一般64个任务都是足够多了,一般很难用到这么多个任务。uCos-II保留了最高4个优先级和最低4个优先级的总共8个任务,用于拓展使用,但实际上,uCos-II一般只占用了最低2个优先级,分别用于空闲任务(倒数第一)和统计任务(倒数第二),所以剩下给我们使用的任务最多可达255-2=253个(V2.91)。

所谓的任务,其实就是一个死循环函数,该函数实现一定的功能,一个工程可以有很多这样的任务(最多255个),uCos-II对这些任务进行调度管理,让这些任务可以并发工作(不是同时工作,并发只是各任务轮流占用CPU,而不是同时占用,任何时候还是只有1个任务能够占用CPU),这就是uCos-II最基本的功能。

uCos-II的任何任务都是通过一个叫任务控制块(TCB)的东西来控制的,每个任务管理块有3个最重要的参数:1,任务函数指针;2,任务堆栈指针;3,任务优先级;任务控制块就是任务在系统里面的身份证(uCos-II通过优先级识别任务)

在uCos-II中,使用CPU的时候,优先级高(数值小)的任务比优先级低的任务具有优先使用权,即任务就绪表中总是优先级最高的任务获得CPU使用权,只有高优先级的任务让出CPU使用权(比如延时)时,低优先级的任务才能获得CPU使用权。uCos-II不支持多个任务优先级相同,也就是每个任务的优先级必须不一样。任务的调度其实就是CPU运行环境的切换

uCos-II的每个任务都是一个死循环。每个任务都处在以下5种状态之一的状态下,这5种状态是:睡眠状态、就绪状态、运行状态、等待状态(等待某一事件发生)和中断服务状态。

(1)睡眠状态:任务在没有被配备任务控制块或被剥夺了任务控制块时的状态。

(2)就绪状态:系统为任务配备了任务控制块且在任务就绪表中进行了就绪登记,任务已经准备好了,但由于该任务的优先级比正在运行的任务的优先级低,还暂时不能运行,这时任务的状态叫做就绪状态。

(3)运行状态:该任务获得CPU使用权,并正在运行中,此时的任务状态叫做运行状态。

(4)等待状态:正在运行的任务,需要等待一段时间或需要等待一个事件发生再运行时,该任务就会把CPU的使用权让给别的任务而使任务进入等待状态。

(5)中断服务状态:一个正在运行的任务一旦响应中断申请就会中止运行而去执行中断服务程序,这时任务的状态叫做中断服务状态。

uCos-II任务的5个状态转换关系如图

图片

23.1.3 uCOS-II中与任务相关的函数

(1)创建进程:OSTaskCreate

函数原型:OSTaskCreate( void( *task )( void *pd ), void *pdata, OS_STK *ptos, INTU prio )

函数参数:

task:指向任务代码的指针

pdata:任务开始执行时,传递给任务的参数的指针

ptos:分配给任务的堆栈的栈顶指针

prio:分配给任务的优先级

每个任务都有自己的堆栈,堆栈必须申明为OS_STK类型,并且由连续的内存空间组成。可以静态分配堆栈空间,也可以动态分配堆栈空间。

(2)删除进程

函数原型:INT8U OSTaskDel( INT8U prio )

函数参数:

prio:进程的优先级,该函数是通过任务优先级来实现任务删除的

(3)请求删除进程

函数原型:INT8U OSTaskDelReq( INT8U prio )

函数参数:

prio:进程的优先级

(4)修改进程优先级

函数原型:INT8U OSTaskChangePrio( INT8U oldprio, INT8U newprio )

函数参数:

oldprio:进程的源优先级

newprio:进程的新优先级

(5)进程挂起

函数原型:INT8U OSTaskSuspend( INT8U prio )

函数参数:

prio:进程的优先级

任务挂起和任务删除有点类似,任务挂起只是将被挂起任务的就绪标志删除,并做任务挂起记录,并没有将任务控制块任务控制块链表里面删除,也不需要释放其资源,而任务删除则必须先释放被删除任务的资源,并将被删除任务的任务控制块也给删了。被挂起的任务,在恢复后可以继续运行。

(6)恢复进程

函数原型:INT8U OSTaskResume( INT8U prio )

函数参数:

prio:进程的优先级
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 单片机
    +关注

    关注

    6035

    文章

    44554

    浏览量

    634708
  • 操作系统
    +关注

    关注

    37

    文章

    6808

    浏览量

    123287
  • uCOS-Ⅱ
    +关注

    关注

    0

    文章

    9

    浏览量

    8585
收藏 人收藏

    评论

    相关推荐

    快速实现STM32移植ucos-ii

    快速实现STM32移植ucos-ii,欢迎大家一起学习[groupid=618]单片机项目开发设计群[/groupid]
    发表于 08-08 16:28

    UCOS-II系统移植问题

    这几天刚刚开始学习UCOS-II系统移植,我用的是野火开发板。资料上说是对startup_stm32f10x_hd.s 文件进行修改,但是我
    发表于 09-12 12:27

    uCOS-II理解和学习路线

    最近为啦准备嵌入式比赛,重拾stm32学习。再次学习也算基本掌握查看调用STM32固件库v3.5啦,觉得这才算入门
    发表于 08-23 09:15

    掌握移植uCOS-II的规范方法

    本文的目的是希望读者能够通过本文的内容掌握移植uCOS-II 的规范方法。如果只是需要移植文件,可以直接去Micriμm的官网上下载。移植uCOS-
    发表于 08-23 08:50

    ucOS-II入门经典教程

    ucOS-II入门经典教程,ucOS-II入门经典教程
    发表于 11-06 10:07 0次下载

    盘古STM32F103开发板移植uCOS-II详细说明

    盘古STM32F103开发板移植uCOS-II详细说明
    发表于 03-02 17:29 13次下载

    STM32平台移植uCOS-II详细说明-2012.11.13

    STM32平台移植uCOS-II详细说明-2012.11.13
    发表于 03-04 15:31 12次下载

    ucos-ii中文书籍

    ucos-ii中文书(邵贝贝).rar 入门经典书籍
    发表于 03-11 11:02 6次下载

    ucOS-II入门经典教程

    ucOS-II入门经典教程,感兴趣可以看看。
    发表于 07-25 18:52 47次下载

    uCOS-ii中文书

    学习uCOS-ii的最好中文教材,uCOS-ii中文书(邵贝贝)
    发表于 08-24 18:31 0次下载

    uCOS-II原理1

    原理uCOS-II
    发表于 12-20 22:58 5次下载

    uCOS-II原理2

    uCOS-II原理2
    发表于 12-20 22:53 0次下载

    uCOS-II原理3

    uCOS-II原理3
    发表于 12-20 22:52 0次下载

    uCOS-II在MSP430移植

    uCOS-II在MSP430移植
    发表于 10-12 17:24 9次下载
    <b class='flag-5'>uCOS-II</b>在MSP430<b class='flag-5'>移植</b>

    手把手盘古STM32开发板移植uCOS-II教程

    手把手盘古STM32开发板移植uCOS-II教程
    发表于 10-16 09:38 22次下载