【发布时间】:2014-11-04 07:06:33
【问题描述】:
我之前使用 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,但问题仍然存在。 请一些机构解释为什么会这样。我尝试了不同的代码,在所有代码中,常量和局部变量都可以正常工作,但全局变量提供了奇怪的行为。
【问题讨论】:
-
您使用哪种 8051 变体?哪种内存模型?
-
At89c51 和小内存模型。
标签: c global-variables codeblocks 8051 sdcc