This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
按照上面这个图中显示:
程序是对CPU1核中的数组packetData[PACKET_LENGTH]对应的地址;进行赋值。
但是,HWREG((uint32_t *)packetData +i) = i;这个语句,在赋值之后,还要对对应的地址,读取出来所赋的值?我对这个语句的理解是否有问题?
整个大的结构是一个循环,PACKET_LENGTH等于132,也就是说,这个循环是需要运行33次的,那么对于packetData[PACKET_LENGTH]而言,数组中数据的长度应该是填满了前33,但是才debug的结果来看,循环只进行了3次
这是什么原因呢?
特来请教
谢谢
HWREG((uint32_t *)packetData +i) = i;
上面这个语句的含义,有点不太明了。查资料说是对寄存器(uint32_t *)packetData +i里面的数据进行访问。
您可以看一下在工程内的定义
//*****************************************************************************
//
// Macros for hardware access
//
//*****************************************************************************
#define HWREG(x) \
(*((volatile uint32_t *)((uintptr_t)(x))))
#define HWREG_BP(x) \
__byte_peripheral_32((uint32_t *)(x))
#define HWREGH(x) \
(*((volatile uint16_t *)((uintptr_t)(x))))
#define HWREGB(x) \
__byte((int16_t *)(x),0)
它是一个宏定义。关于作用,您的理解是正确的。
一般的使用如下
if((ETHERNET_DMA_CH0_STATUS_AIS |
ETHERNET_DMA_CH0_STATUS_RBU) ==
(HWREG(Ethernet_device_struct.baseAddresses.enet_base +
ETHERNET_O_DMA_CH0_STATUS) &
(uint32_t)(ETHERNET_DMA_CH0_STATUS_AIS |
ETHERNET_DMA_CH0_STATUS_RBU)))
其中