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任务删除流程图 具体代码 注: 如上是关中断,以及取消优先级对应的就绪标志 关中断代码为: 取消就绪标志,实际上是将就绪表中指定 ...
随机推荐
- SpringMVC Jsp include 错误404 不显示页面
一.问题描述: 1. 新建了taglibs.jsp存放jstl标签库和 jsp建站基本变量ctx 和basPath 如下 (位置WEB-INF\common) <%@ page import= ...
- [Optimization] Greedy method
Given two sequences of letters A and B, find if B is a subsequence of A in thesense that one can del ...
- VI/VIM 无法使用系统剪贴板(clipboard)?(Ubuntu&Mac OS X已解决)
在 Ubuntu/Mac OS X 中使用VI/VIM时,发现无法使用系统的剪贴板. Ubuntu 上网一查,原来是少装了几个东西. 使用如下命令,安装相关的包.安装成功后,就可以使用系统剪贴板了. ...
- exec vs sp_executesql
1.exec vs sp_executesql 1.1 说到exec了解SQLServer的朋友第一反应应该是它用来执行存储过程,对的这是其一,另一个作用是执行一个动态批处理.总结下:a.执行一个 ...
- 9.26/27 blog项目
2018-9-26 18:05:20 放上一个老男孩b站视频连接 :https://shimo.im/docs/VN0BLgAIBdMVSa4S/ b站连接: https://space.bilibi ...
- 4、css盒模型和文本溢出
4:css盒模型和文本溢出 学习目标 1.认识盒子模型 2.盒子模型的组成部分 3.学习盒子模型的相关元素 margin padding 4.文本溢出相关的属性 一.css属性和属性值的定义 盒模型是 ...
- favicon.ico 网站小图标标识
随便打开一个网页:比如 http://www.baidu.com/ 可以看到在浏览器的标签头上面显示了一个图标,这个图标是:,也就是我们常说的favicon.ico. 由于这篇文章主要讨论favico ...
- windous----快捷键
桌面操作: • 贴靠窗口:Win +左/右> Win +上/下>窗口可以变为1/4大小放置在屏幕4个角落• 切换窗口:Alt + Tab(不是新的,但任务切换界面改进)• 任务视图:Win ...
- HTML滚动文字代码 marquee标签
看到一个HTML滚动文字代码 marquee标签的内容,非常全面,而且觉得有点意思,可以让大家为自己博客或者网站设置一个漂亮的滚动文字. 以下是原文: <marquee style=" ...
- com.mysql.jdbc.MysqlDataTruncation: Data truncation: Data too long for column 'id' at row 1
1.存储的值超过了字段长度.调整数据库中的字段长度 2,变更字段字符集编码为utf8