UCOS-II常用变量说明

ucos-II 任务就绪表学习笔记 就绪表中有两个变量:OSRdyGrp和 OSRdyTbl[].   这两个变量的对应关系是   OSRdyTbl[ n ] 中任何一位是1时, OSRdyGrp  的第n 位 是1。相当于OSRdyGrp  是OSRdyTbl[]的索引。 具体的对应关系如下图   数组OSRdyTbl[8] 按位来算的话正好是64个位---64个优先级。接下来我们再分析一下任务优先级变量: prio 阅读详情
1, OSRunning

   在ucos_II.h中定义,声明为BOOLEAN数据类型,这个变量用于指示OS是否正在运行。

   “1”为运行状态,反之为未运行态。

2, OSPrioCur

   在ucos_II.h中定义,声明为INT8U数据类型,表示当前任务的优先级。

3, OSPrioHighRdy

   在ucos_II.h中定义,声明为INT8U数据类型,表示最高优先级任务的优先级。

4, OSTCBHighRdy

   在ucos_II.h中定义,声明为一个OS_TCB类型的指针,指向最高优先级任务TCB。

   原型为:OS_TCB *OSTCBHighRdy;

5, OSTCBCur

   在ucos_II.h中定义,声明为一个OS_TCB类型的指针,指向当前正在运行任务TCB。

   原型为:OS_TCB *OSTCBCur;

6, OSRdyGrp

    在ucos_II.h中定义,声明为INT8U的数据类型,就绪任务组,在找出进入就绪态的优先级中运用,用来找出进入就绪态任务的优先级。在任务调度时用来找出最高优先级的任务。从而进行任务切换。

7, OSRdyTbl[ ]

     在ucos_II.h中定义,声明为INT8U的数据类型,它是一个一维数组,存放就绪任务的任务表。同OSRdyGrp配合使用,找出最高优先级的任务。

8, OSIntExitY

9, OSUnMapTbl[ ]

10,OSTCBPrioTbl[OSPrioHighRdy ]

在ucos_II.h中定义,声明为OS_TCB类型指针数组,创建任务块的指针表。原型如下:


11, OSTCBX; //用于快速方问就绪表的数据。

OSTCBY;

OSTCBBitX;

OSTCBBitY;


12.OSTCBList ;//为任务控制块链表的头指针。

OSTCBFreeList; //为空闲任务控制块链表的头指针,在OSInit() 中首先要初始化空任务指针,而在调用创建新的任务后,新的任务将会在空闲任务链表中获得一个任务控制块作为新的任务的任务控制块。而OSTCBFreeList将会更新头指针,使下一个空闲任务块做为头指针。


说明:任务控制块采用了双向链表,为了加快访问任务控制块的速度,UCOSII还定义了另一个数组 OSTCB *OSTCBTbl[ ] ;专门用来以任务的优先级为顺序在各个数组元素里存放指赂各个任务控制块的指针,这样在访问任务的任务控制块时,就可以非常快,而不必遍历任务控制块链表了。


进行任务调度的依据就是任务就绪表。OSRdyTbl[ ]; 为了便于就绪表的查找,另外定义了一个变量INT8U OSRdyGrp; 为了中加快运算速度双定议了一个数组         OSMapTbl[ ]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};


同样OSUnMapTbl[ ];也是为了加速优先级定义的一个数组。



13,对于信号量,消息邮箱,消息队列构成的事件数据结构,作为功能完善的事件处理,应该对系统的等待任务进行一定的管理。这个管理的功能包括两个方面。一是要对等待事件的所有任务进行记录并排序。二是应该允许任务有一定的等待时限。对于这些事件任务的记录和处理,UCOSII采用了与任务就绪表类似的方法,使用一个数组INT8U OSEventTbl[ ]作为记录等待事件任务的记录表,即等待任务表。同样为了加快对此表的反应速度,增加了INT8U OSEventGrp.这个事件表和任务就绪表格式一样。叫任务等待表。

本章将介绍μC/OS-II中的初始化配置项。由于μC/OS-II向用户提供源代码,初始化配置项由一系列#define constant语句构成,都在文件OS_CFG.H中。用户的工程文件组中都应该包含这个文件。本节介绍每个用#define constant定义的常量,介绍的顺序和它们在OS_CFG.H中出现的顺序是相同的。表12.1列出了常量控制的μC/OS-II函数。“类型”为函数所属的类型,“置1”表示当定义常量为1时可以打开相应的函数,“其他常量”为与这个函数有关的其他控制常量。注意编译工程文件时要包含OS_CFG.H,使定义的常量生效。表T12.1 μC/OS-II函数和相关的常量(#define constant定义)

OS_MAX_EVENTS


