我以前使用 Keil 对 8051 微控制器进行编程。出于某种原因,我必须在 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”字符,但它只打印一次。问题出在全局可验证数字[] 数组中。
该函数仅适用于常量值,但不适用于基于参数的变量。
我在这里发布这个问题是因为我认为这个问题与一些 C 语言技巧有关,我无法弄清楚。
我尝试重新安装编译器和IDE,但问题仍然存在。请一些机构解释为什么会这样。我尝试了不同的代码,在所有代码中,常量和局部变量都可以正常工作,但全局变量提供了奇怪的行为。