############################################################################## # # # IAR ARM ANSI C/C++ Compiler V4.41A/W32 EVALUATION 02/Nov/2007 20:20:40 # # Copyright 1999-2005 IAR Systems. All rights reserved. # # # # Cpu mode = interwork # # Endian = little # # Stack alignment = 4 # # Source file = D:\Pasha\elf\TextReader\CFG.c # # Command line = D:\Pasha\elf\TextReader\CFG.c -lC # # D:\Pasha\elf\TextReader\Release\List\ -o # # D:\Pasha\elf\TextReader\Release\Obj\ -s9 --cpu_mode # # arm --endian little --cpu ARM926EJ-S --stack_align # # 4 --interwork -e --fpu None --dlib_config # # "D:\Pasha\ARM_Embedded_Workbench\Embedded Workbench # # 4.0 Evaluation\ARM\LIB\dl5tpainl8n.h" -I # # "D:\Pasha\ARM_Embedded_Workbench\Embedded Workbench # # 4.0 Evaluation\ARM\INC\" --inline_threshold=2 # # List file = D:\Pasha\elf\TextReader\Release\List\CFG.lst # # Object file = D:\Pasha\elf\TextReader\Release\Obj\CFG.r79 # # # # # ############################################################################## D:\Pasha\elf\TextReader\CFG.c 1 #include "..\inc\swilib.h" 2 #include "main.h" 3 extern unsigned long strtoul (const char *nptr,char **endptr,int base); 4 extern char file[256]; \ In segment DATA_Z, align 4, align-sorted 5 int curpos; \ curpos: \ 00000000 DS8 4 6 extern int atoi(char *attr); 7 extern const char per_d[]; 8 extern const char per_t[]; 9 extern const char per_s[]; 10 extern const char empty_str[]; 11 //extern int file_size; 12 //-----------------LOAD INI------------------- 13 /* 14 format 15 path /codepage/ position 16 */ 17 typedef struct 18 { 19 char name[256]; 20 unsigned int codepage; 21 unsigned int pos; 22 }INIFILE; 23 24 INIFILE ini[200];//думаю истории на 200 файлов хватит:) 25 26 int ini_item=0; \ ini_item: \ 00000004 DS8 4 \ In segment DATA_Z, align 4, align-sorted \ ini: \ 00000000 DS8 52800 27 \ In segment CODE, align 4, keep-with-next 28 void process(char *str, int n)//Читаем конфиг и сохраняем пути 29 { 30 int j=0; 31 int k=0; \ process: \ 00000000 ........ LDR R3,??DataTable12 ;; ini \ 00000004 F0402DE9 PUSH {R4-R7,LR} \ 00000008 422FA0E3 MOV R2,#+264 \ 0000000C 923125E0 MLA R5,R2,R1,R3 \ 00000010 08D04DE2 SUB SP,SP,#+8 \ 00000014 0040A0E1 MOV R4,R0 \ 00000018 0060A0E3 MOV R6,#+0 \ 0000001C 0510A0E1 MOV R1,R5 \ 00000020 010000EA B ??process_0 32 char pos[5]; 33 while (str[j]!=' ') {ini[n].name[k]=str[j];k++;j++;} \ ??process_1: \ 00000024 ........ LDRB R2,[R0], #+1 \ 00000028 ........ STRB R2,[R1], #+1 \ ??process_0: \ 0000002C 0020D0E5 LDRB R2,[R0, #+0] \ 00000030 016086E2 ADD R6,R6,#+1 \ 00000034 200052E3 CMP R2,#+32 \ 00000038 F9FFFF1A BNE ??process_1 34 j++; 35 k=0; \ 0000003C 0D70A0E1 MOV R7,SP \ 00000040 020000EA B ??process_2 36 //while (str[j]!=' ') 37 // pos[0]==str[j];//автоматический выбор кодировки, может пригодится))) 38 // codepage=ini[n].codepage=strtoul(pos,0,10); 39 // j++; 40 while (/*str[j]!='\n'*/j<=strlen(str)) {pos[k]=str[j];k++;j++;} \ ??process_3: \ 00000044 0400D6E7 LDRB R0,[R6, +R4] \ 00000048 016086E2 ADD R6,R6,#+1 \ 0000004C ........ STRB R0,[R7], #+1 \ ??process_2: \ 00000050 0400A0E1 MOV R0,R4 \ 00000054 1B0000EF SWI +27 \ 00000058 060050E1 CMP R0,R6 \ 0000005C F8FFFF2A BCS ??process_3 41 ini[n].pos=strtoul(pos,0,10); \ 00000060 0A20A0E3 MOV R2,#+10 \ 00000064 0010A0E3 MOV R1,#+0 \ 00000068 0D00A0E1 MOV R0,SP \ 0000006C ........ _BLF strtoul,??strtoul??rA \ 00000070 040185E5 STR R0,[R5, #+260] 42 if(ini[n].pos==0)//Чтобы не переходить в конец файла если данные отсутствуют \ 00000074 000050E3 CMP R0,#+0 \ 00000078 F380BD18 POPNE {R0,R1,R4-R7,PC} 43 { 44 curpos=1; \ 0000007C ........ LDR R1,??DataTable6 ;; curpos \ 00000080 0100A0E3 MOV R0,#+1 \ 00000084 000081E5 STR R0,[R1, #+0] 45 ini[n].pos=1; \ 00000088 040185E5 STR R0,[R5, #+260] 46 } 47 // ShowMSG(1,(int)ini[0].name); 48 } \ 0000008C F380BDE8 POP {R0,R1,R4-R7,PC} ;; return 49 \ In segment CODE, align 4, keep-with-next 50 void LoadINI() 51 { 52 unsigned int err; 53 int plhandle; 54 char *mem; 55 char *pos; 56 int i,j=0; 57 char *str; 58 int size; 59 plhandle = fopen( "0:\\TR_history2.txt", A_ReadOnly + A_BIN, P_READ, & err ); \ LoadINI: \ 00000000 ........ LDR R0,??DataTable5 ;; `?` \ 00000004 F0432DE9 PUSH {R4-R9,LR} 60 if ( plhandle==-1 ) \ 00000008 ........ LDR R5,??DataTable6 ;; curpos \ 0000000C 04D04DE2 SUB SP,SP,#+4 \ 00000010 0D30A0E1 MOV R3,SP \ 00000014 8020A0E3 MOV R2,#+128 \ 00000018 801CA0E3 MOV R1,#+32768 \ 0000001C 0A0000EF SWI +10 \ 00000020 0040A0E1 MOV R4,R0 \ 00000024 010074E3 CMN R4,#+1 \ 00000028 0500001A BNE ??LoadINI_0 61 { 62 // ShowMSG(1,(int)"Can't open TR_history"); 63 curpos=1; \ 0000002C 0100A0E3 MOV R0,#+1 \ 00000030 000085E5 STR R0,[R5, #+0] 64 fclose( plhandle, & err ); \ 00000034 0D10A0E1 MOV R1,SP \ 00000038 000060E2 RSB R0,R0,#+0 \ 0000003C 0D0000EF SWI +13 65 return; \ 00000040 F183BDE8 POP {R0,R4-R9,PC} 66 } 67 mem=malloc(10000); 68 size=fread(plhandle,mem,9999,&err); 69 pos=strstr(mem,file)+strlen(file)+1; \ ??LoadINI_0: \ 00000044 ........ LDR R8,??DataTable7 ;; file \ 00000048 1000A0E3 MOV R0,#+16 \ 0000004C 9C0D80E3 ORR R0,R0,#0x2700 \ 00000050 140000EF SWI +20 \ 00000054 0060A0E1 MOV R6,R0 \ 00000058 0D30A0E1 MOV R3,SP \ 0000005C 0F20A0E3 MOV R2,#+15 \ 00000060 9C2D82E3 ORR R2,R2,#0x2700 \ 00000064 0610A0E1 MOV R1,R6 \ 00000068 0400A0E1 MOV R0,R4 \ 0000006C 0B0000EF SWI +11 \ 00000070 0070A0E1 MOV R7,R0 \ 00000074 0810A0E1 MOV R1,R8 \ 00000078 0600A0E1 MOV R0,R6 \ 0000007C 180100EF SWI +280 \ 00000080 0090A0E1 MOV R9,R0 \ 00000084 0800A0E1 MOV R0,R8 \ 00000088 1B0000EF SWI +27 \ 0000008C 090080E0 ADD R0,R0,R9 \ 00000090 010080E2 ADD R0,R0,#+1 70 curpos=atoi(pos); \ 00000094 ........ _BLF atoi,??atoi??rA \ 00000098 000085E5 STR R0,[R5, #+0] 71 str=malloc(256); \ 0000009C 400FA0E3 MOV R0,#+256 \ 000000A0 140000EF SWI +20 \ 000000A4 0080A0E1 MOV R8,R0 72 if ((mem!=0)&&(str!=0)) \ 000000A8 000056E3 CMP R6,#+0 \ 000000AC 00005813 CMPNE R8,#+0 \ 000000B0 0200000A BEQ ??LoadINI_1 73 { 74 //size=fread(f,mem,9999,&err); 75 i=0; \ 000000B4 0000A0E3 MOV R0,#+0 \ 000000B8 010057E3 CMP R7,#+1 \ 000000BC 170000AA BGE ??LoadINI_2 76 while (i` \ 00000008 08D04DE2 SUB SP,SP,#+8 \ 0000000C 0010A0E3 MOV R1,#+0 \ 00000010 04108DE5 STR R1,[SP, #+4] \ 00000014 0700A0E3 MOV R0,#+7 \ 00000018 140000EF SWI +20 \ 0000001C 0040A0E1 MOV R4,R0 \ 00000020 4B0FA0E3 MOV R0,#+300 \ 00000024 140000EF SWI +20 \ 00000028 0050A0E1 MOV R5,R0 \ 0000002C 0D10A0E1 MOV R1,SP \ 00000030 0600A0E1 MOV R0,R6 \ 00000034 6B0100EF SWI +363 105 f = fopen( "0:\\TR_history2.txt", A_ReadWrite + A_BIN+A_Create+A_Append, P_READ + P_WRITE, & err ); \ 00000038 0D30A0E1 MOV R3,SP \ 0000003C 602FA0E3 MOV R2,#+384 \ 00000040 0A10A0E3 MOV R1,#+10 \ 00000044 811C81E3 ORR R1,R1,#0x8100 \ 00000048 0600A0E1 MOV R0,R6 \ 0000004C 0A0000EF SWI +10 \ 00000050 0070A0E1 MOV R7,R0 106 if ( f ==-1 ) \ 00000054 010077E3 CMN R7,#+1 \ 00000058 0300001A BNE ??SaveINI_0 107 { 108 fclose( f, & err ); \ 0000005C 0D10A0E1 MOV R1,SP \ 00000060 0000E0E3 MVN R0,#+0 \ 00000064 0D0000EF SWI +13 109 return; \ 00000068 F38FBDE8 POP {R0,R1,R4-R11,PC} 110 } 111 if(ini_item!=0) \ ??SaveINI_0: \ 0000006C ........ LDR R8,??DataTable6 ;; curpos \ 00000070 ........ LDR R9,??DataTable7 ;; file \ 00000074 040098E5 LDR R0,[R8, #+4] \ 00000078 000050E3 CMP R0,#+0 \ 0000007C 1F00000A BEQ ??SaveINI_1 112 { 113 for(i=0;i` \ In segment CODE, align 4, keep-with-next \ ??DataTable6: \ 00000000 ........ DC32 curpos \ In segment CODE, align 4, keep-with-next \ ??DataTable7: \ 00000000 ........ DC32 file \ In segment CODE, align 4, keep-with-next \ ??DataTable12: \ 00000000 ........ DC32 ini \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 303A5C54525F DC8 "0:\\TR_history2.txt" \ 686973746F72 \ 79322E747874 \ 00 \ 00000013 00 DC8 0 \ 00000014 434D50202564 DC8 "CMP %d %d" \ 20256400 \ 0000001E 0000 DC8 0, 0 \ 00000020 63683D3D3000 DC8 "ch==0" \ 00000026 0000 DC8 0, 0 \ 00000028 25732025690A DC8 "%s %i\012" \ 00 \ 0000002F 00 DC8 0 \ 00000030 686973742073 DC8 "hist save!" \ 6176652100 \ 0000003B 00 DC8 0 \ In segment DATA_C, align 1, align-sorted \ 00000000 2000 DC8 " " \ In segment DATA_C, align 1, align-sorted \ 00000000 257500 DC8 "%u" \ In segment DATA_C, align 1, align-sorted \ 00000000 0A00 DC8 "\012" Maximum stack usage in bytes: Function CSTACK -------- ------ FreeINI 12 LoadINI 32 SaveINI 44 process 28 Segment part sizes: Function/Label Bytes -------------- ----- curpos 8 ini 52800 process 144 LoadINI 308 SaveINI 592 FreeINI 56 ??DataTable5 4 ??DataTable6 4 ??DataTable7 4 ??DataTable12 4 ? 60 ? 2 ? 3 ? 2 Others 52 1 156 bytes in segment CODE 67 bytes in segment DATA_C 52 808 bytes in segment DATA_Z 12 bytes in segment INITTAB 1 116 bytes of CODE memory (+ 52 bytes shared) 67 bytes of CONST memory 52 808 bytes of DATA memory Errors: none Warnings: none