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.

TMDSCNCD28388D: C2000 ETHERNET

按照上面这个图中显示:

程序是对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里面的数据进行访问。

    特来请教一下,访问的目的和访问之后,数据去了哪里呢?

    谢谢

  • 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)))

    其中