############################################################################## # # # IAR ARM ANSI C/C++ Compiler V4.41A/W32 EVALUATION 27/Feb/2007 12:46:52 # # Copyright 1999-2005 IAR Systems. All rights reserved. # # # # Cpu mode = interwork # # Endian = little # # Stack alignment = 4 # # Source file = G:\ARM\My\IWatch\conf_loader.c # # Command line = G:\ARM\My\IWatch\conf_loader.c -lC # # G:\ARM\My\IWatch\Release\List\ -o # # G:\ARM\My\IWatch\Release\Obj\ -s9 --no_unroll # # --no_clustering --cpu_mode arm --endian little # # --cpu ARM926EJ-S --stack_align 4 --interwork -e # # --fpu None -I "C:\Program Files\IAR # # Systems\Embedded Workbench 4.0 Evaluation\ARM\INC\" # # --inline_threshold=2 # # List file = G:\ARM\My\IWatch\Release\List\conf_loader.lst # # Object file = G:\ARM\My\IWatch\Release\Obj\conf_loader.r79 # # # # # ############################################################################## G:\ARM\My\IWatch\conf_loader.c 1 #include "..\inc\swilib.h" 2 #include "..\inc\cfg_items.h" 3 #include "conf_loader.h" 4 5 #pragma segment="CONFIG_C" 6 \ In segment DATA_I, align 4, align-sorted 7 int cfg_path=-1; \ cfg_path: \ 00000000 DS8 4 \ 00000004 REQUIRE `?` 8 \ In segment CODE, align 4, keep-with-next 9 int LoadConfigData(const char *fname) 10 { \ LoadConfigData: \ 00000000 F0472DE9 PUSH {R4-R10,LR} 11 int f; 12 unsigned int ul; 13 char *buf; 14 int result=0; 15 void *cfg; 16 17 extern const CFG_HDR cfghdr0; //first var in CONFIG 18 cfg=(void*)&cfghdr0; 19 unsigned int len=(int)__segment_end("CONFIG_C")-(int)__segment_begin("CONFIG_C"); \ 00000004 F4609FE5 LDR R6,??LoadConfigData_0 ;; SFE(CONFIG_C) - SFB(CONFIG_C) \ 00000008 04D04DE2 SUB SP,SP,#+4 \ 0000000C 0040A0E1 MOV R4,R0 \ 00000010 0050A0E3 MOV R5,#+0 20 if (len==0) ShowMSG(1,(int)"NewYear: 0 config length!"); \ 00000014 000056E3 CMP R6,#+0 \ 00000018 0200001A BNE ??LoadConfigData_1 \ 0000001C E0109FE5 LDR R1,??LoadConfigData_0+0x4 ;; `?` \ 00000020 0100A0E3 MOV R0,#+1 \ 00000024 480100EF SWI +328 21 if (!(buf=malloc(len))) return -1; \ ??LoadConfigData_1: \ 00000028 0600A0E1 MOV R0,R6 \ 0000002C 140000EF SWI +20 \ 00000030 0070B0E1 MOVS R7,R0 \ 00000034 0500E001 MVNEQ R0,R5 \ 00000038 F287BD08 POPEQ {R1,R4-R10,PC} 22 if ((f=fopen(fname,A_ReadOnly+A_BIN,0,&ul))!=-1) \ 0000003C C4909FE5 LDR R9,??LoadConfigData_0+0x8 ;; cfghdr0 \ 00000040 0D30A0E1 MOV R3,SP \ 00000044 0020A0E3 MOV R2,#+0 \ 00000048 801CA0E3 MOV R1,#+32768 \ 0000004C 0400A0E1 MOV R0,R4 \ 00000050 0A0000EF SWI +10 \ 00000054 0080A0E1 MOV R8,R0 \ 00000058 05A0E0E1 MVN R10,R5 \ 0000005C 0A0058E1 CMP R8,R10 \ 00000060 1000000A BEQ ??LoadConfigData_2 23 { 24 if (fread(f,buf,len,&ul)==len) \ 00000064 0D30A0E1 MOV R3,SP \ 00000068 0620A0E1 MOV R2,R6 \ 0000006C 0710A0E1 MOV R1,R7 \ 00000070 0B0000EF SWI +11 \ 00000074 060050E1 CMP R0,R6 \ 00000078 0700001A BNE ??LoadConfigData_3 25 { 26 memcpy(cfg,buf,len); \ 0000007C 0620A0E1 MOV R2,R6 \ 00000080 0710A0E1 MOV R1,R7 \ 00000084 0900A0E1 MOV R0,R9 \ 00000088 1E0100EF SWI +286 27 fclose(f,&ul); \ ??LoadConfigData_4: \ 0000008C 0D10A0E1 MOV R1,SP \ 00000090 0800A0E1 MOV R0,R8 \ 00000094 0D0000EF SWI +13 \ 00000098 140000EA B ??LoadConfigData_5 28 } 29 else 30 { 31 fclose(f,&ul); \ ??LoadConfigData_3: \ 0000009C 0D10A0E1 MOV R1,SP \ 000000A0 0800A0E1 MOV R0,R8 \ 000000A4 0D0000EF SWI +13 32 goto L_SAVENEWCFG; 33 } 34 } 35 else 36 { 37 L_SAVENEWCFG: 38 if ((f=fopen(fname,A_ReadWrite+A_Create+A_Truncate,P_READ+P_WRITE,&ul))!=-1) \ ??LoadConfigData_2: \ 000000A8 0D30A0E1 MOV R3,SP \ 000000AC 602FA0E3 MOV R2,#+384 \ 000000B0 0210A0E3 MOV R1,#+2 \ 000000B4 C01F81E3 ORR R1,R1,#0x300 \ 000000B8 0400A0E1 MOV R0,R4 \ 000000BC 0A0000EF SWI +10 \ 000000C0 0080A0E1 MOV R8,R0 \ 000000C4 0A0058E1 CMP R8,R10 \ 000000C8 0700000A BEQ ??LoadConfigData_6 39 { 40 if (fwrite(f,cfg,len,&ul)!=len) result=-1; \ 000000CC 0D30A0E1 MOV R3,SP \ 000000D0 0620A0E1 MOV R2,R6 \ 000000D4 0910A0E1 MOV R1,R9 \ 000000D8 0C0000EF SWI +12 \ 000000DC 060050E1 CMP R0,R6 \ 000000E0 E9FFFF0A BEQ ??LoadConfigData_4 \ 000000E4 0A50A0E1 MOV R5,R10 41 fclose(f,&ul); \ 000000E8 E7FFFFEA B ??LoadConfigData_4 42 } 43 else 44 result=-1; \ ??LoadConfigData_6: \ 000000EC 0A50A0E1 MOV R5,R10 45 } 46 mfree(buf); \ ??LoadConfigData_5: \ 000000F0 0700A0E1 MOV R0,R7 \ 000000F4 150000EF SWI +21 47 return(result); \ 000000F8 0500A0E1 MOV R0,R5 \ 000000FC F287BDE8 POP {R1,R4-R10,PC} ;; return \ ??LoadConfigData_0: \ 00000100 ........ DC32 SFE(CONFIG_C) - SFB(CONFIG_C) \ 00000104 ........ DC32 `?` \ 00000108 ........ DC32 cfghdr0 48 } 49 \ In segment CODE, align 4, keep-with-next 50 void InitConfig() 51 { 52 if (LoadConfigData("4:\\ZBin\\etc\\IWatch.bcfg")<0) \ InitConfig: \ 00000000 48009FE5 LDR R0,??InitConfig_0 ;; `?` \ 00000004 10402DE9 PUSH {R4,LR} \ 00000008 44409FE5 LDR R4,??InitConfig_0+0x4 ;; cfg_path \ 0000000C ........ BL LoadConfigData \ 00000010 000050E3 CMP R0,#+0 \ 00000014 0A00005A BPL ??InitConfig_1 53 { 54 if (LoadConfigData("0:\\ZBin\\etc\\IWatch.bcfg")<0) ShowMSG(1,(int)"NewYear couldn't create config!"); \ 00000018 38009FE5 LDR R0,??InitConfig_0+0x8 ;; `?` \ 0000001C ........ BL LoadConfigData \ 00000020 000050E3 CMP R0,#+0 \ 00000024 0300005A BPL ??InitConfig_2 \ 00000028 2C109FE5 LDR R1,??InitConfig_0+0xC ;; `?` \ 0000002C 0100A0E3 MOV R0,#+1 \ 00000030 480100EF SWI +328 \ 00000034 1080BDE8 POP {R4,PC} 55 else cfg_path=0; \ ??InitConfig_2: \ 00000038 0000A0E3 MOV R0,#+0 \ 0000003C 000084E5 STR R0,[R4, #+0] \ 00000040 1080BDE8 POP {R4,PC} 56 } 57 else cfg_path=4; \ ??InitConfig_1: \ 00000044 0400A0E3 MOV R0,#+4 \ 00000048 000084E5 STR R0,[R4, #+0] 58 } \ 0000004C 1080BDE8 POP {R4,PC} ;; return \ ??InitConfig_0: \ 00000050 ........ DC32 `?` \ 00000054 ........ DC32 cfg_path \ 00000058 ........ DC32 `?` \ 0000005C ........ DC32 `?` \ In segment DATA_ID, align 4, align-sorted \ `?`: \ 00000000 FFFFFFFF DC32 -1 \ In segment CONFIG_C, align 1 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 4E6577596561 DC8 "NewYear: 0 config length!" \ 723A20302063 \ 6F6E66696720 \ 6C656E677468 \ 2100 \ 0000001A 0000 DC8 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 4E6577596561 DC8 "NewYear couldn't create config!" \ 7220636F756C \ 646E27742063 \ 726561746520 \ 636F6E666967 \ 2100 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 303A5C5A4269 DC8 "0:\\ZBin\\etc\\IWatch.bcfg" \ 6E5C6574635C \ 495761746368 \ 2E6263666700 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 343A5C5A4269 DC8 "4:\\ZBin\\etc\\IWatch.bcfg" \ 6E5C6574635C \ 495761746368 \ 2E6263666700 Maximum stack usage in bytes: Function CSTACK -------- ------ InitConfig 8 LoadConfigData 36 Segment part sizes: Function/Label Bytes -------------- ----- cfg_path 4 LoadConfigData 268 InitConfig 96 ? 4 ? 28 ? 32 ? 24 ? 24 Others 20 372 bytes in segment CODE 108 bytes in segment DATA_C 4 bytes in segment DATA_I 4 bytes in segment DATA_ID 12 bytes in segment INITTAB 364 bytes of CODE memory (+ 20 bytes shared) 112 bytes of CONST memory 4 bytes of DATA memory Errors: none Warnings: none