2

言語:C PIC:16F84A プログラム:CCS PCW

次のコードをコンパイルすると、コンパイラはFORが常にtrueであると文句を言います(たぶん、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、...しかし、最初のサイクルの後で停止します。

4

3 に答える 3

5

使用する

    signed int i;

それ以外の

    int i;

CCSコンパイラでは、デフォルトでは整数は符号なしです。

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

38ページを確認

「floatを除くすべての型は、デフォルトでは符号なしですが、[それらの]の前にはunsignedまたはsignedが付いている場合があります。

于 2013-03-08T07:45:00.850 に答える
1

コンパイラが壊れているかint、デフォルトで署名されていない非標準のがらくたです。

代わりに、実際の準拠したCコンパイラを使用することをお勧めします。

于 2013-03-08T07:51:23.980 に答える
0

コンパイラによって生成されたアセンブリコードを確認してください。そうすれば、確実にわかります。または、ここに投稿して、特定のコンパイラを所有/インストールする必要がないようにします。アセンブリ(特にPIC16のような死んだ単純なマイクロ)の良い考えは、それが実際に何をしているのかを決して隠すことができないということです:-)

いくつかのツールの品質に関するここでのコメントに同意します。Microchipは、とにかく独自のPIC16 Cコンパイラを持っていなかったので、それらを非難することはできません:-(

于 2013-03-18T17:53:29.213 に答える