アドレスとデータを吐き出すフラッシュ メモリ ダンプ ファイルがあります。有効なタグを教えてくれるようにデータを解析したい '002F0900' 列は開始アドレスです。有効なタグの例は、"DC 08 00 06 00 00 07 26 01 25 05 09" です。"DC 08" = タグ番号、"00 06" = タグ データ長、"00 00" = タグ バージョン。タグ データはバージョンの後に始まります。この場合、「07 26 01 25 05 09」になり、次のタグは「DC 33」から始まります。
最初のタグをデータの長さまで印刷できますが、データが次の行に進むかどうかを考慮する必要があるため、データを印刷する方法がわからないため、何らかの方法でアドレスをスキップする必要があります. 各行には 58 列が含まれます。各アドレスは、次の 16 進数値が始まるまで、8 文字にコロンと 2 つのスペースを加えた長さです。
また、アドレス欄に「DC」がいつ表示されるかについても、最終的には検討する必要があります。私がどのようにやっているのか知っているので、誰かがアドバイスを与えることができれば、これはこれを行うための最良の方法ではありません. 私は最初にそれを機能させようとしています。
テキスト ファイルは、次のような数千行です。
002F0900: 09 FF DC 08 00 06 00 00 07 26 01 25 05 09 DC 33
002F0910: 00 07 00 00 1F A0 26 01 25 05 09 FF 9C 3E 00 08
002F0920: 00 01 07 DD 0A 0D 00 29 35 AD 9C 41 00 0A 00 01
002F0930: 07 DD 0A 0D 00 29 36 1C 1D 01 9C 40 00 02 00 01
002F0940: 01 00 9C 42 00 0A 00 01 07 DD 0A 0D 00 29 36 21
002F0950: 1D AD 9C 15 00 20 00 00 01 00 00 00 00 04 AD AE
002F0960: C8 0B C0 8A 5B 52 01 00 00 00 00 00 FF 84 36 BA
002F0970: 4E 92 E4 16 28 86 75 C0 DC 10 00 05 00 00 00 00
002F0980: 00 00 01 FF DC 30 00 04 00 01 00 00 00 01 9C 41
出力例は次のとおりです。
Tag Number: DC 08
Address: 002E0000
Data Length: 06
Tag Data: 07 26 01 25 05 09
ソースコード:
#include<stdio.h>
FILE *fp;
main()
{
int i=0;
char ch;
char address[1024];
char tag_number[5];
char tag_length[4];
int number_of_addresses = 0;
long int length;
fp = fopen(FILE_NAME,"rb");
if(fp == NULL) {
printf("error opening file");
}
else {
printf("File opened\n");
while(1){
if((address[i]=fgetc(fp)) ==':')
break;
number_of_addresses++;
i++;
}
printf("\nAddress:");
for (i = 0; i < number_of_addresses;i++)
printf("%c",address[i]);
while((ch = fgetc(fp)) != 'D'){ //Search for valid tag
}
tag_number[0] = ch;
if((ch = fgetc(fp)) == 'C') //We have a valid TAG
{
tag_number[1] = ch;
tag_number[2] = fgetc(fp);
tag_number[3] = fgetc(fp);
tag_number[4] = fgetc(fp);
}
printf("\nNumber:");
for(i=0;i<5;i++)
printf("%c",tag_number[i]);
fgetc(fp); //For space
tag_length[0] = fgetc(fp);
tag_length[1] = fgetc(fp);
fgetc(fp); //For space
tag_length[2] = fgetc(fp);
tag_length[3] = fgetc(fp);
printf("\nLength:");
for(i=0;i<4;i++)
printf("%c",tag_length[i]);
length = strtol(tag_length,&tag_length[4], 16);
printf("\nThe decimal equilvant is: %ld",length);
for (i = 0;i<165;i++)
printf("\n%d:%c",i,fgetc(fp));
}
fclose(fp);
}
更新 @ooga: タグは勝手に書いてます。ロジックで無効なタグも考慮すれば、もう少し時間をかけて残りを把握できるはずです。ありがとう