처음으로 이런 식으로 보입니다. 하드웨어 오류라고 의심하기 시작했습니다. 배열 "test"의 내용을 보내려고 할 때마다 그 배열이 4 개보다 큽니다. 또는 선언에있는 모든 요소를 초기화합니다.이 요소에는 초기화하려고하는 값 대신 0xff가 들어 있습니다.AVR gcc, 이상한 배열 동작
이 작동합니다. I는 동안의 어레이로부터 값을 판독 할 때 모두 판독 테스트 값과 일치 (LCD와 UART로 전송)
uint8_t i=0;
uint8_t test[4] = {1,2,3,4};
while(i<5){
GLCD_WriteData(test[i]);
USART_Transmit(test[i]);
i++;
}
그것을 반환하지 않는이 대신 시험 [I] 값 0xff로 :
uint8_t i=0;
uint8_t test[5] = {1,2,3,4,5};
while(i<5){
GLCD_WriteData(test[i]);
USART_Transmit(test[i]);
i++;
}
하지만이 기능이 작동합니다. 그것은 적절한 값
uint8_t i=0;
uint8_t test[6] = {1,2,3,4,5};
while(i<5){
GLCD_WriteData(test[i]);
USART_Transmit(test[i]);
i++;
}
이 또한 작동을 반환 : 나는 다른 하나에 대한 MCU를 교환 리눅스
에서 컴파일하고가 예상대로 작동 할 때 잘 작동
uint8_t i=0;
uint8_t test[5];
test[0]=1;
test[1]=2;
test[2]=3;
test[3]=4;
test[4]=5;
while(i<5){
GLCD_WriteData(test[i]);
USART_Transmit(test[i]);
i++;
}
. 하드웨어 문제 여야합니다.
이 질문은 특히 명확하지 않습니다. 제발 코드를 붙여 놓지 마시고 우리가 정신적으로 그것을 차용하지 않게하십시오. * 문제가 무엇인지 설명하십시오. 당신은 "0xFF"를 반환한다고 - 어디서부터? 이 코드는 아무 곳에도 표시되지 않습니다. 전송 문제가있는 경우 수신 측 결과에 신경을 쓰는 이유는 무엇입니까? 문제를 격리하십시오. 너 UART를 전송하고있어, 그렇지? 그럼 명백한 디버깅 단계는 실제로 포트에서 나오는 * 것을 보는 것입니다. –
배열 크기가 변경 되더라도 루프 경계가 변경되지 않는다는 것을 알고 있습니까? 그것은 항상 'while (i <5)'입니다. 이것이'ARRAY_LENGTH' 매크로가 유용한 이유입니다. –
제대로 게시하기 위해 내 게시물을 편집했습니다. 문제는 내가 normaly 할 배열을 할 때 배열 [] = {1,2,3} 및 그것은 0xff 포함 된 내 값 대신 4 개의 요소보다 큽니다. 6 개 이상의 요소 배열을 선언하고 마지막 요소를 건너 뛰고 초기화하면 잘 동작합니다. 나는 게으름에서 값을 바꾸지 않았고 (i <5), 문제에 영향을 미치지 않습니다. 배열에 4 개의 요소가 있다면 그것들을 올바르게 출력하고 + 정크 하나를 출력합니다. 5 개의 요소가 있다면 0xff를 5 번 인쇄합니다. 6 개의 요소가 있지만 5 개가 초기화되면 5 개의 적절한 값이됩니다. – Barricadexx