uCOS-II操作系统
文章平均质量分 85
uCOS-II源码阅读笔记,记录嵌入式实时系统相关【已暂停更新】
mybright_
这个作者很懒,什么都没留下…
展开
-
os_mbox.c
定位到uCOS-II/Source/os_mbox.c,该文件是消息邮箱管理的相关操作函数。 任务与任务之间需要数据传递,那么为了适应传递的数据的不同类型,可以建立一个缓冲区(void*类型可以接收不同类型的数据),然后以该缓冲区为介质来实现任务间的切换,这就是消息邮箱的数据传输原理。 消息邮箱的具体实现是:将数据缓冲区的指针赋给事件控制块(OS_EVENT)的成员OSEventPtr(OSEv原创 2017-09-13 16:06:18 · 1597 阅读 · 0 评论 -
os_sem.c
定位到uCOS-II/Source/os_sem.c,该文件是信号量的相关操作函数。 信号量适用于资源保护的场合,它和互斥型信号量Mutex一样,用于保护着某个共享资源,二者的差别是:Mutex是二值的(0/1),其初始值为1,某任务要操作共享资源,需要获取信号量,获取后信号量计数器为0,那么下一个任务来获取该Mutex将获取不到;而信号量Semaphore的初始值(信号量计数器)可以为大于1的数原创 2017-09-13 12:38:19 · 1944 阅读 · 0 评论 -
os_mutex.c
定位到uCOS-II/Source/os_mutex.c,该文件是互斥型信号量的相关操作函数。互斥型信号量也就是互斥锁Mutex,是一个二值(0/1)信号量。在操作共享资源时,使用Mutex可以保证满足互斥条件。1. 非阻塞的获取互斥型信号量函数OSMutexAccept() OSMutexAccept()用于检测Mutex以判断是否可用,若资源不可用,调用此函数不会使得所在任务被挂起。//允许使原创 2017-09-09 18:47:53 · 2625 阅读 · 1 评论 -
uCOS-II中任务的优先级翻转现象
什么是可剥夺型内核?若当前进程只是在进程执行结束,或者因某种原因而自动放弃CPU的使用权,导致其他的就绪任务获得CPU的使用权,这种方式实现的处理器使用权转移的内核属于不可剥夺型内核,反之,若当前进程并未执行完毕,它又不愿放弃CPU的使用权,而被强制终止执行,使得CPU的使用权归其他进程,这种内核属于可剥夺型内核。 uCOS-II的内核属于可剥夺型内核。任务优先级反转则出现于可剥夺型的内核中:当任原创 2017-09-09 12:46:21 · 5090 阅读 · 4 评论 -
os_task.c
定位到uCOS-II/Source/os_task.c,该文件是任务的相关操作:1. 修改任务优先级函数OSTaskChangePrio() OSTaskChangePrio()适用于用户动态改变一个任务的优先级,但新的优先级必须符合要求。#if OS_TASK_CHANGE_PRIO_EN > 0uINT8U OSTaskChangePrio (INT8U oldprio, INT8U原创 2017-09-02 11:12:36 · 2680 阅读 · 0 评论 -
os_time.c
定位到uCOS-II/Source/os_time.c,该文件是系统时间相关。 由于嵌入式系统的任务是一个无限循环,而uCOS-II是一个抢占式内核,所以为了能让高优先级的任务不一直独占CPU,应该适当的让出CPU以给其他优先级较低的任务获得CPU得以执行。所谓“让出”即使任务进入延时,在延时期间让出CPU。1. 延时函数OSTimeDly()void OSTimeDly (INT32U tic原创 2017-08-31 20:00:21 · 1454 阅读 · 0 评论 -
ucos_ii.h
定位到uCOS-II/Source/目录,这部分是系统的核心代码。先看ucos_ii.h文件:1. 宏定义类型以及头文件包含#define OS_VERSION 29207u //定义版本号#include <app_cfg.h>#include <os_cfg.h>#include <os_cpu.h>#ifdef OS_GLOBALS#define OS_EXT#else#d原创 2017-08-31 12:40:24 · 1383 阅读 · 0 评论 -
uCOS-II系统中的任务调度
在前面的os_cpu_a.asm源码分析中看到了任务切换的函数OSCtxSw:OSCtxSw LDR R0, =NVIC_INT_CTRL LDR R1, =NVIC_PENDSVSET STR R1, [R0] BX LR 此函原创 2017-08-30 23:45:36 · 1857 阅读 · 0 评论 -
uCOS-II系统中的任务就绪表
多任务操作系统的主要工作是为系统中处于就绪状态的任务分配CPU资源,其中涉及的两个关键是:判断哪些任务处于就绪状态、确定哪个任务应该马上得到执行,即任务调度。1. 任务就绪表任务就绪表记录了系统中所有处于就绪状态的任务,从代码上来看它就是一个类型为INT8U的数组OSRdyTbl[]。。系统中的任务为32个时,OSRdyTbl[]就有4个成员。每个成员占据8位,所以OSRdyTbl[]的每一个数据元原创 2017-08-30 00:31:10 · 6163 阅读 · 2 评论 -
uCOS-II系统中的任务
uCOS-II系统内核的主要工作是对任务的管理和调度。在进行接下来的源码分析前,先来把任务这东西理一理。1. 任务的引入 在公司的大型的软件研发项目中,通常项目经理会将该项目分解成多个功能模块,项目组内程序员分别负责其中一个,当这多个功能模块完成时候,就意味着整个项目进度接近完成。当然,在开发过程中,项目组内的程序员是同时在工作的,即所谓的“并行开发”,这将大大提高了项目完成效率。 在uCOS-原创 2017-08-28 00:01:35 · 3407 阅读 · 0 评论 -
os_cpu_c.c
定位到源码的uCOS-II/Ports/ARM-Cortex-M3/Generic/IAR/os_cpu_c.c:os_cpu_c.c定义了9个钩子(Hook)函数和一个堆栈初始化函数。所谓钩子函数,是那些插入到某些函数中以扩展这些功能的函数,一般钩子函数是为第三方软件开发人员提供的扩充软件功能的入口。为了系统使用者扩展系统功能,uCOS-II中提供很多的钩子函数,使用者可以不修改uCOS-II的源原创 2017-08-12 12:37:58 · 2023 阅读 · 0 评论 -
os_cpu_a.asm
定位到源码的uCOS-II/Ports/ARM-Cortex-M3/Generic/IAR/os_cpu_a.asm,这是.asm文件,也就是汇编文件。1. 声明外部变量和导出符号EXTERN OSRunning ; External referencesEXTERN OSPrioCurEXTERN OSPrioHighRdyEXTERN OSTCBCurEXTE原创 2017-08-11 18:49:15 · 3569 阅读 · 2 评论 -
uCOS-II源码下载及源码目录结构
攻克RTOS之旅,扬帆起航! RTOS有众多种,个人感觉,用得最火的是FreeRTOS,因为它即使用于商业途径,也是开源免费的;其次是就是uCOS-II和uCOS-III。uCOS-II用于商业途径是需要付费的,但是对于学习研究却是免费的。它们同是嵌入式实时操作系统,很多东西都是共通的,熟悉其一,其它都非难题了。 RTOS的学习,我选择的是uCOS-II。学习该操作系统的流程,主要...原创 2017-08-11 12:42:56 · 23808 阅读 · 7 评论 -
os_cpu.h
定位到源码的uCOS-II/Ports/ARM-Cortex-M3/Generic/IAR/os_cpu.h:1. 全局变量OS_CPU_GLOBALS 和OS_CPU_EXT 允许我们是否使用全局变量。#ifdef OS_CPU_GLOBALS#define OS_CPU_EXT#else#define OS_CPU_EXT extern#endif若没有定义OS_CPU_GLO原创 2017-08-11 18:25:45 · 951 阅读 · 0 评论