이전에 Keil을 8051 마이크로 컨트롤러 프로그래밍에 사용했습니다. 어떤 이유로 SDCC에서 코드를 작성해야하지만, 오늘은 컴파일러에서 매우 이상한 행동에 직면하고 있습니다. 나는 코드 블록 IDE 12.11과 SDCC 3.4 버전을 사용하고있다.이상한 8051에 대한 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 변형을 사용 하시나요? 어떤 메모리 모델입니까? –
At89c51 및 작은 메모리 모델. –