单任务应用程序
一、
- include
- app_cfg.h:设定任务优先级、堆栈空间大小等
- bsp.h:板级支持包
- os.h:
- 分配任务控制块(OS_TCB)
- 声明任务栈(CPU_STK数据类型),可以静态分配,也可以使用malloc()函数从堆中动态分配。不需要释放。
- 创建任务的函数原型声明
二、
- 调用BSP函数关闭所有中断。在应用程序中开中断。
- 初始化μC/OS-III。至少创建了两个系统任务:空闲任务和时钟节拍任务。main函数必须在其他其他系统函数之前调用OSInit()。
- 空闲任务:会在其他任务都不就绪的时候运行。
- 时钟节拍任务:负责时间管理。
- 创建任务,分配该任务任务块地址。
- 创建任务指定一个名字。
- 任务起始地址:任务函数名
- 第一次运行时会接收到的参数。相当于p_arg。
- 任务优先级。数值越小代表优先级越高,必须保留0和OS_CFG_PRIO_MAX-1。
- 分配任务栈空间基地址。基地址总是任务空间的最低地址。
- 任务栈的深度标记。代表栈溢出警告之前栈内生于空间大小。
- 任务栈大小。实际大小为CPU_STK*4。
- 暂时无关
- 错误码
- OSStart()开始多任务管理。μC/OS-III会运行创建优先级最高的任务。
注意:建议只先创建一个任务,因为只有唯一一个应用任务是的μC/OS-III可以确定CPU的享堆速度。并且在调用OSStart()提前创建要使用的内核对象(信号量和消息列队等)
三、
- 任务函数名
- BSP_Init();初始化BSP
- CPU_Init()初始化CPU,提供测量中断延迟时间,获取时间戳等服务
- BSP_Cfg_Tick()建立μC/OS-III时钟节拍
- 关闭LED
- 循环开始
- 反转LED
- 每一个任务都必须调用一个可以引发任务“等待某事件”的函数。
- 可以等待定时结束
- 可以等待一个来自ISR或其他任务的一个信号量或一条消息。
***
有内核对象参与的多任务应用程序
---
- 互斥型信号量(Mutex):用于防止共享资源被一个以上任务同时访问。一个任务想要防卫某共享资源时,必须先获取互斥型信号量。使用完之后须释放互斥型信号量。
共享资源可以是一个变量、一个数组、一个数据结构、或者一个I/O设备等。 - 消息列队:中断服务程序(ISR)或任务可通过消息列队给其他任务发送消息。发送者产生消息发送给消息列队。想要接受这些消息的任务在消息列队中等待。如果消息类队中已有消息,则接收者可以立刻获取消息。如果消息类队中没有消息,则接收者将插入到消息列队对应的等待表中。
消息可以是一个缓冲区地址、一个函数地址或者其他内容。