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单任务应用的更多相关文章

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

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

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

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

  3. uC/OS II原理分析及源码阅读(一)

    uC/OS II(Micro Control Operation System Two)是一个可以基于ROM运行的.可裁减的.抢占式.实时多任务内核,具有高度可移植性,特别适合于微处理器和控制器,是和 ...

  4. uc/os任务创建

    问题描述:      uc/os中任务创建 问题解决: 创建一个任务,任务从无到有.任务创建函数分两种, 一种是基本的创建函数OSTaskCreate, 另一种是扩展的任务创建函数OSTaskCrea ...

  5. uC/OS 的任务调度解析 (转)

    uC/OS 的任务调度解析 1.任务调度器启动之后(初始化,主要是TCB的初始化),就可以创建任务,开始任务调度了,实际上第一个任务准确的说不是进行任务切换,而是进行启动当前最高优先级任务.uC/OS ...

  6. 【原创】uC/OS 中LES BX,DWORD PTR DS:_OSTCBCur的作用及原理

    LES BX, DWORD PTR DS:_OSTCBCur ;OSTCBCur->OSTCBStkPtr = SS:SP!!! ], SS ;将当前SS(栈的基地址)寄存器值存放至当前任务控制 ...

  7. 【原创】uC/OS II 任务切换原理

    今天学习了uC/OS II的任务切换,知道要实现任务的切换,要将原先任务的寄存器压入任务堆栈,再将新任务中任务堆栈的寄存器内容弹出到CPU的寄存器,其中的CS.IP寄存器没有出栈和入栈指令,所以只能引 ...

  8. 基于μC/OS—III的CC1120驱动程序设计

    基于μC/OS—III的CC1120驱动程序设计 时间:2014-01-21 来源:电子设计工程 作者:张绍游,张贻雄,石江宏 关键字:CC1120   嵌入式操作系统   STM32F103ZE   ...

  9. 【小梅哥SOPC学习笔记】NIOS II处理器运行UC/OS II

    SOPC开发流程之NIOS II 处理器运行 UC/OS II 这里以在芯航线FPGA学习套件的核心板上搭建 NIOS II 软核并运行 UCOS II操作系统为例介绍SOPC的开发流程. 第一步:建 ...

  10. uc/os 任务删除

    问题描述:     uc/os 任务删除 问题解决: uc/os任务删除流程图 具体代码 注:     如上是关中断,以及取消优先级对应的就绪标志 关中断代码为: 取消就绪标志,实际上是将就绪表中指定 ...

随机推荐

  1. 转载——githup的提交

    Github是管理软件开发的首选托管网站,12306的火车票插件一时让国内当时很多小白开发者(当然也包括我)认识到了这个网站.GitHub可以托管各种git库,并提供一个web界面,与 SourceF ...

  2. JPA 不生成外键

    在用jpa这种orm框架时,有时我们实体对象存在关联关系,但实际的业务场景可能不需要用jpa来控制数据库创建数据表之间的关联约束,这时我们就需要消除掉数据库表与表之间的外键关联.但jpa在处理建立外键 ...

  3. [OpenCV] Samples 18: Load image and check its attributes

    本篇内容: * 图片读取 * 图片高宽 * 图片ROI * 图片缩放 Ref: http://blog.csdn.net/u012005313/article/details/51943442 官网2 ...

  4. web java -- 连接池 -- 概述

    1. 连接池的实现原理 1. 创建连接池 首先要创建一个静态的连接池.这里的“静态”是指池中的连接时在系统初始化时就分配好的,并且不能够随意关闭.Java 提供了很多容器类可用来构建连接池,例如Vec ...

  5. Window应急响应(二):蠕虫病毒

    0x00 前言 ​ 蠕虫病毒是一种十分古老的计算机病毒,它是一种自包含的程序(或是一套程序),通常通过网络途径传播,每入侵到一台新的计算机,它就在这台计算机上复制自己,并自动执行它自身的程序. 常见的 ...

  6. redis aof和rdb区别

    转自https://blog.csdn.net/m0_38110132/article/details/76906422 1.前言 最近在项目中使用到Redis做缓存,方便多个业务进程之间共享数据.由 ...

  7. iOS - 富文本直接设置文字的字体大小和颜色

    富文本效果图: 富文本实现代码: UILabel *orderSureLabel = [Common lableFrame:CGRectZero title:] textColor:[UIColor ...

  8. Goroutines

    Go 语言中的并发可以用两种方式实现: 第一种方式,支持顺序通信进程(communicating sequential processes),简称 CSP.CSP是一种现代的并发编程模型,在这种编程模 ...

  9. ERP项目实施记录03

    今天继续测试,3周了,终于弄到采购进货.

  10. API(二)之Requests and Responses

    这一部分可以让返回的api信息以两种格式呈现:.json和.api REST框架的核心部分.我们来介绍几个基本的组成部分. Request objects REST框架引入了Request对象来扩展常 ...