저는 C 프로그래밍을 처음 접했을 때 MCU 용 펌웨어 응용 프로그램을 만들고 있습니다. 이 방법은 KEIL 컴파일러 (Big Endian)를 사용할 때 제대로 작동했지만 SDCC 컴파일러 (Little Endian)로 전환하면 제대로 작동하지 않습니다. 누군가 내가 뭘 잘못하고 있는지 설명해 주시겠습니까 ???SDCC (Little Endian) 컴파일러를 사용할 때이 산술에 어떤 문제가 있습니까?
대상 장치는 8051 아키텍처를 기반으로하는 Silicon Labs C8051F320입니다.
unsigned **int** MotorSteps = 0; //"Global" variables
unsigned **int** MotorSpeed = 0;
bit RampUp()
{
float t = 0;
t = MotorSteps;
if (t < 51)
{
t = (1-((50 - t)/50))*15;
t = (t * t);
MotorSpeed = 100 + t;
return 0;
}
else return 1;
}
ADDED : 첫째, 나는 지금 MotorSteps을 변경하고 MotorSpeed는 부호의 int로. 내 디버거에서 어떤 이유로 if-statement 줄에이 함수의 첫 번째 입구에 중단 점을 설정하면 MotorSteps = 00이므로 t도 0에 할당되어야하지만 디버거는 t = 0.031497을 표시합니다. (소수). 디버거가 16 진수로 표시되도록 전환하면 t = 0x3d010300이됩니다. 그것은 절대 할당되지 않는 것처럼 ...
MotorSteps와 SetSpeedHz가 어떻게 생겼는지 알 수 있습니다. –
MotorSpeed에 대한 선언을 보는 것도 도움이됩니다. – semaj
엔디안 종속적 인 코드에는 아무 것도 없습니다. 문제는 무엇입니까? – AnT