我覺得以下應該工作,看看我對你的問題的評論作出解釋。你能向我解釋爲什麼memcpy只有300字節的步驟?
volatile unsigned char *DAQ_BUFF = (unsigned char *)0xC6010000;
extern unsigned char *DAQ_BUFF;
unsigned char *Dest = (unsigned char *)0xC6020000;
int lv;
for(lv=0;lv<480;lv++)
{
memcpy(Dest, DAQ_BUFF, 300);
memcpy(Dest+300, DAQ_BUFF+300, 300);
memcpy(Dest+600, DAQ_BUFF+600, 152);
Dest += 752;
}
你的代碼讓我假設DAQ_BUFF
足夠大,可容納752個字節。我之所以假設這是因爲沒有信號/標誌檢查來查看您的DAQ_BUFF
中的'接下來的300'字節的數據是否'有效'。如果你需要檢查這個我本來期望是這樣的:
for(lv=0;lv<480;lv++)
{
while (DAQ_BUFF_DATA_IS_NOT_VALID); /* wait for DAQ data to be valid */
memcpy(Dest, DAQ_BUFF, 300);
/* if DAQ_BUFF can only hold 300 bytes then it must be read from the beginning again */
while (DAQ_BUFF_DATA_IS_NOT_VALID); /* wait for DAQ data to be valid */
memcpy(Dest+300, DAQ_BUFF, 300);
while (DAQ_BUFF_DATA_IS_NOT_VALID); /* wait for DAQ data to be valid */
memcpy(Dest+600, DAQ_BUFF, 152);
Dest += 752;
}
這似乎更像是一段代碼,有300
一個DAQ_BUFFER_SIZE
如果情況並非如此,你的DAQ_BUFFER_SIZE
足以容納752個字節,我期望以下內容:
for(lv=0;lv<480;lv++)
{
/* Do you first need to check if DAQ_BUFF-data is valid? */
memcpy(Dest, DAQ_BUFF, 752);
Dest += 752;
}
你不會提前DAQ_BUFF嗎? –
目標內存指向哪? – const
你爲什麼要分三部分複製?請縮進你的代碼,這看起來很糟糕(部分原因是TAB,你不應該使用它)。 –