首页天道酬勤如何知道使用了ucos系统,嵌入系统

如何知道使用了ucos系统,嵌入系统

张世龙 05-13 12:09 97次浏览

一句话概括ucos系统,就是开源、抢占式多任务实时操作系统。 嵌入式产品在整个体系结构中的作用和主要功能代码如下图所示。 ucos系统在用户程序和底层硬件之间建立了沟通渠道。 通过对ucos系统的管理和调度,一方面可以很好地驱动硬件,另一方面可以为上层用户软件提供系统级的软件支持。

ucos的任务】:

如上所述,前后台系统的后台部分作为软件的核心处理主体处于无限循环状态。 同样,ucos的任务和这个后台系统和其他多任务系统一样,每个任务都是独立功能的无限循环。 区别在于ucos支持任务的参数输入

任务如何实现状态变迁】:

这个世界上的一切,在其存在期间都有各种各样的生存状态。 软件领域的任务也不例外。 在ucos系统中,任务也有自己的状态指示,可以通过“外界环境”的变化和系统内部提供的指令接口在各状态之间迁移。

任务睡眠状态

休眠任务可以理解为驻留在内存中,或者用户已在代码实现中完成编码,但ucos没有继承该任务的管理权。 也就是说,在这种状态下,ucos系统不会调度或处理此类任务。 通过ucos系统的命令界面OsTaskCreate和OsTaskDel,实现用户和ucos之间的任务管理权交接。

任务就绪状态

创建任务并由ucos继承后,进入就绪状态。 换句话说,就是等待CPU资源执行任务。 但是,什么时候能获得CPU资源,取决于ucos系统的调度。

任务运行状态

任务获取CPU资源后,进入执行状态。 在这种状态下,任务占用CPU和其他资源,根据任务的设定功能执行相关代码,提供相关任务的服务。

任务等待状态

在多任务系统中,许多资源都由所有任务共享。 如果任务获取资源失败,则进入待机状态。 在等待状态下,任务释放CPU资源,并进入等待资源的等待队列。 释放等待的资源后,ucos将从等待队列中找到优先级最高的等待任务,并将其恢复为运行状态,然后继续运行。

此外,ucos系统还提供了另一种等待策略。 正在等待任务延迟。 即,正在执行的任务可以通过等待等待功能进入等待状态,此时释放CPU资源。 等待超时后,将重新占用CPU资源。 届时能否夺取取决于超时后计划的时间是否有高优先级的任务。

任务中断状态

在中断状态,即任务正在执行中,硬件中断处理进程中断了执行进程,不得不放弃CPU资源。 进入中断服务函数。 中断结束后,重新断开CPU资源。 同样,能否占用CPU资源取决于任务调度的时间和是否提供了更高优先级的任务。 下图的优先顺序贝卡。 ISR结束后,CPU资源将被任务b夺走。

任务信息如何存储】:

在现实生活中,每个人都有个人档案来保存个人历史和重要信息。 同样,ucos为每个任务创建各自对应的文件,并且对应于该文件的数据结构(数据结构)被称为TCB (任务控制块)或者任务控制块。 有了这些TCB的帮助,当任务切换或从中断恢复执行时,能够保证从被中断点开始的继续执行。 下一章的任务管理将详细介绍具体任务的TCB。

任务就绪表】:

如上所述,任务必须处于就绪状态,以便ucos系统在适当的时间内进行调度。 为了便于索引,ucos系统在内部创建就绪组osrdygrp(8位单元)和就绪位数组OsRdyTbl[] )每个元素(8位单元) )的两个变量,任务优先级和索引函数在ucos系统中,总共定义了0-63,即64个任务优先级。 的优先级最高,63的优先级最低。

OsRdyGrp定义:

OsRdyGrp和OsRdyTbl[]之间的映射图:

33558 www.Sina.com/:如果设置了osrdytbl [ x ]中的一个位,则相应的OsRdyGrp中的第x个位也会相应地设置。 x=0-7。

】:

正如前面所述,ucos始终处于就绪状态,占用CPU资源执行优先级最高的任务。 那么,如何在64项任务中找到准备好、优先级最高的任务是任务调度器的工作。 任务调度程序的部分源代码如下:

我们需要重点关注:

-第二个if语句。 从就绪队列检索的任务是最高有限的,用于与当前正在运行的任务的有限水平进行比较的- OS_TASK_SW () )的调度)该函数被宏观定义,用于从一个任务出发的调度。 注:在操作系统中,计划可能总是由中断引起的。 这里很多处理器提供了模拟硬中断的机制。 软中断语句会使CPU误认为实际发生了中断事件,

需要进行任务的调度检查从而进行任务的调度。具体任务的调度细节,如任务现场如何保存,堆栈如何恢复,将会在后面ucos的任务管理里面,重点讲解。

ucos系统的初始化和启动】:

ucos的系统初始化比较简单,直接调用OSInit()即可。需要注意的是:ucos借鉴了模块化的思想,在配置文件OS_CFG.H文件中,定义了一些配置宏定义,可以根据项目的需要进行使能或者去使能。当系统初始化后,我们直接调用OSStart接口,启动ucos系统。调用接口后,调度器将会开始工作,从就绪队列中寻找到优先级最高的那个任务开始执行。

以上内容,仅仅是个人的经验总结,如有疏漏和错误地方,还请各位知友批评指正共同进步。另外如果想对嵌入式操作系统有深入和权威的了解,还可以自行阅读以下书籍。本文章系列仅仅站在答主个人的理解角度,力求用通俗的语言向嵌入式爱好者们普及嵌入式的一些理论和实战知识。

python rabbitmq,socketio python rtos系统,ucos和freertos