在用VC 6.0做一個信號發生器的專案,讀取大播表中的資料到二進制資料塊,然后下發給信號發生器,使其按照大波表來輸出波形。控制命令為:
:DATA:DAC16 VOLATILE, END,#532768<binary-block-data>
大波表的資料要讀到<binary-block-data>中,資料范圍0000~3FFF,
命令發下去總是提示命令錯誤,不知道具體錯在哪里,所以想捕獲一下發下去的播表資料,看是不是問題出在那。
但是不知道怎么來實作捕獲,按照下圖的效果來查看:

請有經驗的高手給與幫助,具體點,求代碼,謝謝
uj5u.com熱心網友回復:
#include <stdio.h>
#include <string.h>
void HexDumpToBuf(char *sbuf,char *buf,int len,int addr) {
int i,j,k,L;
char binstr[80];
L=0;
for (i=0;i<len;i++) {
if (0==(i%16)) {
sprintf(binstr,"%08x -",i+addr);
sprintf(binstr,"%s %02x",binstr,(unsigned char)buf[i]);
} else if (15==(i%16)) {
sprintf(binstr,"%s %02x",binstr,(unsigned char)buf[i]);
sprintf(binstr,"%s ",binstr);
for (j=i-15;j<=i;j++) {
sprintf(binstr,"%s%c",binstr,('!'<buf[j]&&buf[j]<='~')?buf[j]:'.');
}
L+=sprintf(sbuf+L,"%s\n",binstr);
if (L>=10000) return;
} else {
sprintf(binstr,"%s %02x",binstr,(unsigned char)buf[i]);
}
}
if (0!=(i%16)) {
k=16-(i%16);
for (j=0;j<k;j++) {
sprintf(binstr,"%s ",binstr);
}
sprintf(binstr,"%s ",binstr);
k=16-k;
for (j=i-k;j<i;j++) {
sprintf(binstr,"%s%c",binstr,('!'<buf[j]&&buf[j]<='~')?buf[j]:'.');
}
L+=sprintf(sbuf+L,"%s\n",binstr);
if (L>=10000) return;
}
}
int main() {
char str[1024];
char buf[10240];
int flag=1;
int datalen=3;
int data[3]={1,2,3};
int i,L;
L=sprintf(str,"DATA:VOLETILE%d,%d",flag,datalen);
for (i=0;i<datalen;i++) memcpy(str+L+i*sizeof(int),&data[i],sizeof(int));
HexDumpToBuf(buf,str,L+3*sizeof(int),0);
printf("%s",buf);
return 0;
}
//00000000 - 44 41 54 41 3a 56 4f 4c 45 54 49 4c 45 31 2c 33 DATA:VOLETILE1,3
//00000010 - 01 00 00 00 02 00 00 00 03 00 00 00 ............
//
uj5u.com熱心網友回復:
就是把資料按BYTE陣列一個個列印,列印的時候用十六進制等顯示轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/124018.html
標籤:硬件/系統
上一篇:讀波形檔案并存到儀器記憶體
