金牌会员
- 积分
- 2113
- 威望
- 309
- 贡献
- 1654
- 兑换币
- 0
- 注册时间
- 2010-8-14
- 在线时间
- 75 小时
|
中断函数为什么要加:#pragma CODE_SEG __NEAR_SEG NON_BANKED 这个声明?这个声明是干什么用的?
2010-04-18 17:07
这要还是要从FLASH分页和非分页的区别说起。
下面详细说一说,FLASH里非分页和分页的使用。 要明白一点,分页是不可见的,要用的时候PPAGE参与寻
址。
FLASH里非分页工作机制
FLASH一共为128K,一页是16K,那么应该有8页才是,但是实际只有6个分页。有2个非分页放在4000-7FFF
,和C000-FFFF两个逻辑地址窗里。那么,当程序的寻址在64K之内(2^16=64K,16位机的寻址能力是64K)时,
就不用分页了,直接使用那两个非分页的数据。实际上,3E页 3F页是可见的,其实他们就是那2个非分页的映
射。因此,使用非分页FLASH,就不须设置PPAGE寄存器,直接使用逻辑地址即可。
这点我们可以从以下看出:
/* non-paged FLASHs */
ROM_4000 = READ_ONLY 0x4000 TO 0x7FFF;
ROM_C000 = READ_ONLY 0xC000 TO 0xFEFF;
PLACEMENT
NON_BANKED, INTO ROM_C000/*, ROM_4000*/;
很直观地看出,把这两个可以直接使用逻辑地址的页面设为NON_BANKED, 那么中断函数放在NON_BANKED里
,就可以把函数放在64K的寻址程序段中。这么一来,进中断就方便多了,效率也高很多。 |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?注册
x
|