📄 biu.c
字号:
#include <stdio.h>
unsigned long sysad_addr;
long sysad_data[4];
char* change_file_name(unsigned long physical_addr);
//read_write_flag : 0 read
//read_write_flag : 1 write
void biu(unsigned long read_write_flag){
unsigned long file_data[16384];
unsigned long first_instr,second_num;
char file_path[100]={".\\Debug\\mem_"};
char file_name[20];
char file_type[10]={".dat"};
int lf_i,i;
FILE *file_data_fp;
strcpy(file_name,change_file_name(sysad_addr));
strcat(file_name,file_type);
strcat(file_path,file_name);
//open file
if((file_data_fp=fopen(file_path,"r"))==NULL){
printf("cannot open the file in %s !\n",file_path);
exit(0);
}
// printf("a\n");
for(lf_i=0;lf_i<16384;lf_i++){
fscanf(file_data_fp,"@%8x\t\t%8x\n",&second_num,&first_instr);
file_data[(second_num&(0x0000ffff))/4]=first_instr;
if(feof(file_data_fp)){
// for(i=0;i<3;i++){
/* if((second_num&(0x0000000f)) == 0){
file_data[lf_i+1]=0x00000000;
file_data[lf_i+2]=0x00000000;
file_data[lf_i+3]=0x00000000;
}else if((second_num&(0x0000000f)) == 4){
file_data[lf_i+1]=0x00000000;
file_data[lf_i+2]=0x00000000;
}else if((second_num&(0x0000000f)) == 8){
file_data[lf_i+1]=0x00000000;
}else if((second_num&(0x0000000f)) == 12){
file_data[lf_i+1]=0x00000000;
file_data[lf_i+2]=0x00000000;
file_data[lf_i+3]=0x00000000;
file_data[lf_i+4]=0x00000000;
}else{
printf("the address in the file mem_%04x.dat is error",(sysad_addr>>16)&(0x0000ffff));
}*/
// }
break;
}
}
fclose(file_data_fp);
//printf("b\n");
/* for(i=0;i<110;i++){
printf("%08x\n",file_data[i]);
}*/
//read or write file
if(read_write_flag == 0){
sysad_data[0]=file_data[(sysad_addr&(0x0000fff0))/4];
sysad_data[1]=file_data[(sysad_addr&(0x0000fff0))/4+1];
sysad_data[2]=file_data[(sysad_addr&(0x0000fff0))/4+2];
sysad_data[3]=file_data[(sysad_addr&(0x0000fff0))/4+3];
#ifdef DEBUG
// printf("%08x: %08x %08x %08x %08x\n",sysad_addr,sysad_data[0],sysad_data[1],sysad_data[2],sysad_data[3]);
#endif
}else if(read_write_flag == 1){
file_data[(sysad_addr&(0x0000fff0))/4]=sysad_data[0];
file_data[(sysad_addr&(0x0000fff0))/4+1]=sysad_data[1];
file_data[(sysad_addr&(0x0000fff0))/4+2]=sysad_data[2];
file_data[(sysad_addr&(0x0000fff0))/4+3]=sysad_data[3];
if((file_data_fp=fopen(file_path,"w+"))==NULL){
printf("cannot open the file in %s !\n",file_path);
exit(0);
}
//printf("c\n");
// printf("%08x\n%08x\n%08x\n%08x\n",file_data[16380],file_data[16381],file_data[16382],file_data[16383]);
for(i=0;i<16384;i=i+4){
if((file_data[i] != 0xcccccccc)||(file_data[i+1] != 0xcccccccc)||(file_data[i+2] != 0xcccccccc)||(file_data[i+3] != 0xcccccccc)){
fprintf(file_data_fp,"@%08x\t\t%08x\n",(sysad_addr&(0xffff0000))+i*4,file_data[i]);
fprintf(file_data_fp,"@%08x\t\t%08x\n",(sysad_addr&(0xffff0000))+i*4+4,file_data[i+1]);
fprintf(file_data_fp,"@%08x\t\t%08x\n",(sysad_addr&(0xffff0000))+i*4+8,file_data[i+2]);
fprintf(file_data_fp,"@%08x\t\t%08x\n",(sysad_addr&(0xffff0000))+i*4+12,file_data[i+3]);
}
}
// printf("d\n");
fclose(file_data_fp);
}else{
printf("read_write_flag error in the biu module!\n");
}
//printf("e\n");
}
char* change_file_name(unsigned long physical_addr){
int i,j;
char file_name[5];
for(i=0;i<4;i++){
switch((physical_addr>>(16+i*4))&(0x0000000f))
{case 0 : file_name[3-i]='0';break;
case 1 : file_name[3-i]='1';break;
case 2 : file_name[3-i]='2';break;
case 3 : file_name[3-i]='3';break;
case 4 : file_name[3-i]='4';break;
case 5 : file_name[3-i]='5';break;
case 6 : file_name[3-i]='6';break;
case 7 : file_name[3-i]='7';break;
case 8 : file_name[3-i]='8';break;
case 9 : file_name[3-i]='9';break;
case 10 : file_name[3-i]='a';break;
case 11 : file_name[3-i]='b';break;
case 12 : file_name[3-i]='c';break;
case 13 : file_name[3-i]='d';break;
case 14 : file_name[3-i]='e';break;
case 15 : file_name[3-i]='f';break;
default : printf("chang file name error!\n");
}
}
file_name[4]='\0';
return(file_name);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -