本文章都是基于学习野火STMF4系列的开发板的学习做的,大部分都是开发手册的内容,做笔记用,具体请参考野火官方的开发手册。
1. uC/OS-III 文件结构

①配置文件,通过定义这些文件里宏的值可以轻易地裁剪 uC/OS-III 的功能。
②用户应用文件, 定义和声明应用任务。
③内核服务文件,其代码与 CPU 无关,可以不做任何修改移植到任何 CPU。
④底层函数库,比如字符串的常规操作, 常用的数学计算, 等等。
⑤CPU 移植文件, 用户如果想要移植 uC/OS-III 到不同平台上,需要修改这部分代码。
⑥CPU 配置文件,主要是 CPU 的一些工作模式和服务函数。
⑦其他 CPU 相关文件。
2.uC/OS-III 数据结构
uC/OS-III 中的内核对象大多都是以结构体的形式存在的,例如出现最多的任务的任务控制块的数据结构如下所示,结构体中的每个成员代表任务具有的一种属性。在结构体中,可以看到很多宏,通过定义这些宏,就可以轻易地裁剪任务控制块具有的属性(任务的功能)。
在 uC/OS-III 中,对内核对象的管理大多采用线性链表的数据结构,包括单向链表和双向链表。链表就是将要管理的对象按照方便管理的规则一个接一个串联在一起,提高管理效率。

3.uC/OS-III 内核对象
在 uC/OS-III 初始化的时候, 至少会创建空闲任务 OS_IdleTask()和时基任务OS_TickTask()这两个任务, 另外还有三个可选择的内部任务,软件定时器任务OS_TmrTaks() 、中断延迟提交任务 OS_IntQTask()和统计任务 OS_StatTask()。

任务切换情况:

