uC/OS-II的任务一般格式为(我用的是ZLG的):http://blog.baisi.net/?192911/viewspace-3727
void TASKn(void *pdata)
{
pdata = pdata;
while (1)
{
OSTimeDly(OS_TICKS_PER_SEC);
}
}
ucos-II是基于任务优先级抢占式任务调度法的,就是内核在管理调度时,调用任务切换函数(一般为SSched()),在该函数中将此时已处于就绪状态(条件一)并且为最高优先级(条件二)的任务的保存于其栈中的相应信息压入cpu寄存器中(软中断完成),然后cpu开始运行该任务的代码。
内核是何时进行任务调度的呢?虽然uC/OS-II是可被剥夺资源的内核(高优先级可强行占有低优先级正在使用的资源),但此事发生的前提是内核实时"检测"到了更高就绪的优先级了,那么内核是怎样来实时检测的呢?
带着这个问题让我们再来看看任务的结构——里边有函数OSTimeDly(OS_TICKS_PER_SEC),一看就知道这是个延时函数,除了延时外它还会有其他用途呢?经查看其源码了解到里边有一条代码:OSSched(),对,函数OSTimeDly()的作用就是将此时正在运行的函数挂起(保存任务控制块OS_TCB中的相应信息)(任务控制块OS_TCB是系统分配给每个任务的信息存储单元),然后调用函数OSSched()进行任务切换,进而执行就绪的最高优先级任务。此刻,我们了解到uCOS-II的任务切换是在执行的任务中调用延时函数OSTimeDly()进行的。
现在,还有一个问题还没解决,就是当延时到了,内核如何将资源返还给被延时挂起的任务?
我们先来了解一下任务可控制块(OS_TCB),任务控制块是一个数据结构,当任务的cpu使用权被剥夺时,uC/OS-II用它来保存该任务的状态。当任务重新得到cpu使用权时,任务控制块确保任务从当时被中断的那一点丝毫不差地继续执行。OS_TCB全部驻留在RAM中。在OS_TCB中有一项时间延时项OSTCBDly,调用函数OSTimeDly()过程中有一步骤就是给OSTCBDly赋延时值。uC/OS—II中有函数OSTimTick(),叫时钟节拍函数,它的一项工作就是给每个用户任务控制块OS_TCB中的时间延迟项OSTCBDly减1(如果该项不为零),当某项任务的任务控制块中的时间延时项OSTCBDly减为0时,这个任务就进入了就绪态,等待任务切换。而时钟节拍函数OSTimTick()的调用函数由时钟节拍中断服务函数OSTickISR()调用(或与相应函数配合调用)。
现在,我们来理一下思路:任务调用函数OSTimeDly(),挂起任务和调用切换函数并设置延时时间——>周期性调用时钟节拍中断服务函数OSTickISR()进行任务延时计数(OSTimTick()完成),延时到时调用任务切换函数OSSched(),进行任务切换。
综上,任务切换有两种途径——时钟节拍中断服务函数OSTickISR()进行切换,任务中调用时间延迟函数OSTimeDly()进行切换。
从先后顺序来说,应该是OSTimeDly()先发生(设置OSTCBDly),才会有时钟节拍中断函数OSTickISR()进行切换的动作发生。
相关推荐
将uC/OS-II移植到Keil C51小模式下的综合指南
嵌入式系统开发中,选择一个合适的实时操作系统(RTOS)至关重要。uC/OS-II是实时操作系统的一种,它由Jean J. Labrosse开发,以其高度可配置和源代码开放而闻名。本章将带您概览uC/OS-II,理解其架构与核心特性。Keil C51是一款广泛用于8051微控制器编程的集成开发环境(IDE),由Keil Elektronik GmbH公司开发。它提供了包括编译器、调试器和模拟器在内的完整工具链,使得开发者能够在同一开发平台内完成从代码编写到硬件测试的整个过程。
对嵌入式操作系统时间分片的一点理解
以 uCOS II 为例: OS_TICKS_PER_SEC 如果 OS_TICKS_PER_SEC 为 100,表示 1 秒中断 100 次,也就意味着,任务切换时间为 10 ms。 这个很容易理解,但是怎么使用呢。 我们知道嵌入式常用的时间单位是 s、ms、us,OS_TICKS_PER_SEC 怎么和这些单位联系起来呢,又怎么去更好的理解它? 系统延时函数 OSTimeDly (x); 如...
STM32F1上的uC/OS-II实时操作系统问题诊断与解决
实时操作系统(RTOS)是一种专为满足实时应用的需求而设计的操作系统。uC/OS-II是一个开放源代码的实时内核,它包含了用于任务管理、同步和时间管理的关键特性。本章节将详细介绍uC/OS-II的起源、设计原则和功能特点,为读者打下扎实的基础,以便理解后续章节中与STM32F1微控制器相结合时遇到的具体问题和解决方案。STM32F1系列微控制器是STMicroelectronics(意法半导体)推出的一系列基于ARM Cortex-M3处理器的32位微控制器。
UCOSIII总结----延时函数(2)
这一节和上一节有一些承接关系,上一节主要讲述时间节拍列表处理延时任务的原理和函数的启动逻辑,那么什么情况下一个任务会插入到时钟节拍列表, 很显然肯定是用到了延时函数或者是有限等待一个信号量、消息队列、事件标志组,剩下的基本就是延时的时候被挂起或有限等待的时候被挂起。 这节总结一下常用的延时函数 OSTimeDlyHMSM() void OSTimeDlyHMSM (CPU_INT16U hours, //延时时间–时 CPU_INT16U minutes, /
通达信抓波段指标(主图)
VAR3:=IF(INBLOCK('科创板'),VART20,IF(INBLOCK('创业板') AND DATE>1200823,VART20,IF(INBLOCK('ST板块'),VART5,VART10)));VAR5:=IF(INBLOCK('科创板'),CT20,IF(INBLOCK('创业板') AND DATE>1200823,CT20,IF(INBLOCK('ST板块'),CT5,CT10)));曾涨停/紫色细K线:青字"炸",涨停未封住。曾跌停/蓝色细K线:红字"撬",跌停被打开。
宇树机器人G1二次开发:导览、起始点、目的地与完整示例
通过宇树G1 SDK的导航接口,开发者可以高效地实现机器人的自主移动功能。连接 -> 设置目标点 -> 发送命令 -> 监控状态。本文提供的完整示例涵盖了从环境搭建到代码实现的全部步骤,并解释了起始点、目的地等关键概念。开发者可以在此基础上,结合多目标点巡逻、动态避障(需高级配置)等功能,构建更复杂的机器人应用。建议读者先在小范围、熟悉的平坦环境中测试,成功后再逐步扩展到更复杂的场景。
UCOS-III 系统TICK接口详解
COS-III的Tick管理和阻塞接口超时机制提供了一种高效且可靠的方法来管理实时系统中的任务调度和超时处理。通过合理配置和使用这些机制,可以提高系统的实时性和稳定性,从而更好地满足各种实时应用的需求
ROS2实战:手把手教你用CMake集成自定义DDS(以CycloneDDS为例)
本文详细介绍了如何在ROS2中通过CMake集成自定义DDS(以CycloneDDS为例),涵盖环境准备、源码编译、ROS2工作区集成、性能调优及常见问题排查。通过RMW中间件抽象层,开发者可以灵活切换DDS实现,提升系统实时性和可靠性。
UCOSIII-延时
UCOS中系统时间相关
硬盘dma读写过程
保护模式中,pci上的硬盘dma读写方法
【HALCON工业视觉应用探索】02. C# + Halcon铸件毛刺机器人打磨引导:点云处理从实验室到工业现场的全流程落地
摘要:铸件毛刺的自动化打磨是机械制造领域的重要难题,其随机性(高度0.1-3mm)和复杂工况导致人工打磨效率低(3分钟/件)、工伤率高。本文基于Halcon 24.11与.NET 6,构建了一套点云处理方案:通过线激光扫描仪获取三维点云,经预处理、毛刺检测、路径规划三大模块,引导机器人完成打磨。虚拟实验测试显示,对高度>1mm的毛刺检出率达100%,定位误差±0.08mm,但工业现场受油污、粉尘影响,性能降至检出率68-75%、处理时间>45秒。
STM32F1系列-UCOSIII配置之delay_init()函数详解
一、时钟选择 SysTick_CLKSourceConfig();选择systick时钟,函数配置的寄存器如下所示 找到该函数的定义,其两个参数的数值如下 该函数选择的参数是SysTick_CLKSource_HCLK_Div8,说明选择的是外部时钟源除以8,为什么是除以8呢?大家可以看中文参考手册的第六章的时钟配置,如下图所示,我们一般配置时会将AHB配置成72M,然后这个时钟会自动除以8后进入cortex内核,所以systick的时钟为9M(不要告诉我你不知道systick是内核的外
基于深度学习YOLOv8的商品识别系统(深度学习 + UI界面 + 训练数据集 + Python代码)
如果使用自定义数据集,可以通过图像标注工具如LabelImg来标注每个商品的类别和边界框,并保存为YOLO格式的文本文件。bash复制编辑/dataset/images/train/val/labels/train/val这样,我们就准备好了数据集,可以开始训练YOLOv8模型。本文介绍了如何使用YOLOv8构建一个商品识别系统,包括从数据准备到模型训练,再到UI界面的开发。通过深度学习技术,尤其是YOLOv8的高效目标检测能力,我们能够快速实现商品识别并集成到实际应用中。
uc/OS-II操作系统移植:uc/OS-II移植到STM32流程(文章末尾附实例)
一、实验目的 1、掌握在STM32上移植嵌入式实时操作系统uC/OS-II的方法 2、掌握在STM32上移植uC/OS-II的基本步骤 3、掌握uC/OS-II的文件OS_CPU.H编写 4、掌握uC/OS-II的文件OS_CPU_C.C编写 5、掌握uC/OS-II的文件OS_CPU_A.S的编写 二、实验原理 uCOS也叫uC/OS-II,它是由美国人Jean .J.Labrosse在1992年编写的一个嵌入式多任务实时操作系统。它具有以下特点: (1)微型化。嵌入式系统芯片内部存储器的容量通常不会很
基于Python的军事装备信息爬虫实战:Scrapy+Playwright+智能反反爬技术
本文将详细介绍如何使用Python构建一个高效的军事装备信息爬虫系统。我们将从基础的HTTP请求开始,逐步深入到使用Scrapy框架、Playwright浏览器自动化以及最新的反反爬技术。文章包含完整的代码实现、性能优化策略以及数据处理方案,旨在为读者提供一个全面的军事信息爬取解决方案。关键词:Python爬虫、军事装备、Scrapy、Playwright、反反爬。
将任意文件转换为Pcap网络数据包传输
一款实用的工具用于将任意文件转换为pcap网络数据包
μC/OS 版本演进过程 | uC/OS-II 和 uC/OS-III 有什么区别?
uC/OS-II 是一款极具教学价值的实时操作系统,源码极其简洁,非常适合入门。而 uC/OS-III 虽然功能更强大,但学习门槛更高、资料较少,适合深入了解调度器实现或用于复杂项目。对于刚接触 RTOS 的读者,我们建议以 uC/OS-II 为起点,理解基础原理后再探索 uC/OS-III 或 FreeRTOS 等更现代系统。
蓝牙模块HM-10手册
蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。
uC/OS-II学习总结
<br /><br />uC/OS-II学习总结<br /> 通过两周的学习,终于是把uC/OS-II的源代码看了一遍,做了一些简单的注释,不能说掌握了它,或者已经掌握了OS,这只能算是给正在上OS课程的自己提前注入一点OS的概念吧。OS的学习难度是比较高的,虽然其很多的概念还是比较容易理解,但是一些算法在整个OS体系中如何实现以及如何选择这些算法,确实是一个比较难的问题。只有反复的实践,去了解这些已经实现了并且得到广泛认可的开源OS,对照理论,才能真正的学好OS课程。<br /> uC/OS-II是一
STM32F407中文手册
STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。
Camera2Demo
在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作
UC/OS-II内核调度分析
一.内核概述: 多任务系统中,内核负责管理各个任务,或者说为每个任务分配CPU时间,并且负责任务之间的通讯。内核提供的基本服务是任务切换。之所以使用实时内 核可以大大简化应用系统的设计,是因为实时内核允许将应用分成若干个任务,由实时内核来管理它们。内核本身也增加了应用程序的额外负荷,代码空间增加 ROM的用量,内核本身的数据结构增加了RAM的用量。但更主要的是,每个任务要有自己的栈空间,这一
visio安装包
Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。
uC/OS-II的任务
uC/OS-II的任务 在小型应用中,通常一个嵌入式系统中的所有程序模块同属于一个统一的任务——对宿主对象进行控制。因此,通常认为在嵌入式系统中只有一个进程,而把这个进程进行分解之后的那些小程序模块,由于他们没有自己的内存空间,所以他们实质上就是所谓的线程。在uC/OS-II中,习惯把这样的线程叫做任务,或者叫做实时任务。 实时系统中的任务的执行大多数都是由外部事件触发
uC/OS - II学习记录
1. 整个操作系统启动的大致过程是这样的: 初始化系统定时器,用于操作系统的心跳 初始化操作系统(调用OSInit()函数),这个函数内部大致执行以下的工作 初始化变量 初始化各个链表:任务控制块链表、事件链表 创建Idle和统计线程 创建用户任务 开启任务调度 2. 操作系统开启任务调度后流程:执行第一个任务->系统Tick中断->系统时钟处理->搜寻最高优先级任务->如果当前任务不是最高优先级
uC/OS-II - Port for the LINUX Operating System
uC/OS-II - Port for the LINUX Operating System Copyright (C) 2004-... Werner.Zimmermann|AT|hs-esslingen.de Overview uC/OS-II (uCOS II) is a small, yet powerful real-time operating system devel
开源嵌入式实时操作系统uC/OS-II介绍
uC/OS-II凭借其透明架构与可验证性,在医疗、航空等安全关键领域仍占据一席之地。尽管现代RTOS(如Zephyr、Azure RTOS)在功能扩展性上更胜一筹,uC/OS-II的极简设计与硬实时保障使其成为资源受限系统中“小而美”的经典选择。对于开发者而言,理解其调度机制是掌握实时系统设计的绝佳起点。
【uC/OS-II】
创建了三个任务,只有一个one在运行。
探索嵌入式实时操作系统:uC/OS-II 和 uC/OS-III 源码及官方例程集合
探索嵌入式实时操作系统:uC/OS-II 和 uC/OS-III 源码及官方例程集合 【下载地址】uCOS-II和uCOS-III源码及官方例程集合 uC/OS-II 和 uC/OS-III 源码及官方例程集合 项目地址: htt...
uC/OS-II学习笔记--任务
uC/OS-II中的任务1 任务的基本概念uC/OS-II操作系统内核的主要任务就是对任务进行管理和调度。 在设计一个较为复杂的应用程序时,通常把一个大型任务分解成多个小任务,这样可以将问题分而治之,简化问题的复杂程度,也使程序的维护变得简单。 用户任务和系统任务: 1. 用户任务:由应用程序设计者编写,用以解决应用问题 2. 系统任务:由操作系统提供,服务于用户任务 uC/OS-IIji
764



被折叠的 条评论
为什么被折叠?



