私はこれ、これ、これを読みましたが、私が知りたいことに答えてくれるものはありません
PId のセット (それぞれ 3 バイト) がハードウェアから返され、未加工の配列 ( buffer
) に保存されます。このデバイスは正確に 84 バイトを返します。
次に、これらの PId を、このデバイスの API ライブラリで読み取り可能な配列にコピーする必要があります。
これが私のコードです
#pragma pack (1)
typedef unsigned char PId[3];
typedef PId PIDs[28];
int GetList(PId* plist){
unsigned char buffer[84];
//... Reads the data from hardware memory to buffer
if (RunCMD(0xCD, &buffer)){
// buffer has the correct data now 'AAAA...'
memcpy(&plist,buffer, 84);
printf("%02X%02X%02X\n", buffer[0], buffert[1], buffer[2]);
printf("%02X%02X%02X\n", buffer[3], buffer[4], buffer[5]);
return 0;
}
return 1;
}
int main(void) {
...
PId plist_a;
GetList(&plist_a);
printf("%02X%02X%02X\n", plist_a[0][0], plist_a[0][1], plist_a[0][2]);
printf("%02X%02X%02X\n", plist_a[1][0], plist_a[1][1], plist_a[1][2]);
...
}
どういうわけか、このコードは適切なデータをPIDs
配列にコピーしません。buffer
には適切なデータがありますが、 の後memcpy
にpids
は同じデータがありません。
私は何か間違ったことをしていることを知っていますが、それを見つけることができません。
それが役立つ場合は、WindowsGCC
でコードをコンパイルしていますARM CPU
編集:皆さんを混乱させて申し訳ありません。実際にはコードは機能していましたが、コードの一部を見逃していました。私が修正したもの。 pids
型ではなく、PIDs
それへのポインタです。