홀수 번지의 메모리에 16 비트 액세스가 발생하면 dsPic30/33 및 18E/F 부품에서 메모리 오류가 발생합니다. malloc()을 사용하여 힙 메모리를 할당 할 때 반환 주소가 워드로 정렬되도록 보장됩니까? (즉 짝수)마이크로 칩 XC16에서 malloc()은 워드 정렬 주소를 생성하도록 보장됩니까?
malloc, 당신은 기억할 것입니다. 단어가 아닌 바이트 단위로 인수를 취합니다.
(16 비트 언어 도구 라이브러리 참조 설명서 50001456J.pdf) 찾을 수 있었던 설명서는이 문제에 대한 설명이 아닙니다.
==== 편집 : malloc()에서조차도 (단어 정렬 된) 주소 만 수신 했으므로 추가해야합니다. 모든 것이 잘 작동하고 있습니다. 그럼에도 불구하고 이상한 주소를 얻는다면 내 코드가 함정을 일으킬 것입니다 (왜냐하면 나는 ((uint16_t *)foo)[3] = 20000;
같은 것을 수행하기 때문입니다). 따라서 짝수 주소가 항상 malloc()에 의해 반환되도록하고 싶습니다.
언어에 16 비트 액세스를 수행하는 모든 유형이 있습니까? 'some_type foo; foo = 3;'= '는 16 비트 액세스를합니까? 그렇다면'malloc' *이 작동해야합니다. –
@DavidSchwartz 잘 구현이 도청되었을 가능성이 있습니다 –
버그는 문서가 도움이되지 않습니다. 버그는 일반적으로 문서화되지 않았습니다. 실제 16 비트 타입을 가지고 있다면, malloc은 합법적 인 포인터를 주어야한다. –