打印
[PIC®/AVR®/dsPIC®产品]

一种超怪的变量地址分配问题??

[复制链接]
1133|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
我用的是MPLAB IDE v8.89 和 PICC 9.83 编译器,芯片是PIC16F886。下面我以一个变量的地址分配为例:
打开MPLAB中的file Registers查看当中某个变量的地址 ,如图中的ac_in_280v。其地址为0EC,对应单片机的寄存器为BANK1,因为如果该变量存放在BANK1中某些功能就实现不了,所以我想使这个变量存放在BANK0中。
我试过这样定义:                               bank0 unsigned int ac_in_280v;              但是编译一下,该变量仍然在BANK1中。
后来通过查了一下,发现在这个编译器下变量是随机分配的,然后就在一个无关紧要的地方加上了一句,if(ac_in_280v>dc_220v){},注:dc_220v存放在BANK0中,这个语句是废!话!
再编译一下,这样ac_in_280v这个变量就放到了BANK0中了。

问题来了:当我之后要增加一些功能,即要增加一些变量,ac_in_280v这个变量可能又回到BANK1中了,哎,每次更改一下函数都怕其他功能受影响,十分不安心:(

各位英雄好汉有没有什么好方法啊?
沙发
zhimagod| | 2015-2-10 08:46 | 只看该作者
呃……会是这样吗?没注意过唉
把优化关掉试试呢?

使用特权

评论回复
板凳
UPS2015|  楼主 | 2015-2-10 13:25 | 只看该作者
zhimagod 发表于 2015-2-10 08:46
呃……会是这样吗?没注意过唉
把优化关掉试试呢?

可以把优化关掉的??
可不可以告诉我怎样子搞的

使用特权

评论回复
地板
zhimagod| | 2015-2-11 08:22 | 只看该作者
在工程上右击,选Build Option...然后在compiler里面有个Optimization settings,剩下的知道该怎么做了吧
能力有限,只能帮你到这里了……

使用特权

评论回复
5
UPS2015|  楼主 | 2015-3-2 08:19 | 只看该作者
谢谢

将compiler里面的address qualifiers选项里面将默认的ignore,改成require就可以解决这个问题了

使用特权

评论回复
6
UPS2015|  楼主 | 2015-3-2 08:20 | 只看该作者
zhimagod 发表于 2015-2-11 08:22
在工程上右击,选Build Option...然后在compiler里面有个Optimization settings,剩下的知道该怎么做了吧
能 ...

谢谢您

使用特权

评论回复
7
兰天白云| | 2015-3-6 15:27 | 只看该作者
编译器把数据放哪个存储区问题不大,比较的时候会加上存储区切换

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

38

帖子

2

粉丝