三、初识μCOS-III

单任务应用程序

一、

  1. include
    • app_cfg.h:设定任务优先级、堆栈空间大小等
    • bsp.h:板级支持包
    • os.h:
  2. 分配任务控制块(OS_TCB)
  3. 声明任务栈(CPU_STK数据类型),可以静态分配,也可以使用malloc()函数从堆中动态分配。不需要释放。
  4. 创建任务的函数原型声明

二、

  1. 调用BSP函数关闭所有中断。在应用程序中开中断。
  2. 初始化μC/OS-III。至少创建了两个系统任务:空闲任务和时钟节拍任务。main函数必须在其他其他系统函数之前调用OSInit()
    • 空闲任务:会在其他任务都不就绪的时候运行。
    • 时钟节拍任务:负责时间管理。
  3. 创建任务,分配该任务任务块地址。
  4. 创建任务指定一个名字。
  5. 任务起始地址:任务函数名
  6. 第一次运行时会接收到的参数。相当于p_arg。
  7. 任务优先级。数值越小代表优先级越高,必须保留0和OS_CFG_PRIO_MAX-1。
  8. 分配任务栈空间基地址。基地址总是任务空间的最低地址
  9. 任务栈的深度标记。代表栈溢出警告之前栈内生于空间大小。
  10. 任务栈大小。实际大小为CPU_STK*4。
  11. 暂时无关
  12. 错误码
  13. OSStart()开始多任务管理。μC/OS-III会运行创建优先级最高的任务。

注意:建议只先创建一个任务,因为只有唯一一个应用任务是的μC/OS-III可以确定CPU的享堆速度。并且在调用OSStart()提前创建要使用的内核对象(信号量和消息列队等)

三、

  1. 任务函数名
  2. BSP_Init();初始化BSP
  3. CPU_Init()初始化CPU,提供测量中断延迟时间,获取时间戳等服务
  4. BSP_Cfg_Tick()建立μC/OS-III时钟节拍
  5. 关闭LED
  6. 循环开始
  7. 反转LED
  8. 每一个任务都必须调用一个可以引发任务“等待某事件”的函数
    • 可以等待定时结束
    • 可以等待一个来自ISR或其他任务的一个信号量或一条消息。
      ***
      有内核对象参与的多任务应用程序
      ---
  • 互斥型信号量(Mutex)用于防止共享资源被一个以上任务同时访问。一个任务想要防卫某共享资源时,必须先获取互斥型信号量。使用完之后须释放互斥型信号量。
    共享资源可以是一个变量、一个数组、一个数据结构、或者一个I/O设备等
  • 消息列队中断服务程序(ISR)或任务可通过消息列队给其他任务发送消息。发送者产生消息发送给消息列队。想要接受这些消息的任务在消息列队中等待。如果消息类队中已有消息,则接收者可以立刻获取消息。如果消息类队中没有消息,则接收者将插入到消息列队对应的等待表中。
    消息可以是一个缓冲区地址、一个函数地址或者其他内容

猜你喜欢

转载自www.cnblogs.com/tearain/p/9459211.html