ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

UCOSIII总结(2)——源码架构

2021-05-19 13:31:02  阅读:306  来源: 互联网

标签:UCOSIII 架构 函数 os 代码 源码 III OS CPU


准确理解µC/OS-III的源码,对顺利移植OS、建立应用程序非常有帮助。下面将介绍µC/OS-III源码的架构:

ucosiii源码架构示意框图

从图中可以看出,与ucOS密切相关的硬件是CPU、定时器和中断控制器,当然,MCU还有其他的外设,在BSP中要用到,只是这里没有列出。

除去硬件,整个µC/OS-III源码架构包含9个模块,下面分别予以介绍:

应用层模块

应用程序代码由项目文件组成。为了方便,这里简单统称为app.c和app.h,事实上应用层可以包含任意数量的文件,而不仅仅只有app.*。 主应用程序代码含有main()函数。

与内核无关的CPU文件

半导体厂商通常以源代码形式提供库函数,以访问其CPU或MCU上的外设。这些库非常有用,可以提高效率,节省宝贵时间。由于这些文件没有统一的命名规范,因此这里设为为* .c和* .h。

BSP模块

µC / OS-III所需的板级支持软件包(BSP)代码通常比较简单。µC / OS-III一般仅要求初始化用于延时和超时的周期性中断源(OS用定时器),将此功能放置在bsp_os.c源文件中,其对应头文件bsp_os.h。

  • bsp_os.c:初始化延时和超时的周期性中断源。

与CPU无关的OS内核模块

这部分代码可以不做任何修改移植到所支持的CPU上,内容包括:

  • os_cfg_app.c:系统任务的配置
  • os_type.h:内核对象的数据类型定义
  • os_core.c:ucos3相对比较底层的函数,供其它内核对象函数调用;包含ucos的核心功能,例如初始化uc-osiii的OSInit(),用于任务级调度器的OSSched(),用于中断级调度器的OSIntExit(),挂起列表管理(pend list),就绪列表管理(ready list),等等。
  • os_dbg.c:内核识别的调试器或probe使用的常数标量声明。
  • os_flag.c:事件标志管理的代码。
  • os_mem.c:µC / OS-III固定大小内存管理器的代码,内存分区代码。
  • os_msg.c:用于处理消息的代码。 µC / OS-III提供消息队列和针对任务的消息队列。 os_msg.c为这两个服务提供通用代码。
  • os_mutex.c:管理互斥信号量的代码。
  • os_prio.c:包含用于管理位图表(bitmap table)的代码,该位图表用于跟踪哪些任务已准备好运行,请参阅“就绪列表”。 如果使用的CPU提供位清除、置1和测试指令以及计数前导零指令,则可以用汇编   源文件等效替代该文件,以提高性能。
  • os_q.c:包含用于管理消息队列的代码。
  • os_sem.c:用于资源管理和同步的信号量代码。
  • os_stat.c:包含统计任务的代码,用来计算全局CPU使用率以及每个任务的CPU使用率。
  • os_task.c:包含任务管理的代码,使用OSTaskCreate(),OSTaskDel(),OSTaskChangePrio()等函数实现。
  • os_tick.c:用于管理自身主动延迟或在内核对象上被超时挂起的任务。
  • os_time.c:时间管理代码,允许任务将自身延迟到某个截止时间。
  • os_tmr.c:管理软件定时器的代码。
  • os_var.c:包含µC / OS-III全局变量。这些变量由内核管理,应用程序不能访问。
  • os.h:µC / OS-III主头文件,该文件声明常量、宏、µC / OS-III全局变量(仅由µC / OS-III使用)、函数原型等。

与CPU相关的OS内核模块

这是适用于特定CPU架构的µC / OS-III代码,称为端口(Ports)。

  • os_cpu.h:CPU相关配置、下面两个文件中函数的声明;
  • os_cpu_a.asm:CPU相关的汇编函数声明及定义,比如关中断、前导零指令的调用,OSCtxSw(), OSIntCtxSw()OSStartHighRdy()
  • os_cpu_c.c:CPU相关的C语言函数定义及声明,C语言计算前导零个数等。

与特定CPU相关的模块uC/CPU

Micrium封装了CPU的功能,这些文件定义了用于禁用和使能中断的函数,以及独立于所用CPU和编译器的CPU_???命名的数据类型,另外还有一些其他功能。

  • cpu_core.c:包含所有CPU架构通用的C代码。具体来说,该文件包含了函数用于测量宏CPU_CRITICAL_ENTER()和CPU_CRITICAL_EXIT()之间的中断禁用时间,一个在CPU不提供指令的情况下模拟计数前导零指令的函数以及一些其他函数。
  • cpu_core.h:包含cpu_core.c的函数原型,以及分配用来测量中断禁用时间的变量。
  • cpu_def.h:包含µC / CPU模块使用的各种各样#define常量。
  • cpu.h:包含用于使OS内核和其他模块独立于CPU和编译器字长的类型定义。头文件中将找到CPU_INT16U,CPU_INT32U,CPU_FP32和许多其他数据类型的声明。该文件还规定CPU是大端还是小端模式,定义OS模块使用的CPU_STK数据类型,定义宏CPU_CRITICAL_ENTER()和CPU_CRITICAL_EXIT(),并包含特定于CPU架构的函数原型,以及其他。
  •  cpu_a.asm:包含汇编函数,以实现禁用和启用CPU中断,计数前导零(如果CPU支持该指令)和仅能用汇编语言编写的其他特定于CPU的函数代码。该文件可能还包含用于启用缓存,设置MPU和MMU等的代码。该文件中提供的函数可用C语言调用访问。
  • cpu_c.c:包含基于特定CPU架构的C语言函数,出于可移植性而用C编写。一般如果可以使用C编写函数,则应该使用,除非使用汇编语言编写可以显着提高性能。

uC库文件

µC/LIB包含一系列源文件,它们提供一些常用功能,例如内存复制,字符串和与ASCII相关的函数,可以使用库中的函数替换编译器提供的stdlib标准库函数。提供这些库文件是为了确保它们可以在应用程序之间(尤其是在编译器之间)完全可移植。µC / OS-II内核不使用这些文件,但µC / CPU使用。

编译器相关模块

这是一个可选模块,大部分情况下应该用不到。一些编译器提供了线程本地存储(TLS)的扩展,这些扩展提供了一个可变区域,线程可以在其中存储状态以使多线程环境更安全。这些功能的调整在uCOS-III \ TLS \ <tool>文件夹下的os_tls.c文件中执行,其中<tool>是工具制造商的名称或工具名称。

配置头文件

配置文件在OS源码中分散在各个模块的Cfg文件夹中。配置文件的内容:

  • os_cfg.h:用来定义要包含在应用程序中的µC / OS-III功能;
  • os_cfg_app.h:指定µC / OS-III所需的某些变量和数据结构的大小,例如空闲任务堆栈大小、滴答时钟速率、消息池的大小等;
  • cpu_cfg.h:配置应用程序可用的µC / CPU功能;
  • lib_cfg.h:配置µC / LIB的可选项。

通过改变这些配置文件里的宏值,可以方便地裁剪OS的功能。

 

标签:UCOSIII,架构,函数,os,代码,源码,III,OS,CPU
来源: https://blog.csdn.net/tuxinbang1989/article/details/117021672

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有