搜索

[PIC®/AVR® MCU] 一种超怪的变量地址分配问题??

[复制链接]
880|6
 楼主 | 2015-2-6 16:17 | 显示全部楼层 |阅读模式
我用的是MPLAB IDE v8.89 和 PICC 9.83 编译器,芯片是PIC16F886。下面我以一个变量的地址分配为例:
打开MPLAB中的file Registers查看当中某个变量的地址 无标题.png ,如图中的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中了,哎,每次更改一下函数都怕其他功能受影响,十分不安心:(

各位英雄好汉有没有什么好方法啊?
| 2015-2-10 08:46 | 显示全部楼层
呃……会是这样吗?没注意过唉
把优化关掉试试呢?

使用特权

评论回复
 楼主 | 2015-2-10 13:25 | 显示全部楼层
zhimagod 发表于 2015-2-10 08:46
呃……会是这样吗?没注意过唉
把优化关掉试试呢?

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

使用特权

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

使用特权

评论回复
 楼主 | 2015-3-2 08:19 | 显示全部楼层
谢谢
build options.png
将compiler里面的address qualifiers选项里面将默认的ignore,改成require就可以解决这个问题了

使用特权

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

谢谢您

使用特权

评论回复
| 2015-3-6 15:27 | 显示全部楼层
编译器把数据放哪个存储区问题不大,比较的时候会加上存储区切换

使用特权

评论回复
扫描二维码,随时随地手机跟帖
您需要登录后才可以回帖 登录 | 注册

本版积分规则

我要发帖 我要提问 投诉建议 申请版主

快速回复

您需要登录后才可以回帖
登录 | 注册
高级模式

论坛热帖

在线客服 快速回复 返回顶部 返回列表