liuyang21168 发表于 2024-1-3 22:22:39

RAM真的被清零了

我的电路板使用STC15W4K48S4单片机,发现软件复位启动后,data和idata区间的256个字节
被清零了。我的程序里没有清零指令,我把startup.a51的清零指令也删除了,但是软件复位的
时候还是被清零了。实在没办法,我把重要的参数放在pdata区间了,解决了软件复位导致
重要参数被清零的问题。
可能是STC15W4K48S4-PDIP40是早期型号,此单片机有硬件清零功能。

乘风飞扬 发表于 2024-1-4 09:36:39

就算不添加startup文件,编译器也会自动生成一段启动时清除data区域的程序。
不希望被清除的参数建议放到xdata区域。pdata是xdata的低256字节,但是访问pdata的指令执行速度比访问xdata慢,所以推荐使用xdata来声明变量。

liuyang21168 发表于 2024-1-4 21:21:19

{:4_269:}明白,有没有办法找到编译器生成的清零代码,或者通过给编译器设置参数
让编译器不产生清零代码,或者其他什么办法?

cdpzq 发表于 2024-1-4 23:32:09

试试看编译后的汇编,如果能找到位置,看能不能跳过这段.

wangxiangtan 发表于 2024-1-5 08:18:03

涨知识了,还会清零啊

QQ624353765 发表于 2024-1-5 09:15:26

乘风飞扬 发表于 2024-1-4 09:36
就算不添加startup文件,编译器也会自动生成一段启动时清除data区域的程序。
不希望被清除的参数建议放到xd ...

你是如何得出pdata比xdata慢的,pdata地址只有1字节,xdata要两字节,就从取地址考虑速度都要快一倍,如果xdata比pdata快的话也就没必要从xdata中分离出256字节内存

乘风飞扬 发表于 2024-1-5 13:36:27

QQ624353765 发表于 2024-1-5 09:15
你是如何得出pdata比xdata慢的,pdata地址只有1字节,xdata要两字节,就从取地址考虑速度都要快一倍,如 ...

访问pdata比访问xdata速度慢,是因为访问pdata使用 MOVXA,@Ri / MOVX@Ri,A 指令。
这个指令执行速度比访问xdata的 MOVXA,@DPTR / MOVX@DPTR,A 慢。



指令执行时钟数:


页: [1]
查看完整版本: RAM真的被清零了