为什么这种情况总是如此?

时间:2013-03-07 05:40:14

标签: c embedded microcontroller pic

语言:C PIC:16F84A 计划:CCS PCW

当我编译以下代码时,我的编译器抱怨FOR总是为真(也许int我不支持负值?):

#include <16F84A.h>
#FUSES XT
#use delay(clock=4M)
byte const display[10] = {63,6,91,79,102,109,124,7,127,103};

void main()
{
   set_tris_b(0);
   while(True)
   {
   int i;
      for(i=9;i>=0;--i)
      {
         output_b(display[i]);
         delay_ms(300);
      }
   }
}

其PIC倒计时项目,所以: 9,8,7,6,5,4,3,2,1,0,9,8,7,6,5,4,3,2,1,0,9,8,7,6,.. 。 但它在第一个周期后停止。

3 个答案:

答案 0 :(得分:5)

使用

    signed int i;

而不是

    int i;
默认情况下,

整数在CCS编译器中是无符号的。

http://www.ccsinfo.com/downloads/ccs_c_manual.pdf

检查第38页

  

“默认情况下,除浮动之外的所有类型都是无符号的;但是,[它们]可以在无符号或签名之前。

答案 1 :(得分:1)

您的编译器要么已损坏,要么是默认情况下int未签名的非标准废话。

我建议使用真正的,符合标准的C编译器。

答案 2 :(得分:0)

检查编译器生成的汇编代码,您肯定知道。或者在这里发布,这样我们就不必拥有/安装特定的编译器。很好的思考装配(特别是像PIC16这样的死简单微处理器)是它永远无法隐藏它实际上做的事情: - )

我同意一些关于某些工具质量的评论,并且Microchip从未拥有过他们自己的PIC16 C编译器,因此我们不能责怪他们: - (