打印

用PICC9.83编译器编译程序遇到的问题

[复制链接]
5152|15
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 yimankehao 于 2012-8-17 10:34 编辑

手里有一个4年前的一个老项目需要修改一下程序,受控程序用PICC9.83**版的编译后出现如下问题。


还望高手帮忙解决一下。
沙发
yewuyi| | 2012-8-17 10:58 | 只看该作者
呵呵,除了把源代码拿出来让大家看看有没有可能外,其它基本没有可能

使用特权

评论回复
板凳
hwrhys| | 2012-8-17 13:59 | 只看该作者
我最近也遇到了这个问题, 最后解决了,原因如下:
     是BANKX中安排的变量太多了,没有给编译器留出所用的空间,你和我大概一样,用了库函数,
     这就要求给编译器留出计算的空间,“你把地方都占满了,它没地方,就提**了”。

        这是我的理解,但问题是解决了。  欢迎互相探讨,共同提高 !!!!!

使用特权

评论回复
地板
echenlf| | 2012-8-17 14:51 | 只看该作者
定义的变量不能超过各bank的空间

使用特权

评论回复
5
yewuyi| | 2012-8-17 14:56 | 只看该作者
我最近也遇到了这个问题, 最后解决了,原因如下:
     是BANKX中安排的变量太多了,没有给编译器留出所用的空间,你和我大概一样,用了库函数,
     这就要求给编译器留出计算的空间,“你把地方都占满了,它没地 ...
hwrhys 发表于 2012-8-17 13:59


他这是他公司的受控程序,肯定是以前编译通过的,估计如下几种可能:
1、原工程师上报的不是正确的程序。
2、原工程师的编程水平较差,有一些不太符合C语言的代码,虽然当时版本的编译器没做严格检查并编译通过了,但新版本的编译器做了严格检查导致编译不通过。

估计第二种可能比较大,如果是第二种,只能通过代码审查才能找出来,而这必须提供源代码文件,否则审查啥呢?

使用特权

评论回复
6
yimankehao|  楼主 | 2012-8-18 19:38 | 只看该作者
5# yewuyi
呵呵,您分析的有道理。但公司的源程序不方便贴网上,请见谅。受控程序第一感觉是程序是没有问题,以前运行过的。所以问题就出在编译器上,只要找到他当时用的编译器装上编译,问题应该就可予以解决。芯片类型是PIC16F946,受控程序编译环境类似PICC v8.05。

使用特权

评论回复
7
yimankehao|  楼主 | 2012-8-19 11:57 | 只看该作者
3# hwrhys
呵呵,谢谢帮忙,请问一下您的解决方法是安排到其他BANK吗?还是随机安排?

使用特权

评论回复
8
hwrhys| | 2012-8-20 14:07 | 只看该作者
我的情况是这样: 由于我大量的用到了库函数,而根据PICC 9.83的说明,库函数的运算都要占据BANK0来运算,
   所以,我把BANK0都让出来了,其他的BANKX也不要用满 !!! 给库函数的运算“留出地方” !!!
   你改一下,可看到错误的数目在减少,我也是边试边改,逐步调好的。

使用特权

评论回复
9
yimankehao|  楼主 | 2012-8-20 16:44 | 只看该作者
8# hwrhys
这个程序用的库函数只有一个,呵呵,我再找找原因。

使用特权

评论回复
10
yewuyi| | 2012-8-21 08:49 | 只看该作者
1、在新版本的PICC中,变量定义时不指定BANK也一般没有问题了,至少我当前试过很多次没出啥问题,现在新版本的PICC可能已经可以自动调整各个BANK变量分配了吧。
2、如果源代码因为BANK的问题,那么在新版本中编译出错,在老版本中也一样会编译出错,这个基本不会随着编译器版本变化而改变,如果LZ修改BANK后能消除问题,我个人估计是原工程在源代码上做手脚了,估计交的不是完整版的代码。

使用特权

评论回复
11
yimankehao|  楼主 | 2012-8-30 15:30 | 只看该作者
问题解决了,技术支持帮忙解决的,重新定义了一些寄存器的地址。

使用特权

评论回复
12
hegangzmaw| | 2013-4-10 11:56 | 只看该作者
yimankehao 发表于 2012-8-30 15:30
问题解决了,技术支持帮忙解决的,重新定义了一些寄存器的地址。

寄存器的地址怎么重新定义的

使用特权

评论回复
13
only0622| | 2014-7-8 08:12 | 只看该作者
学习了

使用特权

评论回复
14
xppx1987| | 2014-7-15 16:57 | 只看该作者
yewuyi 发表于 2012-8-21 08:49
1、在新版本的PICC中,变量定义时不指定BANK也一般没有问题了,至少我当前试过很多次没出啥问题,现在新版 ...

我用的就是9.83版本的PICC,貌似自己在变量前面加bank操作也无济于事,调试时看到变量的地址被编译器自动分配好了都,而非自己在自己定义的bank内。

使用特权

评论回复
15
21icszx| | 2016-5-21 09:59 | 只看该作者
9.83版本的PICC会自动分配变量BANk

bank.PNG (64.57 KB )

bank.PNG

使用特权

评论回复
16
zhanzr21| | 2016-5-25 20:51 | 只看该作者
原因很簡單, 就是這次的編譯器感覺到空間不夠 幾個section無法找到合適的連續空間
如果有原來的編譯器,值接用原來的編譯
還有這次編譯器的設置優化級別調整一下, 為size優化試試

使用特权

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

本版积分规则

3

主题

81

帖子

2

粉丝