发新帖我要提问
12
返回列表
打印

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

[复制链接]
楼主: hjh002
手机看帖
扫描二维码
随时随地手机跟帖
21
hjh002|  楼主 | 2007-6-18 16:47 | 只看该作者 回帖奖励 |倒序浏览

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

使用特权

评论回复
22
9509238| | 2007-6-19 10:02 | 只看该作者

这水平

这水平,唉!现在搞单片机的都是些什么人啊,可悲!还要怪编译器?

使用特权

评论回复
23
hjh002|  楼主 | 2008-3-3 16:53 | 只看该作者

嘿嘿

之前一直用的8.05版的,D版,不知道上面用过HT-PICC没有问题的同学是不是用的正版?反正D版的就经常出问题,今天又发现一个问题,如下:

    buf=EEPROM_READ(0x7f);
    if (buf!=0x55)    
    EEPROM_WRITE(0x7f,0x55);     
     else     
    EEPROM_WRITE(0x7f,0x00);
 按C标准,如果if 和 else 下面如果只有一条语句,是不需要加"{ }"的,但是由于EEPROM_READ() 和EEPROM_WRITE() 是在PIC.H里定义的宏,是由多条语句组成的集合,如果用HT-PCC8.05 D版编译运行的话,结果就是不论if里的条件如果,结果都会执行到EEPROM_WRITE(0x7f,0x00),造成错误.解决办法就是把if 和else 下面的语句都加"{ }" 或者换成HT-PICC9.6版.
    这个问题不能完成怪HT-PICC8.05,只是它不是那么符合C标准而已民.



使用特权

评论回复
24
aaa2742| | 2010-10-18 10:56 | 只看该作者
的确有问题,而且还不止于此:@

使用特权

评论回复
25
machunshui| | 2010-10-18 12:06 | 只看该作者
俺们用着不错。

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

好好找找自己的原因,
不要误导新人。

使用特权

评论回复
26
tigerajun| | 2010-10-25 20:43 | 只看该作者
确实如此,且越新版好象问题越多,彻底不敢用了,老实用8.05比较保险

使用特权

评论回复
27
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标准本来就是如此,并未错误。

使用特权

评论回复
28
zhaoyu2005| | 2010-10-28 09:24 | 只看该作者
叶大侠,这个编译器确实有时会出现莫名其妙的问题,我曾经有幸见过一次,编译通过,下载到单片机,运行时数码管显示不对(不是正常的几个字符),重新编译了下,再下载就好了,同事弄得,我在旁边看的,同事说偶尔会遇到,我自己没弄出来过
8.05和谐版

使用特权

评论回复
29
diweo| | 2010-10-29 10:52 | 只看该作者
本帖最后由 diweo 于 2010-10-29 10:54 编辑

我经常碰到提示一个文件尾部missing new line.我就又回车又空格(不同组合)多了好几行,还提示missing new line。有时候重新编译就好了。有时候怎么弄都还有。虽然只是个警告,并不影响程序运行,可是经常被警告,感觉很不好。。不知道大伙碰到没?

使用特权

评论回复
30
yewuyi| | 2010-10-29 10:57 | 只看该作者
叶大侠,这个编译器确实有时会出现莫名其妙的问题,我曾经有幸见过一次,编译通过,下载到单片机,运行时数码管显示不对(不是正常的几个字符),重新编译了下,再下载就好了,同事弄得,我在旁边看的,同事说偶尔会 ...
zhaoyu2005 发表于 2010-10-28 09:24


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

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

编译器也是机器,不会出现时好时不好的问题,如果出现这种问题,要么是代码问题,要么是执行操作问题,要么是工具问题。

使用特权

评论回复
31
yewuyi| | 2010-10-29 10:59 | 只看该作者
我经常碰到提示一个文件尾部missing new line.我就又回车又空格(不同组合)多了好几行,还提示missing new line。有时候重新编译就好了。有时候怎么弄都还有。虽然只是个警告,并不影响程序运行,可是经常被警告, ...
diweo 发表于 2010-10-29 10:52



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

这个在很多编译器中都存在类似警告。

使用特权

评论回复
32
yewuyi| | 2010-10-29 11:00 | 只看该作者
好像是因为C文件对最后一行的字符格式是有要求的,如果你最后一个字符输入的格式不符合,就会出现这个警告,一般在最后一行切换到EN输入状态下回车一下就可以。

使用特权

评论回复
33
zhaoyu2005| | 2010-11-1 10:50 | 只看该作者
配置字是写在程序开头的,下载器出问题倒是有可能,不过不正常的程序,再下载到别的片子里也不行,重新编译过正常的,再下载到别的片子里也正常,极少出现下到这个片子里程序正常,下到另外的片子里程序不正常

使用特权

评论回复
34
ys7369| | 2011-6-17 20:57 | 只看该作者
1.碰到过两个变量定义在一个bank里,编译没错误,从变量窗口看两个变量地址连续的,单步执行改其中一个变量从变量窗口上看把另外一个变量改了,没办法把其中一个变量更换到另外一个bank里就好了。。。。
我真的不知道更改一个变量bank位置其他都不动的情况下跟我水平之间是不是有关系。。但是真的只换了一下bank空间,,而且两个bank都是使用80%左右 开始和后来都没编译错误。。。。
2.还碰到过一个函数里两个连续的if()语句,第一个执行过后,单步调试发现第二个不执行被跳过了,,没办法把第二个语句掉到第一个前面去就好了,,(两个语句之间没任何变量相关联。。。)感觉上就是被编译器搞漏掉了的样子

使用特权

评论回复
35
su_mj000| | 2011-6-20 01:17 | 只看该作者
换位思考一下吧。如果你来设计编译器,会怎么样呢?

不自动分页也有其合理性的。

使用特权

评论回复
36
dodome521| | 2011-6-20 18:04 | 只看该作者
本帖最后由 dodome521 于 2011-6-20 18:14 编辑

不得不承认,第3条的现象俺也时有遇到。怀疑是D版问题,遇到类似问题时只能慢慢找,想办法绕过。还有,在编译器选项里需要设置为ICD2调试(如果用ICD2调试的话),有些新手没有注意到这些,RAM用的较多时,会覆盖到为ICD2分配的RAM空间,也会出现第3条的现象。

使用特权

评论回复
37
JX小自| | 2012-4-10 19:22 | 只看该作者
子程序不能太大应该是跟PIC的寻址范围有关吧

使用特权

评论回复
38
Wobbi| | 2012-4-14 15:30 | 只看该作者
建議用彙編語言編程, 雖然繁瑣點, 好在最為底層, 所有問題都直接, 軟硬件都了解, 編程就容易了.

使用特权

评论回复
39
与时俱进| | 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;        //运行这条的结果,只写入一个字节

使用特权

评论回复
40
与时俱进| | 2012-10-14 09:05 | 只看该作者

就是指这个帖子

使用特权

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

本版积分规则