请选择 进入手机版 | 继续访问电脑版

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

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

[复制链接]
  • TA的每日心情
    开心
    14 小时前
  • 签到天数: 124 天

    [LV.7]常住居民III

    64

    主题

    759

    回帖

    2459

    积分

    金牌会员

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

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

    使用道具 举报

    该用户从未签到

    45

    主题

    2746

    回帖

    6138

    积分

    超级版主

    积分
    6138
    发表于 2022-12-19 15:10:38 | 显示全部楼层
    用户自己的程序做统计,是可以的。
  • TA的每日心情
    开心
    14 小时前
  • 签到天数: 124 天

    [LV.7]常住居民III

    64

    主题

    759

    回帖

    2459

    积分

    金牌会员

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

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

    点评

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

    该用户从未签到

    45

    主题

    2746

    回帖

    6138

    积分

    超级版主

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

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

    [LV.7]常住居民III

    64

    主题

    759

    回帖

    2459

    积分

    金牌会员

    积分
    2459
     楼主| 发表于 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

    该用户从未签到

    45

    主题

    2746

    回帖

    6138

    积分

    超级版主

    积分
    6138
    发表于 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;
  • TA的每日心情
    开心
    2024-1-4 08:56
  • 签到天数: 14 天

    [LV.3]偶尔看看II

    16

    主题

    702

    回帖

    2460

    积分

    超级版主

    积分
    2460
    发表于 2022-12-20 11:49:53 | 显示全部楼层
    也可以从后向前扫描,碰到第一个非FF就停止
    基本可以判断后面扫描过的部分为空白区域
  • TA的每日心情
    开心
    14 小时前
  • 签到天数: 124 天

    [LV.7]常住居民III

    64

    主题

    759

    回帖

    2459

    积分

    金牌会员

    积分
    2459
     楼主| 发表于 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

    该用户从未签到

    45

    主题

    2746

    回帖

    6138

    积分

    超级版主

    积分
    6138
    发表于 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的地址开始,后面都是空的。

    该用户从未签到

    538

    主题

    8734

    回帖

    1万

    积分

    管理员

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

    本版积分规则

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

    GMT+8, 2024-3-29 21:33 , Processed in 0.067905 second(s), 65 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

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