从 uC/OS-III 任务管理的角度来看, uC/OS-III 中的任务 9 种状态, 如下所示。 分别是休眠态、就绪态、运行态、挂起态和中断态,如下表示。OS_TASK_STATE_RDY:就绪状态。处于该状态的任务按照优先级高低先后占有 CPU 运行。
OS_TASK_STATE_DLY:延时状态。任务调用 uC/OS 的延时韩式OSTimeDly()或 OSTimeDlyHMSM 后,就停止运行,进入延时状态。
OS_TASK_STATE_PEND:无期限等待状态。 任务需要停止运行,等待某个事件(内核对象),直到等到才继续运行。
OS_TASK_STATE_PEND_TIMEOUT:有期限等待状态。任务需要停止运行,在
一定时间内等待某个事件(内核对象),如果超时或事件发生了,就继续运行。
OS_TASK_STATE_SUSPENDED:挂起状态。任务被强制暂停运行,直到被
恢复才可继续运行。
OS_TASK_STATE_DLY_SUSPENDED:延时中被挂起状态。 任务在延时状态时,
又被其它任务挂起。
OS_TASK_STATE_PEND_SUSPENDED:无期限等待中被挂起状态。任务在无期限等待某个事件(内核对象)时,又被其它任务挂起。
OS_TASK_STATE_PEND_TIMEOUT_SUSPENDED:有期限等待中被挂起状态。任务在有期限等待某个事件(内核对象)时,又被其它任务挂起。
OS_TASK_STATE_DEL:删除状态。 任务被删除, 不再参与任务管理, 重新创建后才收 uC/OS 管理。
4.软件定时器
软件定时器的功能跟硬件定时器一样,主要用于定时,但其精度达不到硬件定时器的标准,可以用于定时一些精度要求不是特别严格的事件。理论上, uC/OS-III 可以创建无数个软件定时器,这是硬件定时器无法媲美的。
5. 多值信号量
多值信号量主要用于管理资源和标志事件的发生。管理资源的一个常用仿例就是停车场,把总停车位看做信号量,每次申请一个停车位信号量就减 1,如果停车位为 0,就申请不到,但可以等待其它汽车释放停车位。 标志事件的发生类似于裸机里常用的事件标志变量,就是标志某事是否发生,然后通知任务。
6. 互斥信号量
互斥信号量的作用是保护共享资源,避免共享资源正在被重写时被其它任务读取,这样读取到的数据就有错误。 互斥信号量的作用跟多值信号量的作用有些重叠,多值信号量的执行时间少于互斥信号量,但多个任务访问共享资源时,容易出现优先级反转的问题,这会降低系统的可预知性, 而互斥信号量可以防止优先级反转,所以建议在互斥信号量可以解决需要时,就优先使用互斥信号量。
7.消息队列
消息队列是由多个消息串联而成的一个机制,需要消息的任务就从消息队列的出口端获取,如果消息队列里没有消息了,可以选择等待或者不等待消息的到来。消息可以比信号量携带更丰富的信息, 可以是任意长度的消息内容。
8.事件标志组
事件标志组用于标志若干个事件否发生的组合。这个功能可以轻易地实现键盘的按键组合。
9.任务信号量
任务信号量的作用与多值信号量的一样,但多值信号量是所有任务都可以申请使用,而任务信号量却只能给一个特定任务使用,也就是说任务信号量是一个任务本身的属性,但其他任务都可以给这个任务发送任务信号量。
10.任务消息队列
任务消息队列的作用与(普通)消息队列的一样,但(普通)消息队列是所有任务都可以申请它的消息,而任务任务消息队列的消息却只能给一个特定任务使用,也就是说任务消息队列是一个任务本身的属性,但其他任务都可以给这个任务发送任务消息。
11. 内存管理(分区)
内存管理(分区)主要是为了尽量减少内存在不断分配和释放过程造成的内存碎片,避免过多的浪费内存。 内存分区就是一次性开辟一大块连续内存,然后将内存分区平均分成若干个内存块,需要使用内存时就申请一个内存块,用完了再释放回内存分区, 这样就实现内存块的循环使用。
12. uC/OS-III 常用程序段
(1).临界段
临界段主要是为了某段代码在执行时避免被其它任务或中断打断。临界段根据是否是使能了中断延迟提交(OS_CFG_ISR_POST_DEFERRED_EN)。
(2). 中断嵌套管理

