说说PIC HI-TECH C编译器的烂。

[复制链接]
11439|39
 楼主| hjh002 发表于 2007-6-18 16:47 | 显示全部楼层

项目已经完成,问题已经解决,只是把问题贴出来让大家看

  
9509238 发表于 2007-6-19 10:02 | 显示全部楼层

这水平

这水平,唉!现在搞单片机的都是些什么人啊,可悲!还要怪编译器?
 楼主| hjh002 发表于 2008-3-3 16:53 | 显示全部楼层

嘿嘿

之前一直用的8.05版的,D版,不知道上面用过HT-PICC没有问题的同学是不是用的正版?反正D版的就经常出问题,今天又发现一个问题,如下:<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;buf=EEPROM_READ(0x7f);<br />&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(buf!=0x55)&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;EEPROM_WRITE(0x7f,0x55);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;EEPROM_WRITE(0x7f,0x00);<br />&nbsp;按C标准,如果if&nbsp;和&nbsp;else&nbsp;下面如果只有一条语句,是不需要加&quot;{&nbsp;}&quot;的,但是由于EEPROM_READ()&nbsp;和EEPROM_WRITE()&nbsp;是在PIC.H里定义的宏,是由多条语句组成的集合,如果用HT-PCC8.05&nbsp;D版编译运行的话,结果就是不论if里的条件如果,结果都会执行到EEPROM_WRITE(0x7f,0x00),造成错误.解决办法就是把if&nbsp;和else&nbsp;下面的语句都加&quot;{&nbsp;}&quot;&nbsp;或者换成HT-PICC9.6版.<br />&nbsp;&nbsp;&nbsp;&nbsp;这个问题不能完成怪HT-PICC8.05,只是它不是那么符合C标准而已民.<br /><br /><br /><br />
aaa2742 发表于 2010-10-18 10:56 | 显示全部楼层
的确有问题,而且还不止于此:@
machunshui 发表于 2010-10-18 12:06 | 显示全部楼层
俺们用着不错。

PIC HI-TECH C全世界的使用者何止成千上万,
怎么可能也明显的BUG被你们发现。
(当然个别中间版本可能有些使用上的限制,如PICC9.70)。

