FATFS 라이브러리의 인터페이스 기능을 구현하려고합니다. 구현시 uint8_t *가 다른 라이브러리에서 내부 SD 카드에 쓰여야하는 데이터를 필요로합니다. 데이터는 BSP_SD_WriteBlocks (uint32_t *, uint64_t, uint32_t, uint32_t) 함수를 사용하여 라이브러리에 기록해야합니다.uint8_t *를 uint32_t *로 캐스팅하는 방법
/*
* Write data from a specific sector
*/
int SDMMC::disk_write(const uint8_t *buffer, uint32_t sector, uint32_t count)
{
int res = BSP_SD_WriteBlocks((uint32_t*)buffer, (uint64_t)sector, 512, count);
if (res == MSD_OK) {
return RES_OK;
} else {
return RES_ERROR;
}
}
당신은 내가 32 비트 메모리 주소로 8 비트 메모리 주소를 캐스팅하려고이 그렇게 할 올바른 방법이라고 생각하지 않습니다 볼 수 있듯이 (아래 참조).
유감스럽게도 disk_write 함수가 uint8_t *를 받아 들일 수 있도록 함수 인수를 변경할 수 없으며 BSP_SD_WriteBlocks는 단지 uint32_t *를 허용합니다.
최선을 다하고 금식하는 방법은 무엇입니까?
유효한 캐스트입니다. 그러나'count' 인수는 아마도 쓸 바이트 수 ('uint8_t' 요소)일까요? 그리고'BSP_SD_WriteBlocks' 함수가 32 비트 단어를 쓰면'count'를 4로 나눌 필요가 있습니다. 그렇지 않으면 많이 쓰여지고 (버퍼의 범위를 벗어납니다). –
가능한 endianess 문제입니다. (엄격한 앨리어싱 규칙을 위반할 수도 있음). – Jarod42