我在理解以下两个代码案例之间的差异时遇到了问题。案例 1正在按预期工作,而案例 2则没有。
问题陈述:我需要在我的设备文件上写一些 DWORDS 并触发 DMA。DMA 容量为 128*4 字节(128 DWORDS)。所以我想在将 128 个字节写入设备文件描述符后触发 DMA(使用 ioctl)以充分利用容量。我也可以对单个 Dwords 执行此操作。
两种情况的基本区别: 第一种情况的目的是一次将 128 个 DWORDS 写入文件,第二种情况单独写入 DWORDS,并在写入 128 个 DWORDS 后触发 DMA。
两种情况下写入文件的数据是否相同?第二个不工作,所以那里出了点问题。请帮忙。通过不工作,我的意思是 DMA 命令的预期结果没有发生,因此在第二种情况下,文件描述符中的数据与 dma 命令之前的第一种情况不同。
案例1(工作)
int input_dwords[128] = {0xAABBCCDD, 0XBBCCDDAA, ....} //128 DWORDS (actually this data is in
//text file just putting in array for
//illustration)
int cmd_buf = (int*)malloc(sizeof(int) * 128); //space for 128 DWORDS
int* cur = cmd_buf;
for(int i = 0; i< 128; i++)
{
*cur = input_dword[i]
cur++;
}
//Write to file in one shot
write(fd, cmd_buf, sizeof(int)*128);
//trigger DMA (ioctl)
trigger_dma(fd);
案例 2(不工作)
int input_dwords[128] = {0xAABBCCDD, 0xBBCCDDAA, ....}
int* cur = (int*)input_dwords;
for(int i = 0 ; i< 128 i++)
{
//writing to file one DWORD at a time.
write(fd, cur, sizeof(int));
cur++;
}
//trigger DMA (ioctl)
trigger_dma(fd);