다음 바이트 주소를 사용하여 임베디드 응용 프로그램 (ARM 베어 메탈)에서 주변 장치 용 32 비트 레지스터 집합을 가지고 있습니다.'C'구조체 요소 사이에 수동으로 패딩 바이트 삽입
CTL 0x0;
STAT 0x4를
TXR 0x8이 < - 불연속 주소
RXR가 0x20
DAT1 0x30에 < - 불연속 주소
DAT2 × 40 < - 불연속 주소
와 너무
struct my_peri {
uint32_t CTL;
uint32_t STAT;
uint32_t TXR;
uint32_t RXR;
uint32_t DAT1;
uint32_t DAT2;
};
struct my_peri* pPeri0 = (uint32_t*) (BASE_ADDRESS_OF_MY_PERI_0);
내가 액세스하면 오른쪽에게 어드레스 권리를 얻기 위하여
pPeri->RXR; // This will point to (BASE_ADDRESS + 0x10)
// But the actual address i want to refer is (BASE_ADDRESS + 0x20)
나 수동 주연 사양에 따라 에러를 제공
struct my_peri {
uint32_t CTL;
uint32_t STAT;
uint32_t TXR;
uint32_t RESERVED[4]; // 0x10 to 0x1c
uint32_t RXR;
uint32_t RESERVED_1[3]; // 0x24-0x2c
uint32_t DAT1;
uint32_t RESERVED_2[3]; // 0x34-0x3c
uint32_t DAT2;
};
그러나 RESERVED, RESERVED_1 및 RESERVED_2 모든 액세스 사이에 요소를 추가했다.
Is there a way to add address spacing between the struct elements?
Without adding RESERVED elements
If not, is there a way to group these registers into a single data structure?.
With each register pointing to the right address.
저는 ARM-GCC toolchain을 사용하고 있습니다.
'휘발성'(예 : '휘발성으로 간주 됨 유해'등)을 원할 수도 있습니다. –