写在前面:
由于时间的不足与学习的碎片化,写博客变得有些奢侈。
但是对于记录学习(忘了以后能快速复习)的渴望一天天变得强烈。
既然如此
不如以天为单位,以时间为顺序,仅仅将博客当做一个知识学习的目录,记录笔者认为最通俗、最有帮助的资料,并尽量总结几句话指明本质,以便于日后搜索起来更加容易。
标题的结构如下:“类型”:“知识点”——“简短的解释”
部分内容由于保密协议无法上传。
点击此处进入学习日记的总目录
UCOSIII第五十节:User文件夹函数概览(uC-CPU文件夹)
- 六十四、UCOSIII:User文件夹函数概览(uC-CPU文件夹)
- 3、uC-CPU文件夹
- cpu_core.c文件
- LOCAL DEFINES
- LOCAL CONSTANTS
- LOCAL DATA TYPES
- LOCAL TABLES
- CPU COUNT LEAD ZEROs LOOKUP TABLE
- LOCAL GLOBAL VARIABLES
- LOCAL FUNCTION PROTOTYPES
- LOCAL CONFIGURATION ERRORS
- CPU_Init
- CPU_SW_Exception
- CPU_NameClr
- CPU_NameGet
- CPU_NameSet
- CPU_TS_Get32
- CPU_TS_Get64
- CPU_TS_Update
- CPU_TS_TmrFreqGet
- CPU_TS_TmrFreqSet
- CPU_IntDisMeasMaxCurReset
- CPU_IntDisMeasMaxCurGet
- CPU_IntDisMeasMaxGet
- CPU_IntDisMeasStart
- CPU_IntDisMeasStop
- CPU_CntLeadZeros
- CPU_CntTrailZeros
- CPU_CntTrailZeros08
- CPU_CntTrailZeros16
- CPU_CntTrailZeros32
- CPU_CntTrailZeros64
- CPU_TS_Init
- CPU_IntDisMeasInit
- CPU_IntDisMeasMaxCalc
- cpu_core.h文件
- cpu_def.h文件
- ARM-Cortex-M3->RealView文件夹
- cpu.h文件
- cpu_a.asm文件
- cpu_c.c文件
- CPU_BitBandClr
- CPU_BitBandSet
- CPU_IntSrcDis
- CPU_IntSrcEn
- CPU_IntSrcPendClr
- CPU_IntSrcPrioSet
- CPU_IntSrcPrioGet
六十四、UCOSIII:User文件夹函数概览(uC-CPU文件夹)
3、uC-CPU文件夹
这些文件的作用在于提供对底层硬件的支持和抽象,使得 UC/OS-III 内核能够在不同的处理器平台上运行,并且能够与特定的硬件架构进行交互。
cpu_core.c文件
这段代码是针对一个CPU模块的初始化和功能实现的一些函数。
LOCAL DEFINES
这部分应该包含一些局部宏定义,用于在本文件中使用的特定值。
LOCAL CONSTANTS
这个部分应该包含一些局部常量的定义。
LOCAL DATA TYPES
这个部分应该包含一些局部数据类型的定义,例如结构体或枚举。
LOCAL TABLES
这部分可能包含一些局部表格的定义,例如查找表格或数据表格。
CPU COUNT LEAD ZEROs LOOKUP TABLE
这个部分定义了一个查找表格,用于计算8位值的前导零数。
LOCAL GLOBAL VARIABLES
这个部分定义了一些局部的全局变量。
LOCAL FUNCTION PROTOTYPES
这个部分定义了一些局部函数的原型,这些函数在后面的代码中实现。
LOCAL CONFIGURATION ERRORS
这个部分可能包含一些本地配置错误的定义或注释。
CPU_Init
- 功能:初始化CPU。它根据配置选项是否启用了时间戳和中断禁用时间测量来执行不同的初始化操作。
- 形参:没有形参。
调用者:应用程序。 - 注意事项:
如果CPU配置中启用了时间戳或中断禁用时间测量,就会调用相应的初始化函数。
CPU_SW_Exception
- 功能:捕获不可恢复的软件异常。
- 形参:没有形参。
- 调用者:各种。
- 注意事项:
这个函数将导致当前代码的执行停止,直到系统被重启。
CPU_NameClr
- 功能:清除CPU名称。
- 形参:没有形参。
- 调用者:CPU_NameInit()、应用程序。
- 注意事项:
这个函数是一个CPU模块的API函数,可能被应用程序调用。
它清除了CPU名称的全局变量。
CPU_NameGet
- 功能:获取CPU主机名。
- 形参:p_name是一个指向ASCII字符数组的指针,用于接收返回的CPU主机名ASCII字符串;p_err是一个指向返回错误代码的变量的指针。
调用者:应用程序。
注意事项:
p_name必须指向足够大的内存,以容纳CPU主机名ASCII字符串。
CPU_NameSet
- 功能:设置CPU主机名。
- 形参:p_name是一个指向要设置的CPU主机名的指针;p_err是一个指向返回错误代码的变量的指针。
调用者:应用程序。
注意事项:
p_name必须指向合法的ASCII字符串,并且其长度不能超过CPU_CFG_NAME_SIZE。
CPU_TS_Get32
- 功能:获取32位时间戳。
- 形参:没有形参。
返回值:返回一个32位时间戳。
注意事项:
如果CPU的时间戳大小大于或等于32位,则直接读取时间戳并返回。
如果CPU的时间戳大小小于32位,则需要通过累加计算得到32位时间戳。
CPU_TS_Get64
- 功能:获取64位时间戳。
- 形参:没有形参。
返回值:返回一个64位时间戳。
注意事项:
如果CPU的时间戳大小大于或等于64位,则直接读取时间戳并返回。
如果CPU的时间戳大小小于64位,则需要通过累加计算得到64位时间戳。
CPU_TS_Update
- 功能:更新时间戳。
- 形参:没有形参。
调用者:应用程序。
注意事项:
如果CPU的时间戳大小小于32位或64位,则需要在每次调用此函数时更新时间戳。
CPU_TS_TmrFreqGet
- 功能:获取时间戳定时器频率。
- 形参:p_err是一个指向返回错误代码的变量的指针。
返回值:返回时间戳定时器的频率。
注意事项:
如果时间戳定时器的频率为0,则返回错误代码CPU_ERR_TS_FREQ_INVALID。
CPU_TS_TmrFreqSet
- 功能:设置时间戳定时器的频率。
- 形参:freq_hz是一个32位无符号整数,表示时间戳定时器的频率。
注意事项:
该函数用于设置时间戳定时器的频率。
CPU_IntDisMeasMaxCurReset
- 功能:重置中断禁用时间测量的最大当前计数。
- 形参:没有形参。
返回值:返回重置前的中断禁用时间测量的最大当前计数。
注意事项:
该函数用于重置中断禁用时间测量的最大当前计数,并返回重置前的值。
CPU_IntDisMeasMaxCurGet
- 功能:获取中断禁用时间测量的最大当前计数。
- 形参:没有形参。
返回值:返回中断禁用时间测量的最大当前计数。
注意事项:
该函数用于获取中断禁用时间测量的最大当前计数。
CPU_IntDisMeasMaxGet
- 功能:获取中断禁用期间的最大时间计数。
- 形参:没有形参。
返回值:返回中断禁用期间的最大时间计数。
注意事项:
该函数用于获取中断禁用期间的最大时间计数。
CPU_IntDisMeasStart
- 功能:开始测量中断禁用时间。
- 形参:没有形参。
注意事项:
该函数用于开始测量中断禁用时间,并递增中断禁用计数器。
CPU_IntDisMeasStop
- 功能:停止测量中断禁用时间。
- 形参:没有形参。
注意事项:
该函数用于停止测量中断禁用时间,并计算中断禁用期间的时间。
CPU_CntLeadZeros
- 功能:计算一个值的前导零的数量。
- 形参:val是一个无符号整数,表示要计算前导零的值。
返回值:返回值的前导零的数量。
注意事项:
该函数用于计算一个值的前导零的数量,并根据不同的CPU数据大小进行相应的优化。
CPU_CntTrailZeros
- 功能:计算一个值的尾随零的数量。
- 形参:val是一个无符号整数,表示要计算尾随零的值。
返回值:返回值的尾随零的数量。
注意事项:
如果值为0,则返回所有位都是0的情况。
CPU_CntTrailZeros08
- 功能:计算一个8位值的尾随零的数量。
- 形参:val是一个8位无符号整数,表示要计算尾随零的值。
返回值:返回值的尾随零的数量。
注意事项:
如果值为0,则返回所有位都是0的情况。
CPU_CntTrailZeros16
- 功能:计算一个16位值的尾随零的数量。
- 形参:val是一个16位无符号整数,表示要计算尾随零的值。
返回值:返回值的尾随零的数量。
注意事项:
如果值为0,则返回所有位都是0的情况。
CPU_CntTrailZeros32
- 功能:计算一个32位值的尾随零的数量。
- 形参:val是一个32位无符号整数,表示要计算尾随零的值。
返回值:返回值的尾随零的数量。
注意事项:
如果值为0,则返回所有位都是0的情况。
CPU_CntTrailZeros64
- 功能:计算一个64位值的尾随零的数量。
- 形参:val是一个64位无符号整数,表示要计算尾随零的值。
返回值:返回值的尾随零的数量。
注意事项:
如果值为0,则返回所有位都是0的情况。
CPU_TS_Init
- 功能:初始化CPU的时间戳(如果启用)和时间戳定时器。
- 形参:无。
注意事项:
根据配置情况,可能会初始化不同大小的时间戳。
如果启用了时间戳定时器,则初始化并启动时间戳定时器。
如果时间戳定时器的大小小于CPU字长,则读取时间戳定时器的值并初始化时间戳累加器和前一个时间戳值。
CPU_IntDisMeasInit
- 功能:初始化中断禁止时间测量。
- 形参:无。
注意事项:
初始化中断禁止时间测量的相关变量,例如中断禁止计数器、嵌套计数器等。
计算中断禁止时间测量的开销(overhead),即在禁止中断期间执行多次开始/停止时间测量以计算平均开销。
CPU_IntDisMeasMaxCalc
- 功能:计算最大中断禁止时间。
- 形参:time_tot_cnts表示总的中断禁止时间测量计数。
返回值:返回调整后的最大中断禁止时间。
注意事项:
如果最大中断禁止时间超过了中断禁止时间测量的开销,则将最大中断禁止时间减去中断禁止时间测量的开销,以消除测量开销的影响。
否则,将最大中断禁止时间设置为0。
cpu_core.h文件
用处不大,暂忽略
cpu_def.h文件
这段代码是用于配置CPU字长、字节序、堆栈增长顺序和关键段(Critical Section)方法的宏定义。
这些宏的配置在cpu.h
文件中完成,根据所选择的CPU架构和特定的应用需求,可以灵活地进行配置。
-
CPU_WORD_SIZE_08、CPU_WORD_SIZE_16、CPU_WORD_SIZE_32、CPU_WORD_SIZE_64:
- 这些宏定义了CPU的字长,分别表示8位、16位、32位和64位。
- 在代码中,它们用于配置CPU的字长大小。
-
CPU_ENDIAN_TYPE_NONE、CPU_ENDIAN_TYPE_BIG、CPU_ENDIAN_TYPE_LITTLE:
- 这些宏定义了CPU的字节序,分别表示无字节序、大端序和小端序。
- 大端序是指CPU字中的最高有效字节存储在最低地址,而小端序是指最低有效字节存储在最低地址。
- 在代码中,它们用于配置CPU的字节序。
-
CPU_STK_GROWTH_NONE、CPU_STK_GROWTH_LO_TO_HI、CPU_STK_GROWTH_HI_TO_LO:
- 这些宏定义了CPU堆栈的增长顺序,即堆栈指针在数据推入堆栈后增加或减少的方向。
- LO_TO_HI表示堆栈指针递增,而HI_TO_LO表示堆栈指针递减。
- 在代码中,它们用于配置CPU堆栈的增长方向。
-
CPU_CRITICAL_METHOD_NONE、CPU_CRITICAL_METHOD_INT_DIS_EN、CPU_CRITICAL_METHOD_STATUS_STK、CPU_CRITICAL_METHOD_STATUS_LOCAL:
- 这些宏定义了CPU的关键段方法,即在进入和退出关键段时如何处理中断。
- INT_DIS_EN表示通过禁用/启用中断来进入/退出关键段。
- STATUS_STK表示通过将中断状态推入/弹出堆栈来进入/退出关键段。
- STATUS_LOCAL表示通过将中断状态保存/恢复到本地变量来进入/退出关键段。
- 在代码中,它们用于配置CPU的关键段方法。
ARM-Cortex-M3->RealView文件夹
该文件夹仅适用Cortex-M3,不同处理器内核应该装载不同的接口代码。
cpu.h文件
这个头文件定义了与特定处理器相关的常量、数据类型和函数原型,提供了对底层硬件的抽象接口。
包括了一些通用的处理器操作函数,如启用/禁用中断、延时函数等。
可能还包括了一些与处理器体系结构相关的宏定义和功能函数。
暂不解释
cpu_a.asm文件
这个汇编文件通常包含了与特定处理器相关的汇编代码实现,用于实现一些底层的、对性能要求较高的功能。
具体实现可能包括任务切换、中断处理、时钟节拍的管理等。
这些汇编代码通常是针对特定处理器架构进行优化的,以提高系统的性能和效率。
cpu_c.c文件
这个文件包含了与处理器相关的 C 语言代码实现,用于提供对底层硬件的抽象和支持。
可能包括了一些通用的处理器操作函数的具体实现,如启用/禁用中断、延时函数等。
这些函数的实现通常是针对特定处理器架构进行优化的,以提高系统的性能和效率。
CPU_BitBandClr
- 参数:
addr:要操作的地址。
bit_nbr:要清零的位在32位寄存器中的位置。 - 功能:将指定地址的指定位清零。
实现:根据地址的范围,确定要清零的位在位带区域内的偏移量,并将对应的位带地址加上偏移量,然后将该地址的值设置为0。
CPU_BitBandSet
- 参数:
addr:要操作的地址。
bit_nbr:要设置的位在32位寄存器中的位置。 - 功能:将指定地址的指定位设置为1。
实现:与CPU_BitBandClr函数类似,只是将指定位的值设置为1。
CPU_IntSrcDis
- 参数:
pos:要禁用的中断源的位置。 - 功能:禁用指定位置的中断源。
实现:根据位置选择性地禁用系统异常或外部中断,例如禁用内存管理、总线错误、使用错误和SysTick异常,或禁用外部中断。
CPU_IntSrcEn
- 参数:
pos:要使能的中断源的位置。 - 功能:使能指定位置的中断源。
实现:根据位置选择性地使能系统异常或外部中断,例如使能内存管理、总线错误、使用错误和SysTick异常,或使能外部中断。
CPU_IntSrcPendClr
- 参数:
pos:要清除挂起标志的中断源的位置。 - 功能:清除指定位置的中断源的挂起标志。
实现:根据位置选择性地清除外部中断的挂起标志。
CPU_IntSrcPrioSet
- 参数:
pos:要设置优先级的中断源的位置。
prio:中断源的新优先级。 - 功能:设置指定位置的中断源的优先级。
实现:根据位置选择性地设置系统异常或外部中断的优先级。
CPU_IntSrcPrioGet
- 参数:
pos:要获取优先级的中断源的位置。
返回值:中断源的优先级。 - 功能:获取指定位置的中断源的优先级。
实现:根据位置选择性地获取系统异常或外部中断的优先级。