找回密码
 立即注册
查看: 2785|回复: 14

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

[复制链接]
  • 打卡等级:以坛为家II
  • 打卡总天数:520
  • 最近打卡:2025-05-01 08:06:21

109

主题

1897

回帖

5204

积分

论坛元老

积分
5204
发表于 2022-12-19 14:03:02 | 显示全部楼层 |阅读模式
本帖最后由 xxkj2010 于 2022-12-21 08:00 编辑

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

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:50
  • 最近打卡:2025-04-30 22:59:03

73

主题

5882

回帖

1万

积分

超级版主

积分
12073
发表于 2022-12-19 15:10:38 | 显示全部楼层
用户自己的程序做统计,是可以的。
  • 打卡等级:以坛为家II
  • 打卡总天数:520
  • 最近打卡:2025-05-01 08:06:21

109

主题

1897

回帖

5204

积分

论坛元老

积分
5204
发表于 2022-12-19 19:04:19 | 显示全部楼层
梁*** 发表于 2022-12-19 15:10
用户自己的程序做统计,是可以的。

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

点评

FLASH ROM擦除后全部是0xFF,程序从地址0x0000开始搜索,搜到多个连续的0xff就可以认为程序结束了,这个方法不能100%测量出来,因为有可能会有数据表有多个0xff,可以检测更多的连续FF来判断。  详情 回复 发表于 2022-12-19 23:36
  • 打卡等级:偶尔看看III
  • 打卡总天数:50
  • 最近打卡:2025-04-30 22:59:03

73

主题

5882

回帖

1万

积分

超级版主

积分
12073
发表于 2022-12-19 23:36:31 | 显示全部楼层
xxkj*** 发表于 2022-12-19 19:04
如何统计?应该不是查询某个寄存器吧?

FLASH ROM擦除后全部是0xFF,程序从地址0x0000开始搜索,搜到多个连续的0xff就可以认为程序结束了,这个方法不能100%测量出来,因为有可能会有数据表有多个0xff,可以检测更多的连续FF来判断。
  • 打卡等级:以坛为家II
  • 打卡总天数:520
  • 最近打卡:2025-05-01 08:06:21

109

主题

1897

回帖

5204

积分

论坛元老

积分
5204
发表于 2022-12-20 10:38:49 | 显示全部楼层
梁*** 发表于 2022-12-19 23:36
FLASH ROM擦除后全部是0xFF,程序从地址0x0000开始搜索,搜到多个连续的0xff就可以认为程序结束了,这个 ...

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

点评

如何读取FLASH ROM? 汇编:MOVC指令。 C语言:code指针,unsigned char code *pc;  详情 回复 发表于 2022-12-20 11:01
  • 打卡等级:偶尔看看III
  • 打卡总天数:50
  • 最近打卡:2025-04-30 22:59:03

73

主题

5882

回帖

1万

积分

超级版主

积分
12073
发表于 2022-12-20 11:01:52 | 显示全部楼层
xxkj*** 发表于 2022-12-20 10:38
如何读取FLASH ROM?应该不是IAP方式吧?所有的芯片使用手册只有涉及内部EEPROM的寄存器,通过读写这些特 ...

如何读取FLASH ROM?
汇编:MOVC指令。
C语言:code指针,unsigned char code *pc;
  • 打卡等级:偶尔看看III
  • 打卡总天数:38
  • 最近打卡:2025-04-30 14:38:57

25

主题

977

回帖

3599

积分

超级版主

积分
3599
发表于 2022-12-20 11:49:53 | 显示全部楼层
也可以从后向前扫描,碰到第一个非FF就停止
基本可以判断后面扫描过的部分为空白区域
  • 打卡等级:以坛为家II
  • 打卡总天数:520
  • 最近打卡:2025-05-01 08:06:21

109

主题

1897

回帖

5204

积分

论坛元老

积分
5204
发表于 2022-12-20 13:14:56 | 显示全部楼层
本帖最后由 xxkj2010 于 2022-12-20 13:16 编辑

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

点评

按zhp说的方式更好,从后向前扫描,碰到第一个非FF就停止。假设63.5K的ROM,最后100个字节不检测(用于防一些参数),则开始地址 = 63.5*1024-100-1=64923。搜索到0扇区的之后以一个地址(0x00ff)结束,0扇区是中断  详情 回复 发表于 2022-12-20 14:16
  • 打卡等级:偶尔看看III
  • 打卡总天数:50
  • 最近打卡:2025-04-30 22:59:03

73

主题

5882

回帖

1万

积分

超级版主

积分
12073
发表于 2022-12-20 14:16:56 | 显示全部楼层
本帖最后由 梁工 于 2024-3-21 09:58 编辑
xxkj*** 发表于 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的地址开始,后面都是空的。
  • 打卡等级:偶尔看看III
  • 打卡总天数:54
  • 最近打卡:2025-05-01 09:07:55

717

主题

1万

回帖

1万

积分

管理员

积分
15613
发表于 2022-12-20 16:06:06 | 显示全部楼层
这绝对 VIP 客户待遇啊,绝对优质技术支持
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-5-2 02:26 , Processed in 0.140571 second(s), 105 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表