gpt4 book ai didi

c - 将 int 替换为 c 中的常量

转载 作者:行者123 更新时间:2023-11-30 14:39:18 25 4
gpt4 key购买 nike

我正在修改一些提供给我的代码,用于使用 DMA 处理 FPGA 和处理器之间的数据传输。页面顶部定义了一个常数,例如 #define NUM_WORDS_IN_MEMORY(20),它表示传输到 FPGA 的字数。我需要传输到 FPGA 的数据并不总是以相同大小的数据包形式出现,因此我想用一个变量替换 NUM_WORDS_IN_MEMORY。 NUM_WORDS_IN_MEMORY 仅在同一函数中的三个地方使用。前两个是 for 循环,当替换为变量大小时,它们会按预期运行。最终用法将长度写入 DMA 的长度寄存器。如果我更改其他两个用法的大小并将其保留为 NUM_WORDS_IN_MEMORY,它仍然有效。这是有问题的代码片段

//This is a definition for writing to DMA
#define alt_write_word(dest, src) (*ALT_CAST(volatile uint32_t *, (dest)) = (src))

...
...

addr = fpga_dma_virt + DMA_LEN_REG_OFST; // Address to write to
data = NUM_WORDS_IN_MEMORY * sizeof(uint32_t);
alt_write_word(addr, data);

在我看来,从 NUM_WORDS_IN_MEMORY 切换到 size 告诉 FPGA 读取超出预期的长度。上面定义的 Int 和常量有区别吗?

最佳答案

DMA Controller 使用 16 位传输大小。我假设由于我将 size 乘以值为 4 的 sizeof(uint32_t) ,因此总会有偶数个字节。如果我从 size = 7 (我以前的尺寸)更改为 size = 8 一切正常。

关于c - 将 int 替换为 c 中的常量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56135821/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com