나는 16 비트 마이크로 컨트롤러 용 C 코드를 작성 중이다. 대상에서 응용 프로그램을 디버깅하면 결국 AddressError ISR이 발생합니다. 데이터 시트를 읽었을 때 홀수 메모리 주소에 정렬 된 16 비트 값을 읽거나 쓰려고하면 이런 일이 발생할 수 있다고합니다. 나는 그것이 의미하는 바를 이해한다고 생각하지만 그것은 옳은 것처럼 보이지 않습니다. 이런 구조체를 만들면 다음과 같은 것을 의미하지는 않습니다 :16 비트 아키텍처에서 주소 오류의 원인은 무엇입니까?
struct foo{
uint8_t thing1;
uint16_t thing2;
};
나는 결코 오류없이 thing2를 읽거나 쓸 수 없습니까? 그렇지 않다면, 컴파일러는 자동적으로 1과 2 사이의 8 비트를 덧붙여서 두 번째가 짝수 주소에 올바르게 정렬되도록 할 것입니까? 그렇다면 주소 오류는 어떻게 발생합니까?
질문에 세부 정보를 추가해야 할 수도 있습니다. 그러나 컴파일러의 정렬을 검사하여 16 비트로 정렬되는지 확인하십시오. 정렬을 사용하면 위의 구조체가 작동합니다. – PeterJ
프로세서 설명서를 확인하여 합법적 인 주소를 확인하십시오. 그런 다음 링커 명령 파일을 확인하십시오. – anishsane