OS_MAX_EVENTS定义系统中最大的事件控制块的数量。系统中的每一个消息邮箱,消息队列,信号量都需要一个事件控制块。例如,系统中有10个消息邮箱,5个消息队列,3个信号量,则OS_MAX_EVENTS最小应该为18。只要程序中用到了消息邮箱,消息队列或是信号量,则OS_MAX_EVENTS最小应该设置为2。

OS_MAX_MEM_PARTS


OS_MAX_MEM_PARTS定义系统中最大的内存块数,内存块将由内存管理函数操作(定义在文件OS_MEM.C中)。如果要使用内存块,OS_MAX_MEM_PARTS最小应该设置为2,常量OS_MEM_EN也要同时置1。

OS_MAX_QS


OS_MAX_QS定义系统中最大的消息队列数。要使用消息队列 ...
uCOS-II信号量学习  uCOS-II学习环境的建立可以参考这个帖子:            http://www.armjishu.com/bbs/viewtopic.php?id=1629&tagid=31&flag=15781、 相关背景知识          信号量为操作系统处理临界区问题和进程间同步提供了一种有效的机制。信号量本身不具备数 阅读详情

相关推荐

UCOS II在PC上的移植

网上移植教程有不少,不过对于初学者还是容易出问题,在这里将移植的详细过程记录如下,建议有兴趣的同学,找台电脑,从头试一遍,这样就算是入门了. 一、准备工作 在PC上移植ucos系统,因为ucos系统的源代码是c语言写的,因此编译C的软件必不可少。在pc机上运行,还需要对pc的设备进行一空的控制,会用到汇编语言,因此汇编语言的编译软件也必不可少。再有就是操作系统的源码,这些都准备好了,就可以进行

1847

从0到1教你写UCOS-III 第十一部分:支持多优先级

在本章之前, OS 还没有到优先级,只支持两个任务互相切换,从本章开始, 任务中我们开始加入优先级的功能。在 uC/OS-III 中,数字优先级越小,逻辑优先级越高。 11.1 定义优先级相关全局变量: 在支持任务多优先级的时候,需要在 os.h 头文件添加两个优先级相关的全局变量,具体定义见代码清单 11-1。 代码清单 11-1 定义优先级相关全局变量 /...

sumjess 956

uCOS 在 NIOS II 上的移植

工具:Quartus II 器件:EP4CE15F17C8 1.File->New Project Wizard: 2.点击两个Next,进入Family&Device Settings,选择器件 3.Finish,建立工程完毕,点击Tools->SOPC Builder,输入名字后,OK 4.修改clk_0为100MHz 5.component lib

Marvin_wu 2625

OSStartHighRdy()

