0

以下の 2 つのコード ケースの違いを理解するのに問題があります。ケース 1は期待どおりに機能していますが、ケース 2はそうではありません。

問題の説明:デバイス ファイルに DWORDS のセットを書き込んで、DMA をトリガーする必要があります。DMA 容量は 128*4 バイト (128 DWORD) です。したがって、デバイスファイル記述子に128バイトを書き込んだ後、DMA(ioctlを使用)をトリガーして、容量を最大限に活用したいと考えています。個々の Dword に対してもこれを行うことができます。

2 つのケースの基本的な違い: 最初のケースでは 128 個の DWORD を一度にファイルに書き込み、2 番目のケースでは DWORD を個別に書き込み、128 個の DWORD が書き込まれた後に DMA をトリガーします。

どちらの場合も、ファイルに書き込まれるデータは同じですか? 2番目は機能していないため、何か問題があります。助けてください。動作しないということは、DMA コマンドの期待される結果が発生していないことを意味するため、2 番目のケースでは、ファイル記述子のデータは 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);
4

0 に答える 0