4.0-uC/OS-III目录结构的更多相关文章

  1. uc/os iii移植到STM32F4---IAR开发环境

    也许是先入为主的原因,时钟用不惯Keil环境,大多数的教程都是拿keil写的,尝试将官方的uc/os iii 移植到IAR环境. 1.首先尝试从官网上下载的官方移植的代码,编译通过,但是执行会报堆栈溢 ...

  2. uC/OS - III 移植 IAR平台

    关于移植uC/OS-III 网上已经有很多教程了此处只是做个记录 首先下载源码然后解压得到下面的文件: 然后在模版工程里新建各种文件夹: 最后全部都添加进工程: OK了,编译一下,惊呆了,竟然 0错误 ...

  3. Thinkphp5.0实战开发二------自动生成目录结构

    序言 ThinkPHP5.0 具备自动创建功能,可以用来自动生成需要的模块及目录结构和文件等,自动生成主要调用\think\Build 类库.ThinkPHP5.0中模块文件夹在application ...

  4. 关于SVN 目录结构

    Subversion有一个很标准的目录结构,是这样的.比如项目是proj,svn地址为svn://proj/,那么标准的svn布局是 svn://proj/   |   +-trunk   +-bra ...

  5. 关于SVN 目录结构,使用教程

    SVN使用教程:http://www.cnblogs.com/armyfai/p/3985660.html Subversion有一个很标准的目录结构,是这样的.比如项目是proj,svn地址为svn ...

  6. SVN 目录结构

    Subversion有一个很标准的目录结构,是这样的.比如项目是proj,svn地址为svn://proj/,那么标准的svn布局是 svn://proj/|+-trunk+-branches+-ta ...

  7. SVN是什么,svn的目录结构

    Svn是一个离线的代码管理,可以多个人一起修改,然后再将修改的内容提交到Svn中.每一个svn服务器中的数据存储单位叫做存储,但是你不仅仅可以把整个存储当作你维护的内容,也可以将其中的某个分支目录像根 ...

  8. 【转】svn 的开发目录结构和流程

    原文: https://blog.csdn.net/iteye_15570/article/details/82548132 ------------------------------------- ...

  9. THINKPHP 5.0目录结构

    目录结构 下载最新版框架后,解压缩到web目录下面,可以看到初始的目录结构如下: project 应用部署目录 ├─application 应用目录(可设置) │ ├─common 公共模块目录(可更 ...

  10. thinkphp5.0目录结构

    下载最新版框架后,解压缩到web目录下面,可以看到初始的目录结构如下: project 应用部署目录 ├─application 应用目录(可设置) │ ├─common 公共模块目录(可更改) │ ...

随机推荐

  1. FPGA编程—组合逻辑编码器等verilog实现

    本篇博客主要实现对组合逻辑电路的一些常用模块的实现.组合逻辑中,包括译码器,编码器,输入输出选择器,数值比较器,算法单元等.  先来实现编码器,最常用的8-3编码器,这里先讲一下要用到的case ,c ...

  2. Git 目录

    linux通过用户名.密码提交的方式搭建私有git服务端 centos 6.5 6.6 6.7安装gitlab教程(社区版) Git 初始化项目.创建合并分支.回滚等常用方法总结 Git 错误集锦

  3. Python内置类型——list

    list(列表)是Python内置的可变序列(Sequence)类型,list的对象的方法也都是就地(in-place)更改调用这些方法的列表对象, List的一些细节 可以直接为list的某个下标赋 ...

  4. [hive] hive 安装、配置

    一.hive安装 1.官网下载 1.2.2版本 http://apache.fayea.com/hive/hive-1.2.2/ 2. 解压,此处目录为 /opt/hadoop/hive-1.2.2 ...

  5. 【代码审计】YzmCMS_PHP_v3.6 CSRF漏洞分析

      0x00 环境准备 YzmCMS官网:http://www.yzmcms.com/ 程序源码下载:http://pan.baidu.com/s/1pKA4u99 测试网站首页: 0x01 代码分析 ...

  6. [Android] 基于 Linux 命令行构建 Android 应用(七):自动化构建

    本章将演示如何基于 Linux 命令行构建 Android 应用,在开始本章之前,希望你已经阅读之前几章内容. 本文环境为 RHEL Sandiego 32-bits,要基于 Linux CLI 构建 ...

  7. HTML5——表单美化

    闲聊: 今天小颖在跟着慕课网学习:表单美化 看完了自己跟着敲了敲,顺便做个笔记嘻嘻,好记性不如烂笔头,脑子记不住,就写成笔记,以后也方便查看,嘻嘻. 正文: 1.表单美化_单选按钮篇 2.表单美化_复 ...

  8. python面向对象-三大特性

    python面向对象编程三大特性 小结:前面我们说完了类和对象的关系,相信对类和对象的理解更加透彻..让我们一起去研究面向对象的三大特性吧.... 继承 1.什么继承? 在程序中继承就是事物之间的所属 ...

  9. web 框架的本质及自定义web框架 模板渲染jinja2 mvc 和 mtv框架 Django框架的下载安装 基于Django实现的一个简单示例

    Django基础一之web框架的本质 本节目录 一 web框架的本质及自定义web框架 二 模板渲染JinJa2 三 MVC和MTV框架 四 Django的下载安装 五 基于Django实现的一个简单 ...

  10. cv_list

    cv_list hmz http://cse.sjtu.edu.cn/OS/OS_files/page0012.htm 邹恒明博士: 美国密歇根大学(University of Michigan-An ...