《操作系统》UCOS-III开发笔记
文章平均质量分 90
Yngz_Miao
这个作者很懒,什么都没留下…
展开
-
【UCOSIII】嵌入式实时操作系统UCOSIII及其任务
UCOSIII的任务简介在UCOSIII中任务是以何种面貌存在的呢?在UCOSIII中任务就是程序实体,UCOSIII能够管理和调度这些小任务(程序)。UCOSIII中的任务由三部分组成:任务堆栈、任务控制块和任务函数。任务堆栈:上下文切换的时候用来保存任务的工作环境,就是STM32的内部寄存器值; 任务控制块:任务控制块用来记录任务的各个属性; 任务函数:由用户编写的任务处理代码...原创 2018-06-21 18:10:36 · 11698 阅读 · 0 评论 -
【UCOSIII】UCOSIII的同时等待多个内核对象
UCOSIII同时等待多个内核对象前面讲述了UCOSIII的信号量(一个任务与另一个任务同步)、事件标志组(一个任务与多个任务同步),它们都可以完成任务的同步。同时,信号量(保证全局变量)、消息队列,它们都可以完成消息的传递。但是,它们描述的情况都是任务如何等待单个对象,比如信号量、互斥信号量、消息队列和时间标志组等。本文我们就讲解一下UCOSIII如何同时等待多个内核对象,在UCOSII...原创 2018-07-05 19:26:50 · 9005 阅读 · 2 评论 -
【UCOSIII】UCOSIII的事件标志组
UCOSIII事件标志组前面讲述了UCOSIII的信号量、互斥信号量,它们都可以完成任务的同步。但是有时候一个任务可能需要和多个事件同步,这个时候就需要使用事件标志组。事件标志组与任务之间有两种同步机制:“或”同步:等待多个事件时,任何一个事件发生 ,任务都被同步,这个就称为“或”同步; “与”同步:当所有的事件都发生时任务才被同步,这种同步机制被称为“与”同步。在UCOSIII中事件...原创 2018-07-05 19:10:09 · 11780 阅读 · 0 评论 -
【UCOSIII】UCOSIII的消息传递
UCOSIII任务间通信一个任务或者中断服务程序有时候需要和另一个任务交流信息,这个就是消息传递的过程就叫做任务间通信,任务间的消息传递可以通过两种途径:一是通过全局变量,二是通过发布消息。使用全局变量的时候,每个任务或者中断服务程序都必须保证其对全局变量的独占访问(通常的解决办法:关中断、临界区、信号量)。消息也可以通过消息队列作为中介发布给任务。 UCOSIII消息队列消息...原创 2018-07-04 18:12:33 · 12521 阅读 · 1 评论 -
【UCOSIII】UCOSIII的任务内嵌信号量
任务内嵌信号量API函数我们一般使用信号量时都需要先创建一个信号量,不过在UCOSIII中每个任务都有自己的内嵌的信号量,这种功能不仅能够简化代码,而且比使用独立的信号量更有效。任务信号量是直接内嵌在UCOSIII中的,任务信号量相关代码在os_task.c中的。任务内嵌信号量相关函数如下表所示:任务内嵌信号量API函数 函数 说明 OSTaskSemPend 等...原创 2018-07-03 18:11:24 · 10193 阅读 · 0 评论 -
【UCOSIII】UCOSIII软件定时器
在学习STM32的时候会使用定时器来做很多定时任务,这个定时器是单片机自带的,也就是硬件定时器,在UCOSIII中提供了软件定时器,我们可以使用这些软件定时器完成一些功能,本文我们就讲解一下UCOSIII软件定时器。 UCOSIII软件定时器简介定时器其实就是一个递减计数器,当计数器递减到0的时候就会触发一个动作,这个动作就是回调函数,当定时器计时完成时就会自动的调用这个回调函数。因此...原创 2018-06-29 19:15:40 · 12656 阅读 · 1 评论 -
【UCOSIII】UCOSIII的互斥信号量
信号量用于控制对共享资源的保护,但是现在基本用来做任务同步用(不太清楚的可以参考链接:【UCOSIII】UCOSIII的信号量)。 优先级反转优先级反转在可剥夺内核中是非常常见的,在实时系统中不允许出现这种现象,这样会破坏任务的预期顺序,可能会导致严重的后果,下图就是一个优先级反转的例子:关于这个优先级反转的例子,先来进行分析一下:任务H和任务M起初处于挂起状态,等待某一事...原创 2018-07-02 21:18:54 · 11633 阅读 · 0 评论 -
【UCOSIII】UCOSIII的中断和时间管理
UCOSIII的中断管理UCOSIII中断处理过程在STM32中是支持中断的,中断是一个硬件机制,主要用来向CPU通知一个异步事件发生了,这时CPU就会将当前CPU寄存器值入栈,然后转而执行中断服务程序,在CPU执行中断服务程序的时候有可能有更高优先级的任务就绪,那么当退出中断服务程序的时候,CPU就会直接执行这个高优先级的任务。UCOSIII是支持中断嵌套的,即高优先级的中断可以打断...原创 2018-06-28 19:36:03 · 12227 阅读 · 2 评论 -
【UCOSIII】UCOSIII基础知识和STM32F103的移植
前后台系统和RTOS系统前后台系统早期嵌入式开发没有嵌入式操作系统的概念 ,直接操作裸机,在裸机上写程序,比如用51单片机基本就没有操作系统的概念。通常把程序分为两部分:前台系统和后台系统。简单的小系统通常是前后台系统,这样的程序包括一个死循环和若干个中断服务程序:应用程序是一个无限循环,循环中调用API函数完成所需的操作,这个大循环就叫做后台系统。中断服务程序用于处理系统的异步事件,...原创 2018-06-20 21:03:52 · 14840 阅读 · 3 评论 -
【UCOSIII】UCOSIII的信号量
信号量信号量像是一种上锁机制,代码必须获得对应的钥匙才能继续执行,一旦获得了钥匙,也就意味着该任务具有进入被锁部分代码的权限。一旦执行至被锁代码段,则任务一直等待,直到对应被锁部分代码的钥匙被再次释放才能继续执行。信号量用于控制对共享资源的保护,但是现在基本用来做任务同步用。要想获取资源的任务必须执行“等待”操作,如果该资源对应的信号量有效值大于1,则任务可以获得该资源,任务继续运行。...原创 2018-07-01 20:42:34 · 12243 阅读 · 1 评论 -
【UCOSIII】UCOSIII系统内部任务
之前讲到UCOSIII默认有5个系统任务:空闲任务:UCOSIII创建的第一个任务,UCOSIII必须创建的任务,此任务有UCOSIII自动创建,不需要用户手动创建; 时钟节拍任务:此任务也是必须创建的任务; 统计任务:可选任务,用来统计CPU使用率和各个任务的堆栈使用量。此任务是可选任务,由宏OS_CFG_STAT_TASK_EN控制是否使用此任务; 定时任务:用来向用户提供定时服务,...原创 2018-06-25 18:04:35 · 8775 阅读 · 0 评论 -
【UCOSIII】UCOSIII的任务管理
UCOSIII任务创建UCOSIII是多任务系统,那么肯定要能创建任务,创建任务就是将任务控制块、任务堆栈、任务代码等联系在一起,并且初始化任务控制块的相应字段。在UCOSIII中我们通过函数OSTaskCreate()来创建任务,OSTaskCreate()函数原型如下(在os_task.c中有定义)。OSTaskCreate()的函数定义为:void OSTaskCreate ...原创 2018-06-23 21:16:31 · 8812 阅读 · 0 评论 -
【UCOSIII】UCOSIII的初始化和启动
UCOSIII系统初始化在使用UCOSIII之前我们必须先初始化UCOSIII,函数OSInit()用来完成UCOSIII的初始化,而且OSInit()必须先于其他UCOSIII函数调用,包括OSStart()。一般UCOSIII的main函数遵循以下的格式编写:int main(void){ OS_ERR err; …… //其他函数,一般为外设初始化函数 ...原创 2018-06-22 18:32:26 · 9789 阅读 · 0 评论 -
【UCOSIII】UCOSIII的任务调度和切换
UCOSIII任务调度可剥夺型任务调度任务调度就是中止当前正在运行的任务转而去执行其他的任务。UCOSIII是可剥夺型内核,因此当一个高优先级的任务准备就绪,并且此时发生了任务调度,那么这个高优先级的任务就会获得CPU的使用权!UCOSIII中的任务调度是由任务调度器来完成的,任务调度器有2种:任务级调度器和中断级调度器。任务级调度器为函数OSSched(); 中断级调度器为...原创 2018-06-22 18:27:44 · 18410 阅读 · 0 评论 -
【UCOSIII】UCOSIII的存储管理
UCOSIII内存管理简介作为一个RTOS操作系统,内存管理是必备的功能,因此UCOSIII也就内存管理能力。通常应用程序可以调用ANSI C编译器的malloc()和free()函数来动态的分配和释放内存,但是在嵌入式事实操作系统中最好不要这么做,多次这样的操作会把原来很大的一块连续存储区域逐渐地分割成许多非常小并且彼此不相邻的存储区域,这就是存储碎片。存储碎片最终导致的结果就是,应用不能申...原创 2018-07-05 20:40:02 · 9755 阅读 · 1 评论