私は以前、8051 マイクロコントローラのプログラミングに Keil を使用していました。何らかの理由で SDCC でコーディングする必要がありますが、今日、コンパイラで非常に奇妙な動作に直面しています。コード ブロック IDE 12.11 および SDCC 3.4 バージョンを使用しています。
この単純なコードをコンパイルしています。
#include <mcs51/8051.h>
#include "Serial.h"
unsigned char digits[5]={0};
void main(void)
{
serial_init(-13);
digits[2]='a';
serial_send(digits[2]);
serial_send('a');
while(1)
{
}
}
これがserial_send関数の定義です。
void serial_send(unsigned char dat){
while(!TI);
TI = 0;
SBUF = dat;
}
問題は、コードによれば、端末で「a」文字を2回出力するはずなのに、1回しか出力していないことです。問題は、グローバルな検証可能な digits[] 配列にあります。
この関数は、定数値でのみ適切に機能しますが、引数に基づいた変数では機能しません。
この問題は、私が理解できないC言語のトリックに関するものだと思うため、ここにこの質問を投稿しています。
コンパイラと IDE の両方を再インストールしようとしましたが、問題は同じままです。なぜこれが起こっているのか説明してください。私はさまざまなコードを試しましたが、すべてのコードで定数とローカル変数は正常に動作しますが、グローバル変数は奇妙な動作を提供します。