存储空间操作

最近一段时间,写了个验证芯片稳定性的程序,大致功能就是把芯片所有的寄存器、可以用RAM,在芯片上电时,进行初始化。之后,在主循环里面不断的读取寄存器数据。并做电磁兼容性实验,观察寄存器、RAM存储的数据有没有变化。寄存器操作选用了最笨最直接的方法,直接对着芯片手册,看寄存器列表,把所有有意义的位,都设置为与默认值相反的数据。但实际操作过程中,发现有些数据没有写成功,下面就对这些进行说明。

1.只读只写寄存器

首先,来看一张寄存器内容截图。

从这里可以看到端口设置寄存器、端口复位寄存器、端口翻转寄存器,属于只写寄存器,无法进行读操作,或者读寄存器时,返回内容恒为0。其次,端口数据(PTDAT)寄存器,该寄存器的数值,取决于引脚类型,所以直接想当然的写0xFFFF,寄存器的内容不一定是该数值。PTDAT寄存器数据的操作遵循如下规则。
1)芯片引脚选择 GPIO 功能或复用数字功能
若方向寄存器配置为输出,PTDAT 读取值为寄存器设置值,不随外部 PIN 脚电平变化而变化;
若方向寄存器配置为输入,PTDAT 读取值为 pad 状态值,反映外部 PIN 脚电平变化;
2)芯片引脚选择复用模拟功能,PTDAT 相应 bit 位值,固定为 0

2.状态寄存器

外部中断标志寄存器,即使没有使能中断,但中断触发条件达到,中断标志位依然会置位。所以,中断标志寄存器不能作为芯片是否稳定的判断条件。

3.发送数据寄存器

串口数据缓冲寄存器(SBUF),写数据后,串口发送完成,SBUF寄存器数据清零,不能作为判断依据。

4.有条件读写寄存器

以RTC指示寄存器为例,读取和设置都需要先配置其他寄存器,且最好按照SECR、MINR、HOURR、DAYR、MONTHR、YEARR、WEER。

此外,寄存器的数值可能也有限制,以SECR寄存器为例,只能写入0-59范围内的数据。

有些寄存器写入前,需要关闭写保护,否则写入操作无效。

部分寄存器的读写还需要先使能相应模块,否则模块配置无法起作用。

5.RAM操作

RAM操作要先确定RAM空间大小,排除不可用部分。查看程序的.map文件,发现栈和静态变量占据了一部分,排除这部分空间,就是可以用的空间。针对这部分的空间操作,我才用直接地址读写,这算是一种笨方法吧,请留意前面提到的静态变量,它们也都存储在RAM里面。用户可以通过操作静态变量数组,进行RAM空间操作。

留一个小陷阱,那就是RAM可用空间的计算,懂得都懂。

相关推荐
赋能大师兄5 小时前
单片机/嵌入式修行之路
单片机·嵌入式
大聪明-PLUS12 小时前
Linux 中的 CPU。文章 1. 利用率
linux·嵌入式·arm·smarc
飞凌嵌入式21 小时前
【玩转多核异构】T153核心板RISC-V核的实时性应用解析
linux·嵌入式硬件·嵌入式·risc-v
DIY机器人工房1 天前
嵌入式面试题:物联网协议怎么选?Zigbee/蓝牙/LoRa/4G/WiFi优缺点一文读懂
stm32·嵌入式硬件·嵌入式·diy机器人工房·嵌入式面试题
wzyannn1 天前
Linux字符设备驱动开发详细教程(简单字符设备驱动框架)
linux·运维·驱动开发·嵌入式
大聪明-PLUS2 天前
Rsync:管理员详细指南 第2部分
linux·嵌入式·arm·smarc
DIY机器人工房2 天前
科普:华为星闪是什么?华为星闪(英文名 NearLink)是国际星闪无线短距通信联盟发布的新型无线短距通信标准技术。
stm32·嵌入式硬件·华为·嵌入式·diy机器人工房·嵌入式面试题
大聪明-PLUS3 天前
如何使用 Docker 打包一个简单的应用程序:简易指南
linux·嵌入式·arm·smarc
大聪明-PLUS3 天前
Docker 的底层工作原理
linux·嵌入式·arm·smarc
阿源-4 天前
x86 架构的简单介绍
嵌入式·x86·固件