1
我以前使用Keil編程8051微控制器。出於某種原因,我必須在SDCC中編寫代碼,但是今天我在編譯器中遇到了非常奇怪的行爲。我正在使用代碼塊IDE 12.11和SDCC 3.4版本。奇怪805的sdcc編譯器行爲
我在編譯這段簡單的代碼。
#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'字符兩次,但它只打印一次。 問題出在全局可數字[]數組中。
該函數只適用於常量值,但不適用於基於參數的變量。
我在這裏發佈這個問題,因爲我認爲這個問題是關於一些C語言技巧,我無法弄清楚。
我試過重新安裝編譯器和IDE,但問題依然存在。有些人請解釋爲什麼會發生這種情況。我已經嘗試了不同的代碼,並且在所有代碼中常量和局部變量都可以正常工作,但全局變量提供了奇怪的行爲
您使用哪個8051變體?哪種內存模式? – 2014-09-12 20:34:53
At89c51和小內存模型。 – 2014-09-13 11:50:15