############################################################################## # # # IAR ARM ANSI C/C++ Compiler V4.42A/W32 EVALUATION 10/Nov/2010 19:42:22 # # Copyright 1999-2005 IAR Systems. All rights reserved. # # # # Cpu mode = interwork # # Endian = little # # Stack alignment = 4 # # Source file = D:\pasha\elf\_MY_PROJECT_\hider\main.c # # Command line = D:\pasha\elf\_MY_PROJECT_\hider\main.c -D NEWSGOLD # # -lC D:\pasha\elf\_MY_PROJECT_\hider\Release\List\ # # -o D:\pasha\elf\_MY_PROJECT_\hider\Release\Obj\ -s9 # # --no_unroll --no_clustering --cpu_mode arm --endian # # little --cpu ARM926EJ-S --stack_align 4 --interwork # # -e --fpu None --dlib_config "D:\pasha\Embedded # # Workbench 4.0 Evaluation2\ARM\LIB\dl5tpainl8n.h" -I # # "D:\pasha\Embedded Workbench 4.0 # # Evaluation2\ARM\INC\" --inline_threshold=2 # # List file = D:\pasha\elf\_MY_PROJECT_\hider\Release\List\main.ls # # t # # Object file = D:\pasha\elf\_MY_PROJECT_\hider\Release\Obj\main.r79 # # # # # ############################################################################## D:\pasha\elf\_MY_PROJECT_\hider\main.c 1 #include "..\inc\swilib.h" 2 #include "..\inc\xtask_ipc.h" 3 #include "..\inc\cfg_items.h" 4 #include "conf_loader.h" 5 6 extern const char UNDER_IDLE_CONSTR[]; \ In segment DATA_Z, align 4, align-sorted 7 CSM_RAM *under_idle; \ under_idle: \ 00000000 DS8 4 8 extern unsigned long strtoul (const char *nptr,char **endptr,int base); 9 extern const char *successed_config_filename; 10 extern int InitConfig(); \ In segment CODE, align 4, keep-with-next 11 CSM_RAM *GetUnderIdleCSM(void) 12 { \ GetUnderIdleCSM: \ 00000000 30402DE9 PUSH {R4,R5,LR} 13 CSM_RAM *u; 14 CSM_DESC *UnderIdleDesc; 15 if (strlen((char *)UNDER_IDLE_CONSTR)==8) \ 00000004 ........ LDR R4,??DataTable3 ;; UNDER_IDLE_CONSTR \ 00000008 0400A0E1 MOV R0,R4 \ 0000000C 1B0000EF SWI +27 \ 00000010 080050E3 CMP R0,#+8 \ 00000014 0500001A BNE ??GetUnderIdleCSM_0 16 { 17 UnderIdleDesc=(CSM_DESC *)strtoul((char *)UNDER_IDLE_CONSTR,0,0x10); \ 00000018 1020A0E3 MOV R2,#+16 \ 0000001C 0010A0E3 MOV R1,#+0 \ 00000020 0400A0E1 MOV R0,R4 \ 00000024 ........ _BLF strtoul,??strtoul??rA \ 00000028 0050A0E1 MOV R5,R0 \ 0000002C 0B0000EA B ??GetUnderIdleCSM_1 18 } 19 else 20 { 21 UnderIdleDesc=((CSM_RAM *)(FindCSMbyID(CSM_root()->idle_id))->prev)->constr; \ ??GetUnderIdleCSM_0: \ 00000030 068100EF SWI +33030 \ 00000034 040090E5 LDR R0,[R0, #+4] \ 00000038 080100EF SWI +264 \ 0000003C 040090E5 LDR R0,[R0, #+4] 22 sprintf((char *)UNDER_IDLE_CONSTR,"%08X",UnderIdleDesc); \ 00000040 4C109FE5 LDR R1,??GetUnderIdleCSM_2 ;; `?` \ 00000044 085090E5 LDR R5,[R0, #+8] \ 00000048 0400A0E1 MOV R0,R4 \ 0000004C 0520A0E1 MOV R2,R5 \ 00000050 160000EF SWI +22 23 SaveConfigData(successed_config_filename); \ 00000054 ........ LDR R0,??DataTable5 ;; successed_config_filename \ 00000058 000090E5 LDR R0,[R0, #+0] \ 0000005C ........ _BLF SaveConfigData,??SaveConfigData??rA 24 } 25 LockSched(); \ ??GetUnderIdleCSM_1: \ 00000060 460100EF SWI +326 26 u=CSM_root()->csm_q->csm.first; \ 00000064 068100EF SWI +33030 \ 00000068 080090E5 LDR R0,[R0, #+8] \ 0000006C 084090E5 LDR R4,[R0, #+8] \ 00000070 000000EA B ??GetUnderIdleCSM_3 27 while(u && u->constr!=UnderIdleDesc) u=u->next; \ ??GetUnderIdleCSM_4: \ 00000074 004094E5 LDR R4,[R4, #+0] \ ??GetUnderIdleCSM_3: \ 00000078 000054E3 CMP R4,#+0 \ 0000007C 08009415 LDRNE R0,[R4, #+8] \ 00000080 05005011 CMPNE R0,R5 \ 00000084 FAFFFF1A BNE ??GetUnderIdleCSM_4 28 UnlockSched(); \ 00000088 470100EF SWI +327 29 return u; \ 0000008C 0400A0E1 MOV R0,R4 \ 00000090 3080BDE8 POP {R4,R5,PC} ;; return \ ??GetUnderIdleCSM_2: \ 00000094 ........ DC32 `?` 30 } 31 \ In segment CODE, align 4, keep-with-next 32 static int do_CSMtoTop(CSMQ *csm_q, void *_cmd) 33 { \ do_CSMtoTop: \ 00000000 F0402DE9 PUSH {R4-R7,LR} \ 00000004 0040A0E1 MOV R4,R0 \ 00000008 0170A0E1 MOV R7,R1 34 // static const char my_color[]={0x00,0x00,0x00,0x32}; 35 MMICMD *cmd=_cmd; 36 int *gui; 37 CSM_RAM *wcsm; 38 CSM_RAM *top_csm=FindCSM(csm_q,cmd->parent_id); \ 0000000C 0C1097E5 LDR R1,[R7, #+12] \ 00000010 420100EF SWI +322 \ 00000014 0050A0E1 MOV R5,R0 39 CSM_RAM *bot_csm=under_idle; \ 00000018 ........ LDR R0,??DataTable4 ;; under_idle \ 0000001C 006090E5 LDR R6,[R0, #+0] 40 if (!bot_csm) return 1; \ 00000020 000056E3 CMP R6,#+0 \ 00000024 0100001A BNE ??do_CSMtoTop_0 \ ??do_CSMtoTop_1: \ 00000028 0100A0E3 MOV R0,#+1 \ 0000002C F080BDE8 POP {R4-R7,PC} ;; return 41 #ifdef NEWSGOLD 42 CSM_RAM *work_csm=FindCSM(csm_q,cmd->id); \ ??do_CSMtoTop_0: \ 00000030 1C1097E5 LDR R1,[R7, #+28] \ 00000034 0400A0E1 MOV R0,R4 \ 00000038 420100EF SWI +322 \ 0000003C 0070B0E1 MOVS R7,R0 43 #else 44 CSM_RAM *work_csm=FindCSM(csm_q,(int)(cmd->cmd_csm)); 45 #endif 46 if (!work_csm) return 1; 47 if (work_csm==bot_csm) return 1; \ 00000040 06005711 CMPNE R7,R6 48 if (work_csm==top_csm) return 1; \ 00000044 05005711 CMPNE R7,R5 \ 00000048 F6FFFF0A BEQ ??do_CSMtoTop_1 49 if (work_csm==(top_csm?top_csm->prev:csm_q->csm.last)) return 1; \ 0000004C 000055E3 CMP R5,#+0 \ 00000050 04009515 LDRNE R0,[R5, #+4] \ 00000054 0C009405 LDREQ R0,[R4, #+12] \ 00000058 000057E1 CMP R7,R0 \ 0000005C F1FFFF0A BEQ ??do_CSMtoTop_1 50 if (!top_csm) UnfocusGUI(); \ 00000060 000055E3 CMP R5,#+0 \ 00000064 0800001A BNE ??do_CSMtoTop_2 \ 00000068 1F0200EF SWI +543 51 // 52 do 53 { 54 if (top_csm) 55 { 56 wcsm=(CSM_RAM *)top_csm->prev; //Получаем перемещаемый CSM 57 } 58 else 59 { 60 wcsm=csm_q->csm.last; \ ??do_CSMtoTop_3: \ 0000006C 0C0094E5 LDR R0,[R4, #+12] 61 } 62 ((CSM_RAM *)(wcsm->prev))->next=top_csm; //CSM перед перемещаемым теперь указывает на верхний CSM 63 if (top_csm) \ ??do_CSMtoTop_4: \ 00000070 000055E3 CMP R5,#+0 \ 00000074 041090E5 LDR R1,[R0, #+4] \ 00000078 005081E5 STR R5,[R1, #+0] \ 0000007C 041090E5 LDR R1,[R0, #+4] \ 00000080 0C108405 STREQ R1,[R4, #+12] 64 { 65 top_csm->prev=wcsm->prev; //prev верхнего CSM указывает на CSM перед перемещаемым \ 00000084 04108515 STRNE R1,[R5, #+4] \ 00000088 030000EA B ??do_CSMtoTop_5 66 } \ ??do_CSMtoTop_2: \ 0000008C 000055E3 CMP R5,#+0 \ 00000090 F5FFFF0A BEQ ??do_CSMtoTop_3 \ 00000094 040095E5 LDR R0,[R5, #+4] \ 00000098 F4FFFFEA B ??do_CSMtoTop_4 67 else 68 { 69 csm_q->csm.last=wcsm->prev; 70 } 71 //Теперь вставляем в нужное место перемещаемый CSM 72 ((CSM_RAM *)(wcsm->next=bot_csm->next))->prev=wcsm; \ ??do_CSMtoTop_5: \ 0000009C 001096E5 LDR R1,[R6, #+0] \ 000000A0 001080E5 STR R1,[R0, #+0] \ 000000A4 040081E5 STR R0,[R1, #+4] 73 bot_csm->next=wcsm; \ 000000A8 000086E5 STR R0,[R6, #+0] 74 wcsm->prev=bot_csm; \ 000000AC 046080E5 STR R6,[R0, #+4] 75 } 76 while((top_csm?top_csm->prev:csm_q->csm.last)!=work_csm); \ 000000B0 04009515 LDRNE R0,[R5, #+4] \ 000000B4 0C009405 LDREQ R0,[R4, #+12] \ 000000B8 070050E1 CMP R0,R7 \ 000000BC F2FFFF1A BNE ??do_CSMtoTop_2 77 // 78 /* DrawRectangle(0,0+YDISP,ScreenW()-1,ScreenH()-1,0, 79 my_color, 80 my_color);*/ 81 82 if (!top_csm) \ 000000C0 000055E3 CMP R5,#+0 \ 000000C4 D7FFFF1A BNE ??do_CSMtoTop_1 83 { 84 if ((gui=((CSM_RAM *)(csm_q->csm.last))->gui_ll.last)) \ 000000C8 0C0094E5 LDR R0,[R4, #+12] \ 000000CC 200090E5 LDR R0,[R0, #+32] \ 000000D0 000050E3 CMP R0,#+0 \ 000000D4 0200000A BEQ ??do_CSMtoTop_6 85 { 86 FocusGUI(gui[3]); \ 000000D8 0C0090E5 LDR R0,[R0, #+12] \ 000000DC 1E0200EF SWI +542 87 } 88 //Сообщение об уничтожении несуществующего CSM, необходимо для правильной работы IdleCSM 89 GBS_SendMessage(MMI_CEPID,MSG_CSM_DESTROYED,0,30002,0); \ 000000E0 0000A0E3 MOV R0,#+0 \ ??do_CSMtoTop_6: \ 000000E4 01002DE9 PUSH {R0} \ 000000E8 3230A0E3 MOV R3,#+50 \ 000000EC 753C83E3 ORR R3,R3,#0x7500 \ 000000F0 0020A0E3 MOV R2,#+0 \ 000000F4 641CA0E3 MOV R1,#+25600 \ 000000F8 0900A0E3 MOV R0,#+9 \ 000000FC 420C80E3 ORR R0,R0,#0x4200 \ 00000100 000100EF SWI +256 \ 00000104 04D08DE2 ADD SP,SP,#+4 \ 00000108 0100A0E3 MOV R0,#+1 \ 0000010C F080BDE8 POP {R4-R7,PC} 90 } 91 return 1; 92 } 93 94 #pragma optimize=no_inline \ In segment CODE, align 4, keep-with-next 95 __thumb static void LLaddToEnd(LLQ *ll, void *data) 96 { 97 LLIST *d=data; 98 d->next=NULL; \ LLaddToEnd: \ 00000000 0022 MOVS R2,#+0 \ 00000002 0A60 STR R2,[R1, #+0] 99 d->prev=ll->last; \ 00000004 4268 LDR R2,[R0, #+4] \ 00000006 4A60 STR R2,[R1, #+4] 100 if (ll->last) \ 00000008 4268 LDR R2,[R0, #+4] \ 0000000A 002A CMP R2,#+0 \ 0000000C 01D0 BEQ ??LLaddToEnd_0 101 { 102 ((LLIST *)ll->last)->next=d; \ 0000000E 1160 STR R1,[R2, #+0] \ 00000010 00E0 B ??LLaddToEnd_1 103 } 104 else 105 { 106 ll->first=d; \ ??LLaddToEnd_0: \ 00000012 0160 STR R1,[R0, #+0] 107 } 108 ll->last=d; \ ??LLaddToEnd_1: \ 00000014 4160 STR R1,[R0, #+4] 109 } \ 00000016 7047 BX LR 110 111 //Move CSM with "id" on top 112 //Top is under CSM with "top_id" - may be -1 \ In segment CODE, align 4, keep-with-next 113 void CSMtoTop(int id, int top_id) 114 { \ CSMtoTop: \ 00000000 70402DE9 PUSH {R4-R6,LR} \ 00000004 0040A0E1 MOV R4,R0 \ 00000008 0150A0E1 MOV R5,R1 115 CSMQ *csm_q=CSM_root()->csm_q; \ 0000000C 068100EF SWI +33030 \ 00000010 086090E5 LDR R6,[R0, #+8] 116 MMICMD *cmd; 117 if (!FindCSMbyID(id)) return; \ 00000014 0400A0E1 MOV R0,R4 \ 00000018 080100EF SWI +264 \ 0000001C 000050E3 CMP R0,#+0 118 if (id==top_id) return; //Нечего \ 00000020 05005411 CMPNE R4,R5 \ 00000024 7080BD08 POPEQ {R4-R6,PC} 119 cmd=malloc(sizeof(MMICMD)); \ 00000028 2400A0E3 MOV R0,#+36 \ 0000002C 140000EF SWI +20 120 cmd->csm_q=csm_q; \ 00000030 186080E5 STR R6,[R0, #+24] 121 122 cmd->flag1=5; \ 00000034 0510A0E3 MOV R1,#+5 \ 00000038 081080E5 STR R1,[R0, #+8] 123 #ifdef NEWSGOLD 124 cmd->prio=0; \ 0000003C 0010A0E3 MOV R1,#+0 \ 00000040 101080E5 STR R1,[R0, #+16] 125 cmd->id=id; 126 #else 127 cmd->cmd_csm=(CSM_RAM*)id; 128 #endif 129 cmd->parent_id=top_id; 130 cmd->proc=do_CSMtoTop; \ 00000044 18109FE5 LDR R1,??CSMtoTop_0 ;; do_CSMtoTop \ 00000048 1C4080E5 STR R4,[R0, #+28] \ 0000004C 0C5080E5 STR R5,[R0, #+12] \ 00000050 141080E5 STR R1,[R0, #+20] 131 LLaddToEnd(&csm_q->cmd,cmd); \ 00000054 0010A0E1 MOV R1,R0 \ 00000058 140086E2 ADD R0,R6,#+20 \ 0000005C ........ BLX LLaddToEnd 132 } \ 00000060 7080BDE8 POP {R4-R6,PC} ;; return \ ??CSMtoTop_0: \ 00000064 ........ DC32 do_CSMtoTop 133 \ In segment CODE, align 4, keep-with-next 134 void main(void) 135 { \ main: \ 00000000 10402DE9 PUSH {R4,LR} 136 InitConfig(); \ 00000004 ........ _BLF InitConfig,??InitConfig??rA 137 if(strlen(UNDER_IDLE_CONSTR)!=0) \ 00000008 ........ LDR R0,??DataTable3 ;; UNDER_IDLE_CONSTR \ 0000000C 1B0000EF SWI +27 \ 00000010 000050E3 CMP R0,#+0 \ 00000014 0700000A BEQ ??main_0 138 { 139 under_idle=GetUnderIdleCSM(); //Ищем idle_dialog \ 00000018 ........ BL GetUnderIdleCSM \ 0000001C ........ LDR R1,??DataTable4 ;; under_idle \ 00000020 000081E5 STR R0,[R1, #+0] 140 CSMtoTop(CSM_root()->idle_id,-1); \ 00000024 068100EF SWI +33030 \ 00000028 040090E5 LDR R0,[R0, #+4] \ 0000002C 0010E0E3 MVN R1,#+0 \ 00000030 ........ BL CSMtoTop \ 00000034 1080BDE8 POP {R4,PC} 141 } 142 else 143 { 144 WSHDR *ws=AllocWS(150); \ ??main_0: \ 00000038 9600A0E3 MOV R0,#+150 \ 0000003C 250100EF SWI +293 \ 00000040 0040A0E1 MOV R4,R0 145 str_2ws(ws,successed_config_filename,128); \ 00000044 ........ LDR R0,??DataTable5 ;; successed_config_filename \ 00000048 8020A0E3 MOV R2,#+128 \ 0000004C 001090E5 LDR R1,[R0, #+0] \ 00000050 0400A0E1 MOV R0,R4 \ 00000054 6C0100EF SWI +364 146 ExecuteFile(ws,0,0); \ 00000058 0020A0E3 MOV R2,#+0 \ 0000005C 0010A0E3 MOV R1,#+0 \ 00000060 0400A0E1 MOV R0,R4 \ 00000064 940000EF SWI +148 147 FreeWS(ws); \ 00000068 0400A0E1 MOV R0,R4 \ 0000006C 290100EF SWI +297 148 ShowMSG(1,(int)"Input underline CSM!!!"); \ 00000070 08109FE5 LDR R1,??main_1 ;; `?` \ 00000074 0100A0E3 MOV R0,#+1 \ 00000078 480100EF SWI +328 149 } 150 } \ 0000007C 1080BDE8 POP {R4,PC} ;; return \ ??main_1: \ 00000080 ........ DC32 `?` \ In segment CODE, align 4, keep-with-next \ ??DataTable3: \ 00000000 ........ DC32 UNDER_IDLE_CONSTR \ In segment CODE, align 4, keep-with-next \ ??DataTable4: \ 00000000 ........ DC32 under_idle \ In segment CODE, align 4, keep-with-next \ ??DataTable5: \ 00000000 ........ DC32 successed_config_filename \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 2530385800 DC8 "%08X" \ 00000005 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 496E70757420 DC8 "Input underline CSM!!!" \ 756E6465726C \ 696E65204353 \ 4D21212100 \ 00000017 00 DC8 0 Maximum stack usage in bytes: Function CSTACK -------- ------ CSMtoTop 16 GetUnderIdleCSM 12 LLaddToEnd 4 do_CSMtoTop 24 main 8 Segment part sizes: Function/Label Bytes -------------- ----- under_idle 4 GetUnderIdleCSM 152 do_CSMtoTop 272 LLaddToEnd 24 CSMtoTop 104 main 132 ??DataTable3 4 ??DataTable4 4 ??DataTable5 4 ? 8 ? 24 Others 72 756 bytes in segment CODE 32 bytes in segment DATA_C 4 bytes in segment DATA_Z 12 bytes in segment INITTAB 696 bytes of CODE memory (+ 72 bytes shared) 32 bytes of CONST memory 4 bytes of DATA memory Errors: none Warnings: none