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

目录

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插槽。

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

                内存操作

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

        退出中断服务程序

        更改模式

        配置功能

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

        写入相关的外围寄存器。

        读寄存器,验证写进程。

        继续执行后续操作。

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

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

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

相关文章

[HTML]Web前端开发技术2(HTML5、CSS3、JavaScript )格式化文本标记,定义列表,<blockquote>,definition description,ruby——喵喵画网页

希望你开心,希望你健康,希望你幸福,希望你点赞! 最后的最后,关注喵,关注喵,关注喵,大大会看到更多有趣的博客哦!!! 喵喵喵,你对我真的…

深圳移动与大富科技助力深圳人工智能教育高质量发展

12月12日,中国移动通信集团广东有限公司深圳分公司(以下简称“深圳移动”) 与大富科技(安徽)股份有限公司(以下简称“大富科技”)在中国移动深圳信息大厦签署“战略合作框架协议”,共同推进人工智能教育、I…

CanEasy多场景应用,让汽车总线测试更简单

来源:虹科汽车电子 虹科分享 | CanEasy多场景应用,让汽车总线测试更简单 原文链接:https://mp.weixin.qq.com/s/ojic4xfVTLbxXcKlJMGQZw 欢迎关注虹科,为您提供最新资讯! 导读 CanEasy是一个基于Windows的总线工具&…

Linux 高级管理,安装MySQL数据库

1.准备工作 (1)为了避免发生端口冲突,程序冲突等现象,建议先查询MySQL软件的安装情况,确认没有 使用以RPM方式安装的mysql-server、mysql软件包,否则建议将其卸载。 [rootnode01 ~]# rpm -q mysql-server…

安全算法(一):安全技术、加密的基础知识、哈希函数的简单介绍

安全算法(一):安全技术、加密的基础知识、哈希函数的简单介绍 通过互联网交换数据时,数据要经过各种各样的网络和设备才能传到对方那里。数据在传输过程中有可能会经过某些恶意用户的设备,从而导致内容被盗取。 因此…

智慧储能数字孪生:能源未来的智慧引擎

随着社会对清洁能源的需求不断增加,智能储能技术成为能源转型的关键驱动力。在这一领域中,数字孪生技术的应用为智慧储能带来了全新的可能性。数字孪生是指数字化、实时、可视化的模拟系统,通过复制现实世界中的对象或过程,为智能…

nestjs守卫校验jwt

目标 部分接口需要用户登录后才可以访问,用户登录后可以颁发 jwt_token 给前端,前端在调用需要鉴权的接口,需要在请求头添加 jwt_token,后端校验通过才能继续访问,否则返回403无权访问 创建守卫 anth 安装依赖 npm…

数据库设计规范编制文档

本文的目的是提出针对Oracle数据库的设计规范,使利用Oracle数据库进行设计开发的系统严格遵守本规范的相关约定,建立统一规范、稳定、优化的数据模型。 参照以下原则进行数据库设计: 1) 方便业务功能实现、业务功能扩展; 2) 方便设…

OpenTiny Vue 组件库3.12.0 发布:文档大优化!增加水印和二维码两个新组件

非常高兴跟大家宣布,2023年11月30日,OpenTiny Vue 发布了 v3.12.0 🎉。 OpenTiny 每次大版本发布,都会给大家带来一些实用的新特性,10.24 我们发布了 v3.11.0 版本,增加了富文本、ColorPicker 等4个新组件…

Linux中的权限问题【详解】

shell命令以及运行原理 Windows以图形化界面为主要交互方式,简单高效,易于日常使用。Linux以命令行界面为主要交互方式,操作相较windows,mac来说比较困难一些,但linux也有向着图形化界面努力的桌面系统,例…

庙算兵棋推演平台配置

9月23开始,9月26完成。因为那时刚从大连回来,十一之后又一个紧急项目当项目负责人,所以隔了这么久才发出来。 我尝试进行制作平台AI,想在我的小平板上配好,最好还可以移植。于是我采用WSL(windows自带的do…

AWS-CDN只能备用域名访问-使用Lambda@Edge(禁止分配的域名访问)

场景:cdn使用备用域名后,希望用户只能从备用域名访问,而不是自动分配的cdn域名,这也将是一个安全漏洞,被扫描到cdn域名访问刷流量等! 【建议部署前查看】参考链接: 1.官方cdn返回示例 2.lambdae…

机器人纯阻抗控制接触刚性环境(阻尼影响因素)

问题描述 在机器人学中,阻抗控制是一种常用的控制策略,用于管理机器人在与环境交互时的运动和力。阻抗控制背后的关键概念是将环境视为导纳,而将机器人视为阻抗。 纯阻抗控制接触刚性环境时,机器人的行为方式主要受其阻抗参数的…

统信UOS使用4种方法重置用户密码

原文链接:统信UOS使用4种方法重置用户密码 hello,大家好啊,今天我要给大家介绍的是在统信UOS操作系统上使用4种不同方法来重置用户密码。我们都知道,在日常使用中,偶尔会忘记密码,尤其是在使用多个账户的情…

Leetcode—222.完全二叉树的节点个数【简单】

2023每日刷题(五十八) Leetcode—222.完全二叉树的节点个数 实现代码 /*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode() : val(0), left(nullptr), right(null…

进程调度的题解

目录 原题大意: 题目描述: 输入格式: 输出格式: 样例输入: 样例输出: 数据规模: 题目大意: 主要思路: dp的转移: dp初始化: 代码&…

【人工智能】人工智能中的Agent:法律虚拟助手简单示例

人工智能中的Agent:法律虚拟助手简单示例 随着人工智能技术的发展,Agent(代理)的概念在这个领域中变得愈发重要。在人工智能的应用中,Agent可以是一个系统、软件或机器人,能够执行特定的任务,理…

静态HTTP应用在社交媒体推广中的作用

在社交媒体日益盛行的今天,静态HTTP应用以其独特的特点,成为了社交媒体推广的一大利器。下面,我们就来聊聊静态HTTP应用在社交媒体推广中的作用。 一、快速响应,提升用户体验 静态HTTP应用以其快速响应的特点,为用户…

二叉树(接口函数的实现)

今天继续来分享的是二叉树,我们废话不多说,直接来看下面的几个接口函数,然后我们把他们实现,我们就掌握二叉树的二分之一(今天粉丝破千了,属实有点高兴了)。 typedef char BTDataType;typedef s…

Epicypher—CUTANA™ ChIC/CUTRUN Kit

核酸酶靶向切割和释放 (CUT&RUN)技术是由Steven henikoff博士团队开发的一种染色质图谱分析方法,基于Ulrich Laemmli博士的染色质免疫切割技术 (ChIC),融合蛋白A与微球菌核酸酶 (pA-MNase),选择性原位切割与抗体结合的染色质。在CUT&…