NXP应用随记(二):S32K3xx内存随记

news2024/12/23 7:03:24

目录

1、TCM

1.1、代码放置在ITCM的方式

__attribute__ 的函数属性

__attribute__ 的变量属性

__attribute__ 的类型属性

__attribute__ 的优化控制属性

1.2、DTCM

1.3、TCM的使用注意事项


1、TCM

        CM=Tightly Coupled Memory,是一种高速缓存,据说是被直接集成在CPU芯片中。

        有两种TCM,分别是ITCM(Instruction TCM)和DTCM(Data TCM)。

        ITCM是cortex内核中指令传输总线,DTCM是cortex内核中数据传输总线。是cpu内核同flash及sram之间传输指令数据的通道,指令的取指和执行及数据的读写在性能及管理上存在差异性,因而需要予以区分。

        由于是高速缓存,所以这两块内存区域被当做特殊的用途。比如某些对时间要求非常严格的代码,就可以被放到ITCM中执行。这可以有效地提高运行速度。某些需要频繁存取的数据,也可以放到DTCM中以节省存取时间。

1.1、代码放置在ITCM的方式

        怎么样把代码放到ITCM中?有两种方法。一种是使用gcc特有的“属性标签”,将指定代码赋予“ITCM”属性,此时该代码会被载入ITCM中执行。还有一种方法是直接将.c源文件改成.itcm.c,此时源文件会被直接编译成在ITCM中运行的目标文件。

注意:gcc特有的“属性标签”指__attribute__

        __attribute__ 是 GCC 编译器提供的一种机制,用于给编译器提供关于函数、变量、类型等方面的额外信息,以便于编译器进行更好的优化或产生更符合开发者期望的代码。以下是 __attribute__ 的一些常见用法:

__attribute__ 的函数属性

1、noreturn: 指示函数不会返回,比如在函数内部使用 exit() 或 abort()。

void my_function() __attribute__((noreturn));

2、deprecated: 标记函数为废弃的,提示开发者不再使用这个函数。

void old_function() __attribute__((deprecated));

3、constructor 和 destructor: 指定构造函数和析构函数的执行顺序。

void my_constructor() __attribute__((constructor));
void my_destructor() __attribute__((destructor));

4、packed: 强制按照最小字节对齐方式对齐结构体。

struct __attribute__((packed)) my_packed_struct
 {
    // structure fields
 };

__attribute__ 的变量属性

1、unused: 防止编译器发出未使用变量的警告。

int my_variable __attribute__((unused));

2、aligned: 指定变量的对齐方式。

int my_aligned_variable __attribute__((aligned(16)));

__attribute__ 的类型属性

1、may_alias: 允许通过指针访问对象时,将其视为任何类型。

typedef int my_type __attribute__((may_alias));

__attribute__ 的优化控制属性

1、optimize: 控制特定函数的优化级别。

void my_function() __attribute__((optimize("O2")));

1.2、DTCM

        而DTCM就方便得多了。虽然两个TCM都是可映射的,也就是说,它们的地址并非固定,但是一般会将其分别映射到固定地址。既然已经有了固定地址,那么就可以很轻松地访问了。不过,正如刚才所说的,这两块内存空间都是有特殊用途的,所以不建议直接访问。相比于ITCM来说,DTCM更加重要。因为在这块内存中,存在着一个非常重要的对象——栈。局部变量和函数调用的参数,就是靠栈进行传递的。由于DMA无法访问TCM,所以也就无法访问栈。又由于局部变量是被开辟到栈中,所以DMA也无法对局部变量进行传递。

Cortex-M7内核可以按顺序访问这些内存:

ITCM

DTCM

I-cache

D-cache

        ITCM和DTCM可以通过32位的AHBS接口访问,以引导的ITCM中的指令,例如,不同的Cortex-M7内核、eDMA等,EMAC是另一个可以访问DTCM的主机。

        访问超出在芯片上可用的RAM的SRAM,终止总线周期,在这个芯片中使用的请求总线主存储器类型中的一个适当的响应后面跟着错误。

