(学习日记)2024.04.26:UCOSIII第五十节:User文件夹函数概览(uC-CPU文件夹)

写在前面:
由于时间的不足与学习的碎片化,写博客变得有些奢侈。
但是对于记录学习(忘了以后能快速复习)的渴望一天天变得强烈。
既然如此
不如以天为单位,以时间为顺序,仅仅将博客当做一个知识学习的目录,记录笔者认为最通俗、最有帮助的资料,并尽量总结几句话指明本质,以便于日后搜索起来更加容易。


标题的结构如下:“类型”:“知识点”——“简短的解释”
部分内容由于保密协议无法上传。


点击此处进入学习日记的总目录

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架构和特定的应用需求,可以灵活地进行配置。

  1. CPU_WORD_SIZE_08、CPU_WORD_SIZE_16、CPU_WORD_SIZE_32、CPU_WORD_SIZE_64

    • 这些宏定义了CPU的字长,分别表示8位、16位、32位和64位。
    • 在代码中,它们用于配置CPU的字长大小。
  2. CPU_ENDIAN_TYPE_NONE、CPU_ENDIAN_TYPE_BIG、CPU_ENDIAN_TYPE_LITTLE

    • 这些宏定义了CPU的字节序,分别表示无字节序、大端序和小端序。
    • 大端序是指CPU字中的最高有效字节存储在最低地址,而小端序是指最低有效字节存储在最低地址。
    • 在代码中,它们用于配置CPU的字节序。
  3. CPU_STK_GROWTH_NONE、CPU_STK_GROWTH_LO_TO_HI、CPU_STK_GROWTH_HI_TO_LO

    • 这些宏定义了CPU堆栈的增长顺序,即堆栈指针在数据推入堆栈后增加或减少的方向。
    • LO_TO_HI表示堆栈指针递增,而HI_TO_LO表示堆栈指针递减。
    • 在代码中,它们用于配置CPU堆栈的增长方向。
  4. 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:要获取优先级的中断源的位置。
    返回值:中断源的优先级。
  • 功能:获取指定位置的中断源的优先级。
    实现:根据位置选择性地获取系统异常或外部中断的优先级。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/578461.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

docker容器技术篇:集群管理实战mesos+zookeeper+marathon(二)

docker集群管理实战mesoszookeepermarathon(二) 一 实验环境 操作系统:centos7.9 二 基础环境配置以及安装mesos 安装过程请点击下面的链接查看: 容器集群管理实战mesoszookeepermarathon(一) 三 安装…

WPF 资源基础

动态资源/静态资源 UI代码 <Window x:Class"WpfApp1.MainWindow"xmlns"http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x"http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d"http://schemas.microsoft.com/ex…

leetcode_37.解数独

37. 解数独 题目描述&#xff1a;编写一个程序&#xff0c;通过填充空格来解决数独问题。 数独的解法需 遵循如下规则&#xff1a; 数字 1-9 在每一行只能出现一次。数字 1-9 在每一列只能出现一次。数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。&#xff08;请参考…

我教你如何可翻页电子画册

​电子画册是一种创新的方式&#xff0c;可以将传统的纸质画册转化为数字化的形式&#xff0c;并且具备翻页的功能。它不仅可以提供更好的阅读体验&#xff0c;还可以方便地分享给他人。 1.选择制作工具&#xff1a; 有许多在线平台和软件可以帮助你制作电子画册&#xff0c;比…

海康大华摄像头rtsp在网页中播放

一.项目说明 摄像头视频推流实现 支持rtsp&#xff1b;rtmp; 摄像头在浏览器中播放实现 内包含资源和对于的部署方案 资料中有详细部署资料和对于的api接口&#xff0c;支持二次开发。 二.项目实现效果 三.下载地址 下载地址&#xff1a;http://www.gxcode.top/code

【春 联---turtle海龟画图】

春联 又称"春贴"、"门对"、"对联"&#xff0c;是过年时所贴的红色喜庆元素"年红"中一个种类。它以对仗工整、简洁箱巧的文字描绘美好形象&#xff0c;抒发美好愿 望&#xff0c;是中国特有的文学形式&#xff0c;是华人们过年 的重要习…

pyqt 动态更换表头和数据

目录 pyqt 动态更换表头和数据代码 效果图&#xff1a; pyqt 动态更换表头和数据代码 from PyQt5.QtGui import QColor, QBrush from PyQt5.QtWidgets import QApplication, QTableWidget, QVBoxLayout, QWidget, QPushButton, QTableWidgetItemclass Example(QWidget):def _…

C语言项目实战——扫雷

目录 1.前言 2.完整流程 2.1规划书 2.2代码部分 2.2.1文件的结构设计 2.2.2变量的创建 2.2.3菜单的基本实现 2.2.4初始化期棋盘 2.2.5输出完整棋盘 2.2.6埋雷的实现 2.2.7查询周围雷的数量 2.2.8扫雷的实现 2.2.9完整代码 3.总结 1.前言 哈喽大家好吖&#xff0c;今…

