我看了一下xilinx的AXI-DMA example,现在我陷入了XAxiDma_SimplePollExample
for(Index = 0; Index < MAX_PKT_LEN; Index ++) {
TxBufferPtr[Index] = Value;
Value = (Value + 1) & 0xFF;
}
变量TxBufferPtr
是一个指针,指向内存地址TX_BUFFER_BASE
u8 *TxBufferPtr;
TxBufferPtr = (u8 *)TX_BUFFER_BASE ;
为什么它们使用指针通过循环存储数据?我了解到,我应该使用一个数组来初始化内存并使用该数组的起始地址。所以我的例子看起来像这样
u8 TxBufferPtr[MAX_PKT_LEN];
for(Index = 0; Index < MAX_PKT_LEN; Index ++) {
TxBufferPtr[Index] = Value;
Value = (Value + 1) & 0xFF;
xilinx如何避免将其他数据放置在指针地址+循环范围内,以便循环覆盖该数据? 当我使用它时有什么技巧吗?还是仅仅是“错误的”代码和指针的使用?
答案 0 :(得分:1)
两个代码示例之间存在巨大差异。
您的代码
u8 TxBufferPtr[MAX_PKT_LEN];
将为数组分配内存。通常将MAX_PKT_LEN
u8保留在堆栈中。
此代码:
u8 *TxBufferPtr;
TxBufferPtr = (u8 *)TX_BUFFER_BASE ;
不为阵列分配内存。该代码假定TX_BUFFER_BASE
是已经为程序分配/保留的某些内存的地址。
如果您使用的是没有MMU的嵌入式系统,则可以将其直接映射到FPGA内部某些硬件组件的内存。在小型的简单嵌入式系统中,通常使用指向固定地址的指针来映射硬件组件。 FPGA设计人员将为您提供TX_BUFFER_BASE
的值,因为由FPGA设计人员来决定如何使用存储空间。