飞思卡尔 HCS12(x) memory map解说之3

      了解XS128的MEMORY map和core,对充分榨取他的现有资源,合理分配RAM很有帮助。上次讨论到cpu12内核的DG系列单片机,基本上该涉及的东西都有所提及。包括:

1 MEMORY map的原因,为什么要搞这个概念出来。
2 MEMORY map包含的内容,有那三点...
3 一些相关的概念性的东西。
如果不明白,看看前面几篇文章就会明白一些的。
 
这次再补充三个概念,希望能引起大家的注意和进一步讨论:
1  在PRM里设置了映射之后,怎么把程序或变量放在那个地址区呢?比如:我就想把int a;这个a
分配到未分页的RAM1区,怎么办?
这个说来话太长。
简单地说用:#pragma DATA_SEG [xxxx] <segment_name>。如果没有#pragma DATA_SEG,全局变量将会被放到 DEFAULT_RAM段中。当然,如果这个变量频率引用的话,放在非分页RAM1区可以提高他的读取效率,毕竟他不 需要RPAGE参与寻址,是near寻址,而不是far,用简单的指令就可以搞定。
 
      同样,如果反复调用一个函数,把这个函数放在非分页flash里也有异曲同同之妙。
 
       关于这个问题的详细讨论,张教主有一篇文章,还有一个DP512的PPT都有讲解。大家可以网上下载看看,如 果需要,也可以向我email要.
2 建程序里的SAMLL BANKED LARGE是什么作用?
      SMALL平面的64K的地址空间。所有的函数都是near。BANKED采用分页地址。所有的用户的函数都被默认为far。far类型的数据指针可以在SMALL和BANKED中使用LARGE, 默认为数据和代码均为分页模式。所有的函数和数据指针都是far类型。这种内存模型运行时间比较 长,因此很少使用.用LARGE基本上浪费了16位机寻址64K的优势。
      因此,用SMALL和BANKED模式的较多。大家可以看看建工程时SMALL和BANKED模式下有什么不同?映射是一样的 ,只是DEFAULT_ROM和NON_BANKED有无分开的区别。
 
3 分页明白了,但是分页映射之后怎么用分页里面的数据?
      比如 const int a;我把他放在PAGE_3C里面,我如何通过计算PPAGE找到这个a呢?

      我们用C语言的过程中,把这些东西都忽略了,这个是内核的东西。简单地说,因为内核会自动调用不同的 指令去把你C语言译成机器码。机器码就指令集的表示了。因此,内核的先进性和编译优化过程让你不要管了 了。
  
      这样说是因为,随后的博文里将更进一步讨论XS128的memory部分。xs128有128KP-FLASH(ROM) 8KRAM 8KD-FLASH( EEPROM) ,有某些分页用不到,比如RAM分页,因为逻辑地址是$2000-$4000,有8K空间,无需 分页。但是大一点的RAM的话,就必须要分页了。这么多分页(还有FLASH肯定是要分页了,不分页程序就装不
下去),怎么管理呢?总得有个东西来统筹一下吧.
  
      GPAGE就诞生了.....
      GPAGE怎么用呢,还是上面的那句话,不是用汇编的话,你基本不用管。
  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值