实力认可!盘古信息荣获软件行业五项殊荣,以IMS驱动新质生产力发展

4月24日&#xff0c;第三届中国软件行业协会发展大会在北京盛大召开&#xff0c;众多软件领域的佼佼者齐聚一堂。盘古信息&#xff0c;凭借其卓越的技术实力和创新成果&#xff0c;在这场盛会上荣获“2023年软件行业领军人物”、“2023年软件行业平台软件领军企业”、“2023年软…

线程池嵌套导致的死锁问题

1、背景 有一个报告功能&#xff0c;报告需要生成1个word&#xff0c;6个excel附件&#xff0c;总共7个文件&#xff0c;需要记录报告生成进度&#xff0c;进度字段jd初始化是0&#xff0c;每个文件生成成功进度加1&#xff0c;生成失败就把生成状态置为失败。 更新进度语句&…

Unity打包PC端exe,压缩打包为一个exe文件

目录 一.打包成功 1.打包输出文件 二.压缩输出目录为exe单个文件 1.添加到压缩文件 2.其他设置 1.点击“高级→自压缩选项” 2.修改解压后运行程序 3.设置模式 4.更新 三、生成.exe 一.打包成功 1.打包输出文件 1、一个后缀为 BurstDebugInformation_DoNotShip的文…

ios不兼容Svg Wave的动画的解决方法

近日也是用上了SvgWave&#xff0c;十分的好看 Svg Wave - A free & beautiful gradient SVG wave Generator. 大家感兴趣的也可以了解一下 【场景】 使用SvgWave的Animate&#xff0c;并生成svg代码使用&#xff0c;windows web端、朋友的安卓移动端都能够正常执行动画…

typescript常用方法整理

基础用法 接口简单用法 函数表达式用法 // 函数类型用于表达式函数 // 接收两个参数name和age //函数返回字符串 interface fun {(name: string, age: number): string } let getData: fun getData function (name, age) {console.log(我的姓名是${name},年龄是${age})return…

SSL证书安装失败怎么办?

在互联网时代&#xff0c;SSL&#xff08;Secure Sockets Layer&#xff09;证书已成为保障网站数据传输安全、提升用户信任度的重要工具。然而&#xff0c;在实际操作过程中&#xff0c;SSL证书的安装并非总能一帆风顺&#xff0c;有时会遇到各种导致安装失败的问题。本文将详…

基于KubeAdm搭建多节点K8S集群

环境准备 说明配置系统CentOS 7.x系列CPU4核及以上内存8G及以上机器数量最少两台&#xff08;一主节点一工作节点&#xff09; 安装docker&#xff08;主节点工作节点&#xff09; 先安装yml yum install -y yum-utils device-mapper-persistent-data lvm2设置阿里云镜像 …

工厂物流3d可视化设计有哪些特点及功能亮点

工厂物流3D可视化设计是一种基于三维模型的物流可视化技术&#xff0c;主要用于展示工厂内部的物流运作情况&#xff0c;具有以下特点和功能亮点&#xff1a; 1. 三维模型展示&#xff1a; 工厂物流3D可视化设计通过三维模型展示工厂内部的物流设施和运作情况&#xff0c;可以…

android studio 编译一直显示Download maven-metadata.xml

今天打开之前的项目的时候遇到这个问题:android studio 编译一直显示Download maven-metadata.xml, AI 查询 报错问题&#xff1a;"android studio 编译一直显示Download maven-metadata.xml" 解释&#xff1a; 这个错误通常表示Android Studio在尝试从Maven仓库…

为什么如果重写了某个类的equals方法,还必须重写对应的hashcode方法?

为什么如果重写了某个类的equals方法&#xff0c;还必须重写对应的hashcode方法&#xff1f; 答&#xff1a; 保证equals相同的两个对象hashcode必须相同的原则。不重写hashcode方法的的话&#xff0c;若用hashmap/hashset等散列表存储这个类&#xff0c;可能会出现两个相同对…

《数字化决策》第三版的启示

目录 一、《数字化决策》读后感 二、《数字化决策》给人的启示 三、思考题 一、《数字化决策》读后感 随着科技的飞速发展&#xff0c;数字化已经成为商业领域的核心力量。在这样的背景下&#xff0c;《数字化决策》第三版为我们提供了宝贵的认知提升&#xff0c;帮助我们更…

不同路径 1 2

class Solution {public int uniquePaths(int m, int n) {int[][] dpnew int[m][n];//记录到每个格子有多少种路径for(int i0;i<m;i) dp[i][0]1;for(int j0;j<n;j) dp[0][j]1;//初始化for(int i1;i<m;i){for(int j1;j<n;j){dp[i][j]dp[i-1][j]dp[i][j-1];}}return …