1.3、TCM的使用注意事项

   在进行读访问之前,必须先对TCM (ITCM和DTCM)和系统RAM进行初始化通过64bit的写入。系统RAM可以使用eDMA和CPU核心进行初始化。ITCM初始化只能由内核使用直接访问或后门访问来执行。DTCM也可以通过使用core的直接和后门访问或eDMA执行32位写操作来初始化。这些写操作是在芯片上电复位后设置初始ECC码字所必需的

        AIPS-Lite外设桥内存映射

        可以通过crossbar交叉开关矩阵从端口访问外设内存映射。下表显示了与外设地址空间相关的三个外设桥区域。

        通过MC_CGM寄存器中的时钟脉冲控制字段禁用功能的模块禁用相关的AIPS_Lite插槽。

        访问未实现或禁用的外设桥地址范围内的任何地址将导致传输错误终止。

                内存操作

                在特殊情况下,必须在后续操作发生之前完成对外设的写入过程。这种情况的包括一下三种:

        退出中断服务程序

        更改模式

        配置功能

在上述这些情况下,必须执行先写后读顺序来实现所需的内存顺序操作。

        写入相关的外围寄存器。

        读寄存器,验证写进程。

        继续执行后续操作。

/*************************************************未完待续*******************************************/

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【EI会议征稿】第三届电力系统与电力工程国际学术会议(PSPE 2024)

第三届电力系统与电力工程国际学术会议(PSPE 2024) 2024 3rd International Conference on Power System and Power Engineering(PSPE 2024) 第三届电力系统与电力工程国际学术会议(PSPE 2024)于2024年3月29-31日在中国三亚隆重召…

开发案例:使用canvas实现图表系列之折线图

一、功能结构 实现一个公共组件的时候,首先分析一下大概的实现结构以及开发思路,方便我们少走弯路,也可以使组件更加容易拓展,维护性更强。然后我会把功能逐个拆开来讲,这样大家才能学习到更详细的内容。下面简单阐述…

C++怎么快速提升实力?

C怎么快速提升实力? 在开始前我有一些资料,是我根据自己从业十年经验,熬夜搞了几个通宵,精心整理了一份「C的资料从专业入门到高级教程工具包」,点个关注,全部无偿共享给大家!!&…

redis-学习笔记(Jedis hash简单命令)

hset & hget 往 hash 里面塞数据和获取数据 示例代码 hmset & hmget 批量插入数据, 获取数据 注意, hmset 里面插入的是一个 Map hmget 的返回值是一个一个 List 列表 (参数仍是变长参数) 示例代码 hexists 判断 hash 中 域值 存不存在 示例代码 hdel 删除指定的域和值…

SpringBoot 引入nacos 【最新 | 可运行】

SpringBoot 引入nacos 首先要了解在 Springboot 中只支持那些 Springboot 的版本(我真的被这个搞死了),可以如下图参考: 下面我们就开始吧 下载 Nacos nacos 下载地址,这里可以选择你要下载的版本,我选择下载了2.2.…

基于Java8构建Docke镜像

基于Java8构建Docke镜像 搜索java8安装包 docker search java8 --no-trunc , --no-trunc展开描述信息 选择拉取 docker pull docker.io/mykro/java8-jre,为了减少磁盘占用,选择jre版本基础镜像 在宿主机创建文件夹iot,并把所需…

【FPGA/verilog -入门学习4】verilog 实现多路脉冲计数

需求: 设计一个脉冲计数器,其功能如下 输入脉冲:4路脉冲信号,分别对每路进行脉冲检测并计数 使能信号:高电平进行计数,低电平清零计数器 计数器:在使能信号高电平期间,对脉冲信号…

Kubernetes版本升级到v1.18.0方法

升级k8s版本才能使用kube-prometheus安装监控 1、查看集群状态 [rootk8s-master k8s-script]# kubectl get nodes NAME STATUS ROLES AGE VERSION k8s-master Ready master 5d22h v1.18.0 k8s-slave1 Ready <none> 4d10h v1.18.0 k…

Tomcat部署Activiti官方 流程设计器【数据库更换为Mysql !!!】

一、官网下载activiti6 解压后结构如下: database&#xff1a; 存放数据库对象相关脚本&#xff0c;包含不同的数据库脚本 libs&#xff1a; 包含activiti开发过程中需要用到的jar包和源码&#xff0c;不建议通过jar包直接引用&#xff0c;建议通过maven进行管理 wars&am…

opencv 十五 红外图像中虹膜的提取

一、算法需求 在医疗检测中&#xff0c;需要使用红外相机拍摄眼睛照片&#xff0c;然后提取出虹膜的区域。在拍摄过程瞳孔需要进行运动&#xff0c;其通常不在正前方&#xff0c;无法形成圆形&#xff0c;不能使用常规的霍夫圆检测进行提取定位。且在在红外图像中&#xff0c;…