好好找找自己的原因,
不要误导新人。
tigerajun 发表于 2010-10-25 20:43 | 显示全部楼层
确实如此,且越新版好象问题越多,彻底不敢用了,老实用8.05比较保险
yewuyi 发表于 2010-10-26 08:29 | 显示全部楼层
之前一直用的8.05版的,D版,不知道上面用过HT-PICC没有问题的同学是不是用的正版?反正D版的就经常出问题,今天又发现一个问题,如下:    buf=EEPROM_READ(0x7f);    if ( ...
hjh002 发表于 2008-3-3 16:53



是你没有符合C标准,不要怪到 PICC头上。

C标准本来就是如此,并未错误。
zhaoyu2005 发表于 2010-10-28 09:24 | 显示全部楼层
叶大侠,这个编译器确实有时会出现莫名其妙的问题,我曾经有幸见过一次,编译通过,下载到单片机,运行时数码管显示不对(不是正常的几个字符),重新编译了下,再下载就好了,同事弄得,我在旁边看的,同事说偶尔会遇到,我自己没弄出来过
8.05和谐版
diweo 发表于 2010-10-29 10:52 | 显示全部楼层
本帖最后由 diweo 于 2010-10-29 10:54 编辑

我经常碰到提示一个文件尾部missing new line.我就又回车又空格(不同组合)多了好几行,还提示missing new line。有时候重新编译就好了。有时候怎么弄都还有。虽然只是个警告,并不影响程序运行,可是经常被警告,感觉很不好。。不知道大伙碰到没?
yewuyi 发表于 2010-10-29 10:57 | 显示全部楼层
叶大侠,这个编译器确实有时会出现莫名其妙的问题,我曾经有幸见过一次,编译通过,下载到单片机,运行时数码管显示不对(不是正常的几个字符),重新编译了下,再下载就好了,同事弄得,我在旁边看的,同事说偶尔会 ...
zhaoyu2005 发表于 2010-10-28 09:24


这个有可能是下载器下载错误造成的,ICD2\PICKIT2类似的工具下载出错还是时有见到的。

另外,也可能是配置字乱的原因,也可能是上一次编译没执行正确命令的原因。

编译器也是机器,不会出现时好时不好的问题,如果出现这种问题,要么是代码问题,要么是执行操作问题,要么是工具问题。
yewuyi 发表于 2010-10-29 10:59 | 显示全部楼层
我经常碰到提示一个文件尾部missing new line.我就又回车又空格(不同组合)多了好几行,还提示missing new line。有时候重新编译就好了。有时候怎么弄都还有。虽然只是个警告,并不影响程序运行,可是经常被警告, ...
diweo 发表于 2010-10-29 10:52



在文件尾加一行空行,也就是执行一次回车。

这个在很多编译器中都存在类似警告。
yewuyi 发表于 2010-10-29 11:00 | 显示全部楼层
好像是因为C文件对最后一行的字符格式是有要求的,如果你最后一个字符输入的格式不符合,就会出现这个警告,一般在最后一行切换到EN输入状态下回车一下就可以。
zhaoyu2005 发表于 2010-11-1 10:50 | 显示全部楼层
配置字是写在程序开头的,下载器出问题倒是有可能,不过不正常的程序,再下载到别的片子里也不行,重新编译过正常的,再下载到别的片子里也正常,极少出现下到这个片子里程序正常,下到另外的片子里程序不正常
ys7369 发表于 2011-6-17 20:57 | 显示全部楼层
1.碰到过两个变量定义在一个bank里,编译没错误,从变量窗口看两个变量地址连续的,单步执行改其中一个变量从变量窗口上看把另外一个变量改了,没办法把其中一个变量更换到另外一个bank里就好了。。。。
我真的不知道更改一个变量bank位置其他都不动的情况下跟我水平之间是不是有关系。。但是真的只换了一下bank空间,,而且两个bank都是使用80%左右 开始和后来都没编译错误。。。。
2.还碰到过一个函数里两个连续的if()语句,第一个执行过后,单步调试发现第二个不执行被跳过了,,没办法把第二个语句掉到第一个前面去就好了,,(两个语句之间没任何变量相关联。。。)感觉上就是被编译器搞漏掉了的样子
su_mj000 发表于 2011-6-20 01:17 | 显示全部楼层
换位思考一下吧。如果你来设计编译器,会怎么样呢?

不自动分页也有其合理性的。
dodome521 发表于 2011-6-20 18:04 | 显示全部楼层
本帖最后由 dodome521 于 2011-6-20 18:14 编辑

不得不承认,第3条的现象俺也时有遇到。怀疑是D版问题,遇到类似问题时只能慢慢找,想办法绕过。还有,在编译器选项里需要设置为ICD2调试(如果用ICD2调试的话),有些新手没有注意到这些,RAM用的较多时,会覆盖到为ICD2分配的RAM空间,也会出现第3条的现象。
JX小自 发表于 2012-4-10 19:22 | 显示全部楼层
子程序不能太大应该是跟PIC的寻址范围有关吧
Wobbi 发表于 2012-4-14 15:30 | 显示全部楼层
建議用彙編語言編程, 雖然繁瑣點, 好在最為底層, 所有問題都直接, 軟硬件都了解, 編程就容易了.
与时俱进 发表于 2012-10-14 08:56 | 显示全部楼层
之前一直用的8.05版的,D版,不知道上面用过HT-PICC没有问题的同学是不是用的正版?反正D版的就经常出问题,今天又发现一个问题,如下:    buf=EEPROM_READ(0x7f);    if ( ...
hjh002 发表于 2008-3-3 16:53
记得遇到过要把整型数写入EEPROM时出现运行错误,只能写一个字节,第2字节写不了。后来只好修改程序,一个字节一个字节写入。
大概是这种情形:
eeprom int i;    //声明存放在EEPROM的整型变量

i=0x1234;        //运行这条的结果,只写入一个字节
与时俱进 发表于 2012-10-14 09:05 | 显示全部楼层
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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