亿加合和智能车制作

标题: #pragma CODE_SEG __NEAR_SEG NON_BANKED [打印本页]

作者: oo7ak47666    时间: 2010-3-17 01:36
标题: #pragma CODE_SEG __NEAR_SEG NON_BANKED
为什么在写中断函数时要写#pragma CODE_SEG __NEAR_SEG NON_BANKED这句话,标示代码不在分页区?
知其然而不知其所以然啊~~~~大家帮帮忙啊~~
作者: cqqjliyuan    时间: 2010-3-18 16:19
写#pragma CODE_SEG  XX 表示把下面的程序放到XX代码段  至于为什么要放到NON_BANKED代码段
我想是只有放在这个段里面 才能将中断号与中断向量联系起来 也就是硬件决定的
作者: oo7ak47666    时间: 2010-3-19 01:31
回复 2# cqqjliyuan


    3q哈!
作者: 刚刚    时间: 2010-3-19 19:09
谢啦
作者: zhouhong    时间: 2010-3-20 09:30
确实
作者: feisikaer_2010    时间: 2010-3-24 21:06
3Q
作者: wt373455698    时间: 2010-4-5 16:19

作者: nonfreedom    时间: 2010-4-9 16:38
不明白
作者: shuxinxiaozi    时间: 2010-4-9 22:00
3q啊,呵呵。我试着把它们注释掉,结果link error!╮(╯▽╰)╭
作者: 挑战者    时间: 2010-8-14 10:11
恩!
作者: 灯火楼台    时间: 2010-8-14 15:23

作者: shadow    时间: 2010-9-28 12:48
百度上有说明!
作者: jiang1101    时间: 2010-11-7 22:13
不懂哎
作者: jiang1101    时间: 2010-11-7 22:13
不懂哎
作者: 835304205    时间: 2010-12-6 19:07
意思把中断代码放在64K寻址范围内,效率高。16位机寻址能力为64K。
作者: 835304205    时间: 2010-12-6 19:07
意思把中断代码放在64K寻址范围内,效率高。16位机寻址能力为64K。
作者: 4621    时间: 2010-12-13 14:06
谢谢
作者: hefeixuexi    时间: 2010-12-13 16:30
谢谢哈!知道了
作者: beandy    时间: 2011-1-24 10:26
学习了
作者: 梧桐1209    时间: 2011-3-2 21:55
还行吧
作者: 梧桐1209    时间: 2011-3-2 21:58
http://hi.baidu.com/%D0%C2%CA%D6 ... a5ac99d04358f0.html
FLASH里非分页工作机制
   FLASH一共为128K,一页是16K,那么应该有8页才是,但是实际只有6个分页。有2个非分页放在4000-7FFF,和C000-FFFF两个逻辑地址窗里。那么,当程序的寻址在64K之内(2^16=64K,16位机的寻址能力是64K)时,就不用分页了,直接使用那两个非分页的数据。实际上,3E页 3F页是可见的,其实他们就是那2个非分页的映射。因此,使用非分页FLASH,就不须设置PPAGE寄存器,直接使用逻辑地址即可。

很直观地看出,把这两个可以直接使用逻辑地址的页面设为NON_BANKED, 那么中断函数放在NON_BANKED里,就可以把函数放在64K的寻址程序段中。这么一来,进中断就方便多了,效率也高很多。
作者: feisi_kaer    时间: 2011-3-18 21:48
呵呵 对头!
作者: renzhejiajia    时间: 2011-4-29 17:58

作者: 飞思    时间: 2011-5-12 15:15
这要还是要从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的寻址程序段中。这么一来,进中断就方便多了,效率也高很多。


本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/zzjslt/archive/2010/11/17/6016709.aspx
作者: 540708692    时间: 2011-5-22 18:49
对啊
作者: lrbdh    时间: 2011-11-20 22:16
GOOD
作者: 加速度    时间: 2011-12-2 22:38
懂了
作者: chuan0506    时间: 2011-12-3 21:42
我也不知道
作者: a347744140    时间: 2011-12-4 21:27
顶一下
作者: dich    时间: 2012-1-11 16:33
这要还是要从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的寻址程序段中。这么一来,进中断就方便多了,效率也高很多。

http://blog.csdn.net/zzjslt/article/details/6016709
作者: JudeScorpio    时间: 2012-9-15 10:12
cqqjliyuan 发表于 2010-3-18 16:19
写#pragma CODE_SEG  XX 表示把下面的程序放到XX代码段  至于为什么要放到NON_BANKED代码段
我想是只有放在 ...

谢啦





欢迎光临 亿加合和智能车制作 (http://www.znczz.com/) Powered by Discuz! X3.2