数据结构和算法 - 前置扫盲

数据结构和算法 一、前置扫盲 1、数据结构分类 1.1 逻辑结构&#xff1a;线性与非线性 tip&#xff1a;逻辑结构揭示了数据元素之间的逻辑关系。 线性数据结构&#xff1a;元素间存在明确的顺序关系。 数据按照一定顺序排列&#xff0c;其中元素之间存在一个对应关系&#x…

第二百零四回 模拟对话窗口的页面

文章目录 1. 概念介绍2. 思路与方法2.1 实现思路2.2 实现方法 3. 示例代码4. 经验分享5. 内容总结 我们在上一章回中介绍了"修改组件风格的另外一种方法"相关的内容&#xff0c;本章回中将介绍" 如何做一个模拟对话框窗口的页面".闲话休提&#xff0c;让我…

PCL点云处理之判断某一点在三角形的内部、外部、还是边上(二百二十二)

PCL点云处理之判断某一点在三角形的内部、外部、还是边上(二百二十二) 一、算法介绍二、算法实现1.代码2.结果一、算法介绍 点与三角形的位置共有三种: 1 内部 2 外部 3 点刚好在边上 (这个判断还是很有必要的,应用广泛,下面代码复制粘贴即可使用,纯C++实现) 二、算…

模块一——双指针:18.四数之和

文章目录 题目描述算法原理排序双指针 代码实现排序双指针复杂度分析时间复杂度&#xff1a;O(N^3^)空间复杂度&#xff1a;O(log⁡N)或者O(N) 题目描述 题目链接&#xff1a;18.四数之和 算法原理 排序双指针 依次固定⼀个数a &#xff1b;在这个数a 的后⾯区间上&#x…

点云几何 之 计算二维平面某一点到直线的距离(2)

点云几何 之 计算二维平面某一点到直线的距离&#xff08;2&#xff09; 一、算法介绍.二、算法实现1.代码2.结果 总结 一、算法介绍. 计算某一点到直线的距离&#xff0c;这里的直线会用2个点来表示&#xff0c;如果你只有直线上一点和直线的方向向量&#xff0c;应该也可以转…

yo!这里是Linux信号相关介绍

目录​​​​​​​ 前言 基本介绍 概念 信号列表 信号处理 产生(发送)信号 通过按键产生 系统函数产生 软件条件产生 硬件异常产生 阻塞信号 信号状态 sigset_t 状态相关函数 1.sigprocmask 2.sigpending 捕捉信号 内核态与用户态 捕捉过程 sigaction 后…

1.4 Postman的安装

hello大家好&#xff0c;本小节我们来安装一下Postman&#xff0c;好为我们后续的测试工作做准备。 首先&#xff0c;打开Postman的官网Postman API Platform 然后根据同学们自己电脑的操作系统来下载对应的Postman安装包。我这里拿windows来举例。我们点击windows的图标 会跳…

深入解析Freemarker模板引擎及其在Spring Boot中的高级整合

目录 引言1. Freemarker1.1.什么是Freemarker1.2 Freemarker模板组成部分1.3.优点 2. Spring Boot整合Freemarker2.1 配置2.2 数据类型 3. 案例总结 引言 Freemarker作为一款强大的模板引擎&#xff0c;与Spring Boot的整合能够极大地提升Web应用的开发效率和灵活性。本篇博客…

2023 巅峰之作 | AIGC、AGI、GhatGPT、人工智能大语言模型的崛起与挑战

文章目录 01 《ChatGPT 驱动软件开发》内容简介 02 《ChatGPT原理与实战》内容简介 03 《神经网络与深度学习》04 《AIGC重塑教育》内容简介 05 《通用人工智能》目  录 2023年是人工智能大语言模型大爆发的一年&#xff0c;一些概念和英文缩写也在这一年里集中出现&#xff…

你都那么老了,还在每天写博客吗?

关注卢松松&#xff0c;会经常给你分享一些我的经验和观点。 白色便民网&#xff1a;我想多开一个公司会不会被税局查? 事件背景&#xff1a; 松松已创业9年&#xff0c;自媒体14年&#xff0c;经历过从0开公司、项目失败、赚钱等各种高光时刻。所以对于小微企业经营还是…