µC/OS-II 的移植需要用户改写OS_CPU_A.ASM中的四个函数: OSStartHighRdy() OSCtxSw() OSIntCtxSw() OSTickISR()该函数由SStart()函数调用,功能是运行优先级最高的就绪任务,在调用OSStart()之前,用户必须先调用OSInit(),并且已经至少创建了一个任务(请参考OSTaskCreate()和OSTaskCreateExt

FunkyFrog821951259的博客 6777

ucos ii浅尝

前言 有人说:“好代码要看,坏代码也要看”。由于工作过程中看多了凌乱的代码,特找来UCOS来看,一看果真是有美感的代码。关于嵌入式实时系统,起初发明嵌入式实时操作系统的发展进程我猜想应该是这样的:裸机编程时发现太多的“延时”资源没有被利用好,那么“延时”又完全可以用定时器中断来计时,在计时未到之前,则完全可以运行接下来的函数。再加上一些对任务是否需要执行的标志位的判断,对各个任务的轮询执行,这样

yeah 1152

UCOS-II 中断与时钟问题总结(以UCOS2.25自带的X86例子)

这两天在看UCOS-II, uCOS中断和时钟问题做个小结,以UCOS2.25自带的X86例子、《嵌入式实时操作系统uCOS-II原理及应用》为基础,相信对网友们也有帮助,理解不对的地方,请高手指正:       UCOS-II是抢占式、实时操作系统,这是核心。   1.   uCOS的系统有任务级任务调度和中断级任务调度:任务级任务调度靠常常在下面的代码中自动调用, void main

5988

OSIntEnter() 与 OSIntExit()

在uC/OS-II中,通常在进入中断时需要使用OSIntEnter() ;退出中断前使用OSIntExit(); 分析一下OSIntEnter() 的代码 void OSIntEnter (void) { if (OSRunning == OS_TRUE) { if (OSIntNesting < 255u) { OSIntNesting+

wangzibigan的博客 1万+

疫情数据分析的“核武器”!JHU CSSE COVID-19数据集超深度解析与实战指南(附代码)

在面对这场没有硝烟的战争时,除了医护人员在前线与病毒搏斗,还有一群默默的英雄——数据科学家和分析师,他们利用手中的“数据武器”,昼夜不停地监测、分析、预测疫情走势,为政府决策、资源调配、公众科普提供了至关重要的支撑。同时,由于某些国家(如美国、加拿大、澳大利亚、中国等)的数据细化到省/州级别,为了得到国家层面的总数据,我们需要按国家和日期进行聚合。正是在这样的背景下,经过这些步骤,我们已经得到了一个包含了累计数据、每日新增数据和活跃病例数的完整数据集,可以开始进行深入的分析和可视化了!

wylee的博客 1165

UC/OS-II的学习

<br />   粗略的的看了邵贝贝老师的那本书,感觉有点眉目。UC/OS-II的全局变量繁多,刚接触的时候容易弄混淆,现在总结下:<br /><br />    <br />OSRunning:  用于标识多任务环境是否已经开启运行,在OSStart()函数里启动任务后就置为True。<br />OSIntNesting:用于标识中断嵌套层数。产生一次中断可以调用OSIntEnter()函数使该值自增1,处理完一次中断再调用OSIntExit()自减1。<br />OS_TCB:一个结构体变量,每建立

geduo4612的专栏 753

Windows 10 下 Nacos 3.0.2 单机版保姆级安装教程(含JDK 17配置与MySQL 8.0连接避坑)

本文提供Windows 10下Nacos 3.0.2单机版的详细安装教程,涵盖JDK 17配置、MySQL 8.0连接优化及生产级安全设置。通过步骤详解和常见问题解决方案,帮助开发者快速完成Nacos的安装与配置,确保服务发现与配置管理的高效运行。

weixin_29237635的博客 320

LWIP协议栈在STM32H7上的内存优化实战:如何用32KB RAM实现稳定千兆以太网通信

本文深入探讨了在STM32H7微控制器上,如何通过内存优化策略,在仅32KB的D2 SRAM中稳定运行LWIP协议栈以实现千兆以太网通信。文章详细分析了STM32H7的内存架构、LWIP的内存消耗瓶颈,并提供了从描述符表与PBUF池精确分配、链接脚本修改到MPU区域划分的一整套实战优化方案,旨在解决大数据量传输卡死等常见配置问题。

gg901的博客 603

基于STM32的简易RTOS

之前看过一篇卢晓铭写的简易RTOS设计,自己也实践了一下,感觉多任务运行起来毫无压力,在此做份笔记以备他日之需也为他人提供一份参考 要想完成一个RTOS,我们核心任务是需要编写任务调度。 所以,我们需要知道,任务到底什么地方会被调度。 1.        我们开始OSStart();时,肯定需要调度一次任务。这样才能进入第一个最高优先级就绪任务中。 2.        在任务中的OST

左氏浮夸的博客 6899

期货分仓系统CTP协议/国内期货软件源码

期货分仓系统与CTP协议以及国内期货软件源码是期货交易技术领域的几个重要方面。

q2247238820的博客 962

ucos-ii 嵌入式系统 就绪表和空链表

ucos-ii 嵌入式系统 就绪表和空链表

开阳-英飞凌-小华 141

你以为你懂 Java 反射?看了这篇源码分析,我发现我以前都错了

摘要:本文讲述了一次生产环境Metaspace内存溢出的故障排查经历。事故源于一个通用数据导出功能中频繁使用反射调用method.invoke(),触发了JVM的"膨胀机制":当同一Method对象调用超过15次时,JVM会动态生成GeneratedMethodAccessor类,导致Metaspace被撑爆。文章分析了问题根源在于循环中反复调用getMethods()创建新Method对象,并提出了三种解决方案:缓存Method对象、改用MapStruct/MethodHandle工具

BUG猿的博客 770

DeepSeek-R1 论文阅读 DeepSeek-R1: Incentivizing Reasoning Capability in LLMs via Reinforcement Learning

和。这些模型的核心创新点是通过强化学习(Reinforcement Learning, RL)来提升大型语言模型(LLM)的推理能力,而没有依赖传统的监督微调(Supervised Fine-Tuning, SFT)作为预训练的步骤。是一种通过大规模强化学习直接训练的模型。它在推理能力上表现出色,能够自然地展现出许多强大且有趣的推理行为。但它也有一些问题,比如可读性差和语言混合。这意味着模型在生成文本时,有时会显得不太清晰,或者不一致地使用不同语言。为了解决这些问题并进一步提升推理能力,研究者提出了。

CSPhD-winston的博客 1840

UCOS学习(二)——UCOS-II、UCOS-III移植到STM32F103

移植详细步骤和遇到的问题解决

qq_52608074的博客 5932

Android 16强制横竖屏设置

但开发者端的响应却相对滞后,特别是中小型开发团队受限于大屏设备市场渗透率(截至2023年Q2,Android平板全球激活量约1.2亿台,不足手机设备5%)及开发成本考量,适配优先级普遍偏低。这种适配滞后已形成恶性循环——开发者因设备基数不足降低适配意愿,而用户体验缺陷又反向抑制大屏设备的市场接受度。要破解这一困局,既需要Google持续优化Jetpack Compose等现代化UI工具链,更需要建立开发者激励体系,通过应用商店流量倾斜、开发补贴等经济手段提升适配投入产出比。再不肯好好适配大屏设备?

xiangzhihong8的专栏 978

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

文档作者:合嵌电子科技有限公司 移植准备 1.     建立工程所需的文件夹 l 建立文件夹uCOS-II-Port                                         :工程根目录 l 建立文件夹uCOS-II-Port/App                           :存放用

獠的专栏 5396

java技术专家 【DDD(领域驱动设计)思想解读及优秀实践 22】|泛化建模(上):领域知识更抽象怎么办?

java技术专家 【DDD(领域驱动设计)思想解读及优秀实践 22】|泛化建模(上):领域知识更抽象怎么办?

大壮 1166

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

UCOS-II学习文档

UCOS—II 一、实时操作系统的概念 1.1 操作系统 ​ 操作系统是一种系统软件,他在计算机硬件与计算机应用程序之间,通过提供程序接口,屏蔽了计算机硬件工作的一些细节,从提高了应用程序的开发效率。 ​ 应用在嵌入式系统中的操作系统称为嵌入式操作系统 1.2 前后台系统 ​ 不复杂的小系统一般设计成前后台系统(也称超循环系统)。应用程序是一个无限的循环,循环中调用相应的函数完成相应的操作,这部分可以看成后台系统。中断服务程序处理异步事件,这部分可以看成前台系统。后台也可以叫任务级,前台也可以叫中断级

mjy520123的博客 2200

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

uCOS-II移植

今天终于把uCOS-II在LPC1788上的移植给搞出来了,之前上网搜了很多资料,又把《嵌入式操作系统uC/OS-II》这本书通读了一下,然后开始尝试uCOS-II的移植。   在uCOS-II在不同CPU之间的移植只需要更改三个文件:os_cpu.h,os_cpu_c.c,os_cpu_a.asm。其中os_cpu.h是关于可移植数据类型的定义、uCOS-II的主堆栈的定义、开关中断宏的定义以及

lgd370323的专栏 4317

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

uCOS-II系统概述

1. 关于RTOS系统 UCOS系统属于RTOS操作系统,FreeRTOS也属于RTOS操作系统。 2. 前后台系统 以前编写裸跑程序时,main里面一个循环和ISR构成一套程序,也统称为前后台系统,前台程序就是ISR中断服务程序,后台程序就是main函数里面的程序,后台程序可以被前台程序打断。 3. 实时性 UCOS系统属于实时操作系统,实时分为硬实时和软实时,...

fengel_cs的专栏 1990

1.uCOS-II简介及移植uCOS-II到STM32F103平台详细步骤

I.说明 作者:WXP(翱翔云端的鸟) 联系方式:328452854@qq.com || 13100610853(联系请注明优快云) 申明:个人原创,转载请先经过本人同意! 要说的话:个人水平有限,写之前也看过许多大神的博客,不足之处,还请指正!有疑问欢迎大家联系我交流探讨!       II.环境 软件环境:KEIL-MDK v-5.24a 硬件:STM32F10

翱翔云端的鸟 4万+

uCOS-II中任务的优先级翻转现象

什么是可剥夺型内核?若当前进程只是在进程执行结束,或者因某种原因而自动放弃CPU的使用权,导致其他的就绪任务获得CPU的使用权,这种方式实现的处理器使用权转移的内核属于不可剥夺型内核,反之,若当前进程并未执行完毕,它又不愿放弃CPU的使用权,而被强制终止执行,使得CPU的使用权归其他进程,这种内核属于可剥夺型内核。  uCOS-II的内核属于可剥夺型内核。任务优先级反转则出现于可剥夺型的内核中:当任

echo_bright_的博客 5322

uCOS-II系统中的任务

uCOS-II系统内核的主要工作是对任务的管理和调度。在进行接下来的源码分析前,先来把任务这东西理一理。1. 任务的引入  在公司的大型的软件研发项目中,通常项目经理会将该项目分解成多个功能模块,项目组内程序员分别负责其中一个,当这多个功能模块完成时候,就意味着整个项目进度接近完成。当然,在开发过程中,项目组内的程序员是同时在工作的,即所谓的“并行开发”,这将大大提高了项目完成效率。  在uCOS-

echo_bright_的博客 3668
上一篇: UCOS-II 中断与时钟问题总结(以UCOS2.25自带的X86例子)
下一篇: MMU 裸机程序
shareCode
博客等级 码龄15年 125粉丝 40原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值