1.uCOSIII总纲

  • 特点:
  • 1.uCOSIII总纲
  • 多任务,最高优先级抢占式内核;
  • 多个任务可处在同一优先级,同优先级内采取时间片轮转调度;
  • 任务数量、优先级数量、内核对象数量(任务、信 量、互斥信 量、事件标志组、消息队列、定时器等)均不受限制;
  • 一个任务可同时等待多个事件,即挂载在多个事件的等待队列上;
  • 一个任务或中断可以直接给另一个任务发送信 或消息;

 

 

  • 基于uCOSIII的工程中的分组:
    • 应用代码,即用户写的实现功能的代码,如main.c等等;
    • MCU生产厂家的库函数代码;
    • BSP(Board Support Package),板级支持开发包,为特定板子的外设接口写的代码,bsp.cbsp.h文件;
    • uCOSIII的与处理器无关的内核代码,即uCOSIII_CORE中的代码;
    • uCOSIII应用到特定处理器的移植代码,即uCOSIII_PORT中的os_cpu_xx文件;
    • CPU相关的,如打开关闭中断,与CPU和编译使用的数据类型等,即uCOSIII_CPU中的cpu_xx文件;
    • 公共功能函数文件如内存复制,字符串处理等文件,即uCOSIII_LIB中的文件,这确保了uCOSIII的可移植性不受处理器和编译器影响;
    • 配置文件,定义了uCOSIII的特征为应用文件所使用,如变量大小,数据结构,任务堆栈大小啊,消息池等;

 

  • uCOSIII一些文件内容
    • uC/CPU Port
      • cpu_core.cCPU相关初始化(时间戳,测量中断时间,CPUName),模拟CLZcount leading zeros)指令,测量中断关闭时间方法等。
      • cpu_core.hcpu_core.c的函数、变量声明。
      • cpu_def.hCPU模块使用的各种#define(大端小端字节序、堆栈的增长方向、Critical Section处理)
      • cpu.hCPU模块使用的类型定义、具体大端小端字节序、具体堆栈增长方向、具体Critical Section处理方法(CPU_CRITICAL_METHOD_STATUS_LOCAL,进入时需要在所所有的变量后面添加CPU_SR_ALLOC();)。
      • cpu_a.asm:汇编方法实现(CPU_IntDisCPU_IntEnCPU_SR_SaveCPU_SR_RestoreCPU_WaitForIntCPU_WaitForIntCPU_CntLeadZerosCPU_CntTrailZeros)。
      • cpu_c.c:针对特定CPU结构写的C函数(BitBand、中断相关的操作)(在系统中没有用到)。
      • cpu_cfg.h:是否开启设置CPU_Name功能,是否开启CPU的时间戳功能,是否测量中断关闭时间、是否有CLZ指令的汇编实现

 

  • uC/OS Port
    • os_cpu.hOS_TASK_SW()OSIntCtxSw()宏声明、OSStartHighRdy()等方法声明。
    • os_cpu_a.asmPendSV_Handler()OSStartHighRdy()的汇编实现。
    • os_cpu_c.c:移植需要的:系统调用的钩子函数、创建任务时对堆栈格式的初始化,SysTick的初始化和中断处理。
    • os_app_hooks.c:用户对OS调用的所有的钩子函数的实现,并且需要在OSInit()调用后设置对应的钩子函数(OSInit()将钩子函数的指针清空)。
    • os_cfg.h:配置OS中使用的模块和特性。
    • os_cfg_app.h:应用参数配置(例如:message pool大小,中断使用的堆栈大小,Idle任务堆栈大小,处理中断任务堆栈和队列大小,统计任务优先级、频率、堆栈大小,SysTick频率、任务优先级、堆栈大小、Spoke,软件定时器任务优先级、频率、堆栈大小、Spoke)。
    • os_var.cOS全局变量(无内容)。
    • os_dbg.cDebugger用到的常量。
    • os_type.h:根据CPU模块使用的数据类型typedef部分OS模块使用的数据类型。
    • os_cfg_app.c:根据os_cfg_app.h中的配置,声明变量和数组(Idle任务堆栈,处理中断任务堆栈和队列,中断使用堆栈,message pool,统计任务堆栈,SysTick堆栈和Wheel数组,软件定时器堆栈和Wheel数组)。
    • os_prio.c:管理bitmap table相关代码。

 

  • os.hOS的主要头文件(常量、宏、全局变量、方法原型等)。
  • os_core.cOS的核心函数(例如:OSInit()初始化uC , OSSched()任务级别调度 , OSIntExit() 中断级别调度,pendpostPend ListReady List管理等)。
  • os_tick.c:管理任务延时或者内核对象需要timeout的相关代码。
  • os_time.c:任务延时代码、System Tick中断处理函数调用的OSTimeTick
  • os_tmr.c:管理软件定时器。
  • os_task.c:任务管理相关的代码(OSTaskCreate()  OSTaskDel()  OSTaskChangePrio()…)。
  • os_msg.c:处理OS_MSG_Q相关的代码、初始化OSMsgPool
  • os_q.c:管理message queue相关代码。
  • os_sem.c:管理信 量(用于资源管理和同步)相关代码。
  • os_mutex.c:互斥信 量相关代码。
  • os_mem.c:固定大小内存管理相关。
  • os_flag.cflag相关代码。
  • os_int.c:中断Deferred Post相关代码(当OS_CFG_ISR_POST_DEFERRED_EN == 1 (os_cfg.h))。
  • os_pend_multi.c:任务等待多个信 量和队列相关代码。
  • os_stat.c:统计任务相关的代码

 

 

  • 采用uCOSIII主函数逻辑:
    • 单任务系统:
      • 关闭所有中断,防止影响系统启动,通常为调用BSP内的文件;
      • 初始化系统:调用OSInit()函数创建2-5个系统任务(见任务管理),成功返回OS_ERR_NONE
      • 用户创建用户任务,调用OSTaskCreate()函数,用户在系统启动前可创建任意数量任务,但最好不要太多;
      • 最后调用OSStart();启动系统;
    • 声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2016年5月7日
下一篇 2016年5月7日

相关推荐