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

雨滴科技技术论坛

 找回密码
 立即注册
查看: 260|回复: 2

请教关于代码区基址RomBase的计算

[复制链接]

1

主题

2

帖子

16

积分

新手上路

Rank: 1

积分
16
扫一扫,手机访问本帖
发表于 2018-8-7 20:18:48 | 显示全部楼层 |阅读模式
看到代码中RomBase的计算如下:

  1. static void Init(void)  
  2. {
  3.     DisableIrq();
  4.    
  5.     RomBase = (uint)Init & 0xFF000000;
  6.     RamBase = (uint)(&RamBase) & 0xFF000000;
  7.    
  8.     InitGui();
  9.         InitOs();
  10.     InitDevice();
  11. }
复制代码

  1. int main(void)
  2. {      
  3.     InitData();                           
  4.     System.Init();                          //初始化系统层
  5.     System.OS.CreateLogicTask(LogicTask);   //创建业务逻辑任务
  6.     System.OS.CreateMenuTask(MenuTask);     //创建菜单界面任务
  7.    
  8.     System.OS.Start();
  9. }
复制代码


此处的RomBase的计算是什么原理,有什么讲究吗?是函数Init()的地址同 0xFF000000相与得到,2个问题:
1、为什么是Init()的地址?看main函数,InitData()在System.Init();之前,为什么不是用InitData()的地址去计算RomBase?是不是也可以用InitData()的地址去计算RomBase?这里的RomBase只是一个“相对基址”?
2、为什么是0xFF000000,可不可以用其他值,例如0xFFFF0000?

有谁知道吗,请教一下。
谢谢!
回复

使用道具 举报

259

主题

1617

帖子

6701

积分

版主

Rank: 7Rank: 7Rank: 7

积分
6701
发表于 2018-8-9 15:43:13 | 显示全部楼层
本帖最后由 活着 于 2018-8-9 15:45 编辑

      IROM地址的起始地址是 0x8000000,所以高位字节代表的起点,后面代表大小。
      如果你使用0xFFFF0000,如果ROM区域大于64K字节,那就会出问题。如果小于64K
      可以用0xFFFF0000来代替0xFF000000.
       rombase.png
回复 支持 反对

使用道具 举报

1

主题

2

帖子

16

积分

新手上路

Rank: 1

积分
16
 楼主| 发表于 2018-8-13 20:52:59 | 显示全部楼层
多谢解答。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

在线客服
在线咨询
咨询热线
0755-26787502-8006/8016
扫一扫二维码
直接访问本站

QQ|Archiver|手机版|小黑屋|雨滴科技  

GMT+8, 2018-12-19 22:23 , Processed in 0.065695 second(s), 13 queries , Gzip On, Memcache On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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