谁敢说“精通PIC单片机”的朋友请进,这个问题我就不信只有我一个人遇到?????

2020-02-09 09:31发布

大家好!我在用PICC编绎器的时候遇到一个问题!就是自动变量只能存放在bank0中,而存放在bank1~3中在编绎时就会出错。而bank1~3只能存放静态变量。我的程序很简单。以下图1为PICC编绎的错误提示,而图2是MPLAB中带自的C编绎中的提示,虽然没有提示,但是就出现在一个警告。
#include <pic.h>
void main(void)
{
        bank1 char i;//为什么这里编绎会出错,但是改为“char i;”就没有错了。
    i=12;
    while(1);
}


图1 (原文件名:错误提示.JPG)


图2 (原文件名:MPLAB自带C编绎器中也会警告.JPG)


更可笑的是,我在
http://www.ourdev.cn/bbs/bbs_content.jsp?bbs_sn=4373781&bbs_page_no=1&search_mode=3&search_text=lgh050706&bbs_id=9999

http://pic16.com/bbs/dispbbs.asp?boardid=24&Id=54463

发了一个帖子,竟然没有人有正面的回答,只不是表明这个问题只有我遇到,而大家就从来没有遇到啊!
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
29条回答
hsztc
1楼-- · 2020-02-09 13:13
这个变量放在哪应该是C编译器要做的事吧,应该不用你操心的。

所以只要char i;
bigZ
2楼-- · 2020-02-09 16:37
3.3.10.3 Bank0, Bank1, Bank2 and Bank3 Type Quali&#64257;ers
The bank0, bank1, bank2 and bank3 type quali&#64257;ers are always recognised by HI-TECH C
PRO for the PIC10/12/16 MCU Family so that code may be easily ported from other compilers,
however by default, these quali&#64257;ers have no effect.
If the --ADDRQUAL option is set to request(see Section 2.6.19), the bank0, bank1, bank2
and bank3 quali&#64257;ers become a recommendation to place non-auto variables in RAM bank 0, bank
1, bank2 and bank 3, respectively. If space is not available in these banks, another bank will be used.
If the --ADDRQUAL option is set to require, the bank quali&#64257;ers will always place non-auto
objects in the bank speci&#64257;ed. If no room exists in that bank, an error will be generated.
The following example of bank quali&#64257;er usage will either recommend or force (dependent on
the --ADDRQUAL option settings) the unsigned char to be stored in bank3:
static bank3 unsigned char fred;
wmm20031015
3楼-- · 2020-02-09 22:33
 精彩回答 2  元偷偷看……
lgh050706
4楼-- · 2020-02-10 00:25
回复【1楼】hsztc
这个变量放在哪应该是c编译器要做的事吧,应该不用你操心的。
所以只要char i;
-----------------------------------------------------------------------

你好!在张明锋的《PIC单片机入门与实战》一书的最后一章中是这样讲。编绎器把一个变量放在bank中的那个位置就不用我们操心,但是要把一个变量分配到那个bank是要程序完来操心,否则只会分配到bank0,直到bank0满编绎器只会报错,是不会分配到bank1~3的。
lgh050706
5楼-- · 2020-02-10 00:44
回复【3楼】wmm20031015
想不明白你为什么把i定义到bank1去,main函数是处于bank0的,你把变量定义到bank1,操作变量的话,还要进行bank切换,不觉得浪费么,不懂的话还是让编译器自动分配比较好
-----------------------------------------------------------------------

main函数是在R0M中的,怎么会在bank0中呢!那如果bank0满了之后,怎么办呢!
haeha
6楼-- · 2020-02-10 06:24
回复【4楼】lgh050706  
回复【1楼】hsztc&#160;
这个变量放在哪应该是c编译器要做的事吧,应该不用你操心的。&#160;
所以只要char&#160;i;
-----------------------------------------------------------------------

你好!在张明锋的《pic单片机入门与实战》一书的最后一章中是这样讲。编绎器把一个变量放在bank中的那个位置就不用我们操心,但是要把一个变量分配到那个bank是要程序完来操心,否则只会分配到bank0,直到bank0满编绎器只会报错,是不会分配到bank1~3的。
-----------------------------------------------------------------------

二楼不是说的很清楚了吗,lz你仔细看

一周热门 更多>