xxkj2010 发表于 2022-12-19 14:03:02

能通过代码方式查看单片机中ROM使用空间吗(已解决)

本帖最后由 xxkj2010 于 2022-12-21 08:00 编辑

问一个可笑的问题,stc单片机能否通过编程代码来查看单片机中ROM使用空间?

梁工 发表于 2022-12-19 15:10:38

用户自己的程序做统计,是可以的。

xxkj2010 发表于 2022-12-19 19:04:19

梁工 发表于 2022-12-19 15:10
用户自己的程序做统计,是可以的。

如何统计?应该不是查询某个寄存器吧?

梁工 发表于 2022-12-19 23:36:31

xxkj2010 发表于 2022-12-19 19:04
如何统计?应该不是查询某个寄存器吧?

FLASH ROM擦除后全部是0xFF,程序从地址0x0000开始搜索,搜到多个连续的0xff就可以认为程序结束了,这个方法不能100%测量出来,因为有可能会有数据表有多个0xff,可以检测更多的连续FF来判断。

xxkj2010 发表于 2022-12-20 10:38:49

梁工 发表于 2022-12-19 23:36
FLASH ROM擦除后全部是0xFF,程序从地址0x0000开始搜索,搜到多个连续的0xff就可以认为程序结束了,这个 ...

如何读取FLASH ROM?应该不是IAP方式吧?所有的芯片使用手册只有涉及内部EEPROM的寄存器,通过读写这些特殊寄存器就可以方便地读写内部EEPROM,却没有涉及读写FLASH ROM的寄存器(或是我的水平有限,看不出来)。

梁工 发表于 2022-12-20 11:01:52

xxkj2010 发表于 2022-12-20 10:38
如何读取FLASH ROM?应该不是IAP方式吧?所有的芯片使用手册只有涉及内部EEPROM的寄存器,通过读写这些特 ...

如何读取FLASH ROM?
汇编:MOVC指令。
C语言:code指针,unsigned char code *pc;

zhp 发表于 2022-12-20 11:49:53

也可以从后向前扫描,碰到第一个非FF就停止
基本可以判断后面扫描过的部分为空白区域

xxkj2010 发表于 2022-12-20 13:14:56

本帖最后由 xxkj2010 于 2022-12-20 13:16 编辑

用code指针,还是不懂具体如何操作,有例程吗?
只知道将某些固定的数据存到FLASH ROM,就用code。

梁工 发表于 2022-12-20 14:16:56

本帖最后由 梁工 于 2024-3-21 09:58 编辑

xxkj2010 发表于 2022-12-20 13:14
用code指针,还是不懂具体如何操作,有例程吗?
只知道将某些固定的数据存到FLASH ROM,就用code。
...
按zhp说的方式更好,从后向前扫描,碰到第一个非FF就停止。假设63.5K的ROM,最后100个字节不检测(用于放一些参数),则开始地址 = 63.5*1024-100-1=64923。搜索到0扇区的之后以一个地址(0x00ff)结束,0扇区是中断向量区,认为必用了。
unsigned char code *pc;
for(pc=64923; pc>=0x0100; pc--)
{
   if(*pc != 0xff)   break;
}
此时从pc的地址开始,后面都是空的。

神农鼎 发表于 2022-12-20 16:06:06

这绝对 VIP 客户待遇啊,绝对优质技术支持
页: [1] 2
查看完整版本: 能通过代码方式查看单片机中ROM使用空间吗(已解决)