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. RedisLive监控工具 windows部署笔记

    1. Python2.7环境安装  Path环境变量中添加  2.下载安装 VC Compiler for Python  地址: http://www.microsoft.com/en-us/dow ...

  2. Turning off “Language Service Disabled” error message in VS2017

    We are getting the following "Error" message in our MVC web application in Visual studio 2 ...

  3. swoole Tcp

    TCP服务对象 <?php //创建Server对象,监听 127.0.0.1:9501端口 $serv = ); //监听连接进入事件 $serv->on('connect', func ...

  4. cookie是如何保存到客户端,又是如何发送到服务端

    Cookie相关的Http头     有 两个Http头部和Cookie有关:Set-Cookie和Cookie.     Set-Cookie由服务器发送,它包含在响应请求的头部中.它用于在客户端创 ...

  5. [Node.js] 01 - How to learn node.js

    基本概念 链接:https://www.zhihu.com/question/47244505/answer/105026648 链接:How to decide when to use Node.j ...

  6. postmain 通过函数动态设置参数

    调用服务器的服务,其中有个参数是签名,签名需要计算,需要写一个本地函数. 下一步 pre-request Script 的代码如下: (function($) { if(!$.encoding) $. ...

  7. Windows-NTFS-ADS在渗透测试中的利用

    0.什么是ADS Windows:微软公司的一款视窗操作系统,其内核为WindowsNT. NTFS:WindowsNT环境的限制级专用文件系统. ADS:NTFS的系统特性,交换数据流(Altern ...

  8. 在Android源码中查找Java代码中native函数对应的C++实现

    Android源码中很多关键代码都是C++实现的,java通过jni来调用,经常会看到java中这样的代码: static native Thread currentThread(); 如何根据方法名 ...

  9. iis和tomcat(整合)

    ---恢复内容开始---   (一)   为什么要把IIS.Tomcat整合到一起?假如你遇到这种情况,你开发了一个javaweb项目要部署到服务器上,但是这个服务器上已经部署了asp.asp.net ...

  10. [No0000106]配置PLSQL,提升工作效率

    界面模板的配置: 方便用户快速点击需要的功能.如打开SQL Window 1.打开customize,用户自定义Toolbars对话框. 2.在Commands命令标签页,选中要添加的命令,拖动到工具 ...