1,用户功能任务代码: main 函数 在此。应用程序起始处。每个任务主循环是独立的,看起来每个任务都在同时运行。在app.c中新建各个任务. 文件位于APP组中
2,外设库:各个CPU厂商对外设操作 函数的库封装. 文件位于FWLIB组中
3,板级初始化:对电路板的MCU的各个功能的初始化 和操作。初始化外设。 文件位于BSP组中
4, MCU无关的 OS 操作系统代码: 文件位于BSP组中 UCOS III / SOURCE 。 用户基本不需要关心
5,与移植到特定MCU有关 文件位于BSP组中 UCOS III / PORT中
如 OS_CPU_PendSVHandler 和 OS_CPU_SysTickHandler
6,Micrium 封装的CPU相关的功能。不同内核的CPU 选用不同的 内核文件 。可以去官网找。用户不需要关心。
文件位于BSP组中 UCOS III / CPU中
7,通用功能的函数库。确保应用和编译器的可移植性,uC/CPU 中有使用。 文件位于BSP组中 UCOS III / LIB中
8,uCOS 各项功能的配置 文件位于APP组中
下面对各个文件的功能 进行介绍
APP组:
app.c : main 函数入口。各个任务,信号量等的创建,用户代码基本在此。
app_cfg.h:应用 任务优先级的配置 ,堆栈界限 等配置的宏定义
cpu_cfg.h :是否开启设置CPU_Name功能,是否开启CPU的时间戳功能,是否测量中断关闭时间、是否有CLZ指令的汇编实现
os_app_hooks.c :用户对OS调用的所有的钩子函数的实现,并且需要在OSInit()调用后设置对应的钩子函数(OSInit()将钩子函数的指针清空)。
os_app_hooks.h :钩子函数的申明
os_cfg.h :配置OS中使用的模块和特性。对系统的裁剪 ,就是 使能 对应模块。
os_cfg_app.h :应用参数配置(例如:message pool大小,中断使用的堆栈大小,Idle任务堆栈大小,处理中断任务堆栈和队列大小,统计任务优先级、频率、堆栈大小,SysTick频率、任务优先级、堆栈大小、Spoke,软件定时器任务优先级、频率、堆栈大小、Spoke)。
uC/CPU组:
cpu_core.c :CPU相关初始化(时间戳,测量中断时间,CPUName),模拟CLZ(count leading zeros)指令,测量中断关闭时间方法等。
cpu_core.h :cpu_core.c的函数、变量声明。
cpu_def.h :CPU模块使用的各种#define(大端小端字节序、堆栈的增长方向、Critical Section处理)
以上三个问题 ARM内核基本一致
cpu.h :CPU模块使用的类型定义、具体大端小端字节序、具体堆栈增长方向、具体Critical Section处理方法(CPU_CRITICAL_METHOD_STATUS_LOCAL,进入时需要在所所有的变量后面添加CPU_SR_ALLOC();)。
cpu_a.asm :汇编方法实现(CPU_IntDis、CPU_IntEn、CPU_SR_Save、CPU_SR_Restore、CPU_WaitForInt、CPU_WaitForInt、CPU_CntLeadZeros、CPU_CntTrailZeros)。
cpu_c.c :针对特定CPU结构写的C函数(BitBand、中断相关的操作)(在系统中没有用到...)。
cpu_cfg.h :是否开启设置CPU_Name功能,是否开启CPU的时间戳功能,是否测量中断关闭时间、是否有CLZ指令的汇编实现
uC/OS Port:
os_cpu.h :OS_TASK_SW()、OSIntCtxSw()宏声明、OSStartHighRdy()等方法声明。
os_cpu_a.asm :PendSV_Handler()、OSStartHighRdy()的汇编实现。
os_cpu_c.c :移植需要的:系统调用的钩子函数、创建任务时对堆栈格式的初始化,SysTick的初始化和中断处理。
uC/OS III Source组:
os_var.c :OS全局变量(无内容)。
os_dbg.c :Debugger用到的常量。
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.h :OS的主要头文件(常量、宏、全局变量、方法原型等)。
os_core.c :OS的核心函数(例如:OSInit()初始化uC , OSSched()任务级别调度 , OSIntExit() 中断级别调度,pend,post,Pend List,Ready 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.c :flag相关代码。
os_int.c :中断Deferred Post相关代码(当OS_CFG_ISR_POST_DEFERRED_EN == 1 (os_cfg.h))。
os_pend_multi.c :任务等待多个信号量和队列相关代码。
os_stat.c :统计任务相关的代码。
Timestamp:使用DWT_CYCCNT,为系统时间戳(系统周期计数(clock cycles),与CPU的时钟频率相同)。
SysTick:使用SysTick timer,为系统延时(OSTimeDly())、定时(timeout)等提供服务。
uC/OS III PORT组:
os_cpu.h 系统 和CPU 相关联的函数申明
os_cpu_a.a 汇编文件
实现 OS_CPU_PendSVHandler 中断函数,实现 OSStartHighRdy 等函数
os_cpu_c.c C文件
实现 OS_CPU_SysTickInit 等函数