8.0-uC/OS-III单任务应用
1.单任务应用
app.c文件:
(1).APP_CFG.H 是用于配置的头文件。例如, APP_CFG.H 中包含的#define常量确定了任务优先级,堆栈大小,以及其他特性。
BSP.H 是 BSP 的头文件,包含了 #define 及函数原型如BSP_Init(),,SP_LED_On(), OS_TS_GET()等。
OS.H是uC/OS-III的主要头文件,包含了以下头文件:
OS_CFG.H
CPU.H
CPU_CFG.H
CPU_CORE.H
OS_TYPE.H
OS_CPU.H
(2).定义任务控制块( OS_TCB)
(3).)每个任务需要创建自己的堆栈。堆栈的数据类型必须是CPU_STK。堆栈可以被静态地分配或者通过malloc()动态地分配。没有必要释放堆栈空间,因为任务将不会被删除,堆栈将一直被使用。
(4).一个函数原型。
2.main函数:
(1). main()开始时调用一个 BSP函数用于关闭所有中断。在大部分处理器中, 中断在启动时是关闭的。 无论如何, 在启动时关闭所有的外设中断是更安全的。
( 2).调用 OSInit(),用于初始化 uC/OS-III。 OSInit()初始化内部变量和数据结构,同时产生 2个到 5个内部任务。最低程度,uC/OS-III须创建空闲任务 OS_IdleTask( ),当没有其他任务运行时就运行空闲任务。 uC/OS-III也创建时基任务。
根据配置文件中所配置的, uC/OS-III 会创建统计任务OS_StatTask()、定时器任务 OS_TmrTask()、中断队列处理任务OS_IntQTask()。
大多数的 uC/OS-III函数会通过一个指向 OS_ERR变量的指针返回一个错误代号。如果 OSInit()初始化函数运行成功,错误代号被设为 OS_ERR_NONE。如果在初始化不成功, uC/OS-III会根据执行的结果返回对应的错误代号。 参照OS.H中的错误代号。 特别的, 所有的错误代号都是以OS_ERR_作为前缀的。
OSInit()必须在uC/OS-III的其它函数之前调用.
(3) .通过调用 OSTaskCreate()创建任务。 OSTaskCreate()需要13个参数。 第一个参数是任务堆栈的地址。 {该任务堆栈的开始地址}
(4)OSTaskCreate( ) 允许给每个任务分配名字。 OS_TCB中存储了指向任务名的指针。因而任务名长度无限制,必须以空字符结尾。
(5) .第3个参数是指向任务代码的指针。典型的uC/OS-III任务是无限循环执行的如下:
(6). OSTaskCreate()的第四个参数是一个实参, 第一次被调用时OSTaskCreate()接收这个变量,传递给所创建的任务 MyTask()中的”p_arg”。
任务的参数可以是任意的指针。例如,用户可以传送数据结构等给任务。 {参数类型是void*}.
( 7) OSTaskCreate()的第五个参数是任务的优先级。优先级确立了任务间的重要性关系。参数值越小优先级越高。可以设置优先级数值为 1到OS_CFG_PRIO_MAX-2。要避免使用优先级#0和优先级OS_CFG_PRIO_MAX-1。因为这些是为 uC/OS-III 保留的。OS_CFG_PRIO_MAX是编译时配置的,在OS_CFG.H中定义。
( 8).是任务堆栈的基地址。基地址通常是分配给该任务的堆栈的最低内存位置。
( 9). 第七个参数是地址“ 水印”, 当堆栈生长到指定位置时就不再允许其生长。 在例子中, 当堆栈空间只剩下10%的时候将会限制堆栈的生长。
( 10). OSTaskCreate()的第八个参数定义了任务的堆栈大小(以CPU_STK为数据类型而不是字节)。例如,如果要分配 1KB大小的堆栈空间,因为CPU_STK是32位的,所以这个参数是256.
( 11).接下来的三个参数将被跳过因为这三个参数跟当前的话题无关,直接设置为 0。再下面一个参数是 OSTaskCreate()的可选项。例如, 在运行时堆栈会被检测 ( 假定统计任务在OS_CFG.H中使能),任务创建时堆栈会被初始化。
( 12) .OSTaskCreate()的最后一个参数是一个指针,将接收根据函数执行结果所返回的错误代号。如果OSTaskCreate()函数执行成功,错误代号将会是OS_ERR_NONE,否则会返回其它的错误代号(参见OS.H中错误代号的定义)。
( 13).调用 uC/OS-III过程在 main()函数中的最后一个步骤是调用OSStart(),开始多任务处理。特别的,在OSStart()调用之前uC/OS-III会选择最高优先级任务。最高优先级的任务通常是OS_IntQTask() ( 假定在 OS_CFG.H中定义了 OS_CFG_ISR_POST_DEFERRED_EN)。在种情况下, OS_IntQTask()将会执行一些它自身的初始化操作, 然后uC/OS-III将会切换到下一个最高优先级的任务。
3.函数AppTaskStart():
(1).参数“ p_arg” 是OSTaskCreate()传递给任务AppTaskStart()的参数。
(2). BSP_Init()用于初始化目标板的硬件。目标板可能会有一些GPIO,继电器,传感器等需要被设置。这个函数是在BSP.C中定义的.
(3).CPU_Init()初始化uC/CPU的服务。 uC/CPU用于测量中断响应时间, 读取时间戳, 提供仿真的计数清零指令等( 假定用户所使用的处理器没有那种汇编指令).
( 4). BSP_Cfg_Tick()设置 uC/OS-III的时基中断。为此,这个函数需要初始化一个硬件定时器用于中断 CPU,其频率为OS_CFG_TICK_RATE_HZ(在OS_CFG_APP.H中定义)。
( 5) .BSP_LED_Off()用于关闭LED, 参数为0表示关闭全部的LED。这是个用户函数,可删除。
( 6).所有的uC/OS-III任务需要被设置为无限循环。
(7). BSP_LED_Toggle()用于打开 LED,同样的,参数为 0表示打开全部LED。 改参数为1表示标号为#1的LED被打开。
( 8).最后,每个任务可以调用 uC/OS-III中的函数,可以让任务待一个事件( 信号量, 或来自于中断的消息, 或来自于其它任务的消息。)而被挂起。
8.0-uC/OS-III单任务应用的更多相关文章
- uc/os iii移植到STM32F4---IAR开发环境
也许是先入为主的原因,时钟用不惯Keil环境,大多数的教程都是拿keil写的,尝试将官方的uc/os iii 移植到IAR环境. 1.首先尝试从官网上下载的官方移植的代码,编译通过,但是执行会报堆栈溢 ...
- uC/OS - III 移植 IAR平台
关于移植uC/OS-III 网上已经有很多教程了此处只是做个记录 首先下载源码然后解压得到下面的文件: 然后在模版工程里新建各种文件夹: 最后全部都添加进工程: OK了,编译一下,惊呆了,竟然 0错误 ...
- uC/OS II原理分析及源码阅读(一)
uC/OS II(Micro Control Operation System Two)是一个可以基于ROM运行的.可裁减的.抢占式.实时多任务内核,具有高度可移植性,特别适合于微处理器和控制器,是和 ...
- uc/os任务创建
问题描述: uc/os中任务创建 问题解决: 创建一个任务,任务从无到有.任务创建函数分两种, 一种是基本的创建函数OSTaskCreate, 另一种是扩展的任务创建函数OSTaskCrea ...
- uC/OS 的任务调度解析 (转)
uC/OS 的任务调度解析 1.任务调度器启动之后(初始化,主要是TCB的初始化),就可以创建任务,开始任务调度了,实际上第一个任务准确的说不是进行任务切换,而是进行启动当前最高优先级任务.uC/OS ...
- 【原创】uC/OS 中LES BX,DWORD PTR DS:_OSTCBCur的作用及原理
LES BX, DWORD PTR DS:_OSTCBCur ;OSTCBCur->OSTCBStkPtr = SS:SP!!! ], SS ;将当前SS(栈的基地址)寄存器值存放至当前任务控制 ...
- 【原创】uC/OS II 任务切换原理
今天学习了uC/OS II的任务切换,知道要实现任务的切换,要将原先任务的寄存器压入任务堆栈,再将新任务中任务堆栈的寄存器内容弹出到CPU的寄存器,其中的CS.IP寄存器没有出栈和入栈指令,所以只能引 ...
- 基于μC/OS—III的CC1120驱动程序设计
基于μC/OS—III的CC1120驱动程序设计 时间:2014-01-21 来源:电子设计工程 作者:张绍游,张贻雄,石江宏 关键字:CC1120 嵌入式操作系统 STM32F103ZE ...
- 【小梅哥SOPC学习笔记】NIOS II处理器运行UC/OS II
SOPC开发流程之NIOS II 处理器运行 UC/OS II 这里以在芯航线FPGA学习套件的核心板上搭建 NIOS II 软核并运行 UCOS II操作系统为例介绍SOPC的开发流程. 第一步:建 ...
- uc/os 任务删除
问题描述: uc/os 任务删除 问题解决: uc/os任务删除流程图 具体代码 注: 如上是关中断,以及取消优先级对应的就绪标志 关中断代码为: 取消就绪标志,实际上是将就绪表中指定 ...
随机推荐
- 深度解析Java 8:JDK1.8 AbstractQueuedSynchronizer的实现分析
深度解析Java 8:JDK1.8 AbstractQueuedSynchronizer的实现分析(上) 深度解析Java 8:AbstractQueuedSynchronizer的实现分析(下) A ...
- Linux 目录结构_004
前言 Linux文件系统层次标准,英文全称Filesystem Hierarchy Standard,英文简称FHS. 由于利用Linux来开发产品的团队和个人实在太多了,如果每个人都以自己的想法来配 ...
- Java中的引用类型Scanner类和随机类型Random
Scanner类 我们要学的Scanner类是属于引用数据类型,我们先了解下引用数据类型. 引用数据类型的使用 与定义基本数据类型变量不同,引用数据类型的变量定义及赋值有一个相对固定的步骤或格式. ...
- [Bayes] Understanding Bayes: A Look at the Likelihood
From: https://alexanderetz.com/2015/04/15/understanding-bayes-a-look-at-the-likelihood/ Reading note ...
- [UI] 05 - Bootstrap: built-in components
前言 一.资源 From: http://www.imooc.com/code/3777 内置组件 一.缩略图 <div class="col-xs-6 col-md-3"& ...
- 保证Activity启动时每次都调用create
原文:https://stackoverflow.com/questions/41766547/run-oncreate-every-time-android-app-is-opened If you ...
- apache2.2服务无法启动 发生服务特定错误:1 的解决办法 (windows服务错误 日志查看方法)
转 https://blog.csdn.net/liuensong/article/details/6738041 查错过程: 1.查看apache错误日志:目录下的apache/logs/error ...
- VS Code非英语版本连接TFS错误解决方案
使用VS Code连接TFS时,提示以下错误: (team) It appears you have configured a non-English version of the TF execut ...
- 解决Maven build 慢的问题
extends:http://www.cnblogs.com/gmq-sh/p/4742698.html ,http://www.cnblogs.com/rainy-shurun/p/5726758. ...
- Selenium模拟浏览器抓取淘宝美食信息
前言: 无意中在网上发现了静觅大神(崔老师),又无意中发现自己硬盘里有静觅大神录制的视频,于是乎看了其中一个,可以说是非常牛逼了,让我这个用urllib,requests用了那么久的小白,体会到sel ...