我正在尝试使用带有GCC ARM-none-eabi编译器的C中的STM32F103蓝 {MOD}药丸板来推出我自己的USB设备,但我遇到了一些我想要了解的奇怪行为。我创建了一个结构,用于建模与USB外设相关的端点缓冲区描述符表:typedef struct _EP_BUF_DSCR { uint32_t ADDR_TX; uint32_t COUNT_TX; uint32_t ADDR_RX; uint32_t COUNT_RX;} EP_BUF_DSCR;
我已经创建了一个指向其中一个结构的指针,并将其设置为解决MCU的USB数据包存储区的开头:EP_BUF_DSCR *EP0_DSCR = (EP_BUF_DSCR *) 0x40006000;
所以现在我可以通过取消引用相应的字段并为它们分配值来设置ADDR_TX和ADDR_RX字段。但是,当我尝试使用COUNT_RX字段执行此操作时,它似乎没有任何效果:// debugger memory view shows register as set to 0 after running this:EP0_DSCR->COUNT_RX = 0x8400;
但我可以通过直接创建指针并取消引用它来更改此寄存器中的值:// debugger memory view shows register set to correct value after running:*((uint32_t *)(0x40006000 + 12)) = 0x8400;
有人可以提供一些有关为何发生这种情况的见解吗 ,是我无意中依赖于未记录的编译器行为?
一周热门 更多>