############################################################################## # # # IAR ARM ANSI C/C++ Compiler V4.41A/W32 EVALUATION 29/Jan/2008 23:36:47 # # Copyright 1999-2005 IAR Systems. All rights reserved. # # # # Cpu mode = interwork # # Endian = little # # Stack alignment = 4 # # Source file = D:\Pasha\elf\_MY_PROJECT\surpriz\main.cpp # # Command line = D:\Pasha\elf\_MY_PROJECT\surpriz\main.cpp -D # # NEWSGOLD -D ELKA -lC D:\Pasha\elf\_MY_PROJECT\surpri # # z\Release\List\ -o D:\Pasha\elf\_MY_PROJECT\surpriz\ # # Release\Obj\ -s9 --cpu_mode arm --endian little # # --cpu ARM926EJ-S --stack_align 4 --interwork -e # # --fpu None --dlib_config "D:\Pasha\ARM_Embedded_Work # # bench\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\_MY_PROJECT\surpriz\Release\List\main.l # # st # # Object file = D:\Pasha\elf\_MY_PROJECT\surpriz\Release\Obj\main.r7 # # 9 # # # # # ############################################################################## D:\Pasha\elf\_MY_PROJECT\surpriz\main.cpp 1 #include "..\inc\swilib.h" 2 //#include "../inc/cfg_items.h" 3 //#include "conf_loader.h" 4 5 //-------------------------------------// 6 7 #define IPC_TEXTINFO_NAME "surpriz" 8 #define IPC_UPDATE_STAT 1 9 \ In segment DATA_C, align 4, align-sorted 10 const char ipc_my_name[]=IPC_TEXTINFO_NAME; \ ipc_my_name: \ 00000000 737572707269 DC8 "surpriz" \ 7A00 \ In segment DATA_C, align 4, align-sorted 11 const IPC_REQ my_ipc={//эт структура ипц,в будущем отправим ее таску:) \ my_ipc: \ 00000000 ............ DC32 ipc_my_name, ipc_my_name, 0H \ ....00000000 12 ipc_my_name, 13 ipc_my_name, 14 NULL 15 }; 16 \ In segment CODE, align 4, keep-with-next 17 void TimerProc(void) 18 { 19 GBS_SendMessage(MMI_CEPID,MSG_IPC,IPC_UPDATE_STAT,&my_ipc);//эта херня отправляет ипц хтаску \ TimerProc: \ 00000000 ........ LDR R3,??DataTable6 ;; my_ipc \ 00000004 00402DE9 PUSH {LR} \ 00000008 0120A0E3 MOV R2,#+1 \ 0000000C B010A0E3 MOV R1,#+176 \ 00000010 DE1C81E3 ORR R1,R1,#0xDE00 \ 00000014 0900A0E3 MOV R0,#+9 \ 00000018 420C80E3 ORR R0,R0,#0x4200 \ 0000001C 000100EF SWI +256 20 } \ 00000020 0080BDE8 POP {PC} ;; return 21 22 //-------------------------------------// 23 //в принципе это тоже нужно для демона \ In segment DATA_Z, align 4, align-sorted 24 int (*old_icsm_onMessage)(CSM_RAM*,GBS_MSG*); \ old_icsm_onMessage: \ 00000000 DS8 4 \ In segment DATA_Z, align 4, align-sorted 25 void (*old_icsm_onClose)(CSM_RAM*); \ old_icsm_onClose: \ 00000000 DS8 4 26 27 extern void kill_data(void *p, void (*func_p)(void *)); 28 29 #pragma segment="ELFBEGIN" \ In segment CODE, align 4, keep-with-next 30 void ElfKiller(void) 31 { \ ElfKiller: \ 00000000 00402DE9 PUSH {LR} 32 kill_data(__segment_begin("ELFBEGIN"),(void (*)(void *))mfree_adr()); \ 00000004 158000EF SWI +32789 \ 00000008 0010A0E1 MOV R1,R0 \ 0000000C 04009FE5 LDR R0,??ElfKiller_0 ;; SFB(ELFBEGIN) \ 00000010 0040BDE8 POP {LR} ;; Pop \ 00000014 ........ _BF kill_data,??kill_data??rA ;; tailcall \ ??ElfKiller_0: \ 00000018 ........ DC32 SFB(ELFBEGIN) 33 } 34 35 //-------------------------------------// 36 37 38 39 #define TMR_SECOND 216 \ In segment DATA_Z, align 4, align-sorted 40 GBSTMR mytmr; \ mytmr: \ 00000000 DS8 16 \ In segment DATA_Z, align 4, align-sorted 41 int my_csm_id; \ my_csm_id: \ 00000000 DS8 4 \ In segment DATA_Z, align 4, align-sorted 42 unsigned int *ErrorNumber; \ ErrorNumber: \ 00000000 DS8 4 43 \ In segment DATA_C, align 1, align-sorted 44 const char percent_t[]="%t"; \ percent_t: \ 00000000 257400 DC8 "%t" 45 46 typedef struct 47 { 48 CSM_RAM csm; 49 int gui_id; 50 }MAIN_CSM; 51 52 // ---------------------------------------------------------------------------- 53 #define idlegui_id(icsm) (((int *)icsm)[DISPLACE_OF_IDLEGUI_ID/4]) 54 55 #pragma inline=forced 56 int toupper(int c) 57 { 58 if ((c>='a')&&(c<='z')) c+='A'-'a'; 59 return(c); 60 } 61 #pragma inline 62 int strcmp_nocase(const char *s1,const char *s2) 63 { 64 int i; 65 int c; 66 while(!(i=(c=toupper(*s1++))-toupper(*s2++))) if (!c) break; 67 return(i); 68 } 69 \ In segment CODE, align 4, keep-with-next 70 int get_string_width(WSHDR *ws, int font) 71 { \ get_string_width: \ 00000000 F0402DE9 PUSH {R4-R7,LR} 72 int width=0; 73 unsigned short *body=ws->wsbody; \ 00000004 006090E5 LDR R6,[R0, #+0] \ 00000008 0140A0E1 MOV R4,R1 74 int len=body[0]; \ 0000000C B070D6E1 LDRH R7,[R6, #+0] \ 00000010 0050A0E3 MOV R5,#+0 \ 00000014 000057E3 CMP R7,#+0 \ 00000018 0600000A BEQ ??get_string_width_0 75 while(len) 76 { 77 width+=GetSymbolWidth(body[len],font); \ ??get_string_width_1: \ 0000001C 870086E0 ADD R0,R6,R7, LSL #+1 \ 00000020 B000D0E1 LDRH R0,[R0, #+0] \ 00000024 0410A0E1 MOV R1,R4 \ 00000028 E10100EF SWI +481 \ 0000002C 055080E0 ADD R5,R0,R5 78 len--; \ 00000030 017057E2 SUBS R7,R7,#+1 79 } \ 00000034 F8FFFF1A BNE ??get_string_width_1 80 return (width+1);//хз, без этого тупит \ ??get_string_width_0: \ 00000038 010085E2 ADD R0,R5,#+1 \ 0000003C F080BDE8 POP {R4-R7,PC} ;; return 81 } 82 \ In segment DATA_C, align 4, align-sorted 83 const char per_t[]="%t"; \ per_t: \ 00000000 257400 DC8 "%t" \ 00000003 00 DC8 0 \ 00000004 CEF220CEEBE5 DC8 "\316\362 \316\353\345\343\340 \361 \317\340\370\352\356\351!!!:)" \ E3E020F120CF \ E0F8EAEEE921 \ 21213A2900 \ 0000001B 00 DC8 0 84 \ In segment DATA_C, align 1, align-sorted 85 const char per_s[]="%s"; \ per_s: \ 00000000 257300 DC8 "%s" 86 void *canvasdata; \ In segment DATA_Z, align 4, align-sorted 87 char *s,*s1,*s2,*s3; \ s: \ 00000000 DS8 4 \ In segment DATA_Z, align 4, align-sorted \ s1: \ 00000000 DS8 4 \ In segment DATA_Z, align 4, align-sorted \ s2: \ 00000000 DS8 4 \ In segment DATA_Z, align 4, align-sorted \ s3: \ 00000000 DS8 4 88 int X1=2,Y1=100; 89 int col=0; \ In segment DATA_Z, align 4, align-sorted 90 GBSTMR tmr; \ tmr: \ 00000000 DS8 16 91 int str; 92 WSHDR *ws1; \ In segment CODE, align 4, keep-with-next 93 int DrawChar(char *s,int str) 94 { \ DrawChar: \ 00000000 F0412DE9 PUSH {R4-R8,LR} 95 if(col<23)col++; else col=0; \ 00000004 ........ LDR R4,??DataTable3 ;; canvasdata \ 00000008 0150A0E1 MOV R5,R1 \ 0000000C 0C1094E5 LDR R1,[R4, #+12] 96 wsprintf(ws1,per_t,s); \ 00000010 0020A0E1 MOV R2,R0 \ 00000014 140094E5 LDR R0,[R4, #+20] \ 00000018 170051E3 CMP R1,#+23 \ 0000001C 011081B2 ADDLT R1,R1,#+1 \ 00000020 0010A0A3 MOVGE R1,#+0 \ 00000024 0C1084E5 STR R1,[R4, #+12] \ 00000028 ........ LDR R1,??DataTable4 ;; per_t \ 0000002C 240100EF SWI +292 97 DrawCanvas(canvasdata, X1+str+2, Y1, X1+str+Get_WS_width(ws1, FONT_MEDIUM), Y1+GetFontYSIZE(FONT_MEDIUM), 1); \ 00000030 0400A0E3 MOV R0,#+4 \ 00000034 C50100EF SWI +453 \ 00000038 0060A0E1 MOV R6,R0 \ 0000003C 140094E5 LDR R0,[R4, #+20] \ 00000040 0410A0E3 MOV R1,#+4 \ 00000044 080200EF SWI +520 \ 00000048 041094E5 LDR R1,[R4, #+4] \ 0000004C 082094E5 LDR R2,[R4, #+8] \ 00000050 0130A0E3 MOV R3,#+1 \ 00000054 08002DE9 PUSH {R3} \ 00000058 011085E0 ADD R1,R5,R1 \ 0000005C 023086E0 ADD R3,R6,R2 \ 00000060 08002DE9 PUSH {R3} \ 00000064 013080E0 ADD R3,R0,R1 \ 00000068 000094E5 LDR R0,[R4, #+0] \ 0000006C 021081E2 ADD R1,R1,#+2 \ 00000070 250000EF SWI +37 98 DrawString(ws1,X1+str+2,Y1,X1+str+Get_WS_width(ws1, FONT_MEDIUM)+4, Y1+GetFontYSIZE(FONT_MEDIUM), FONT_MEDIUM,0,GetPaletteAdrByColorIndex(col),GetPaletteAdrByColorIndex(23)); \ 00000074 1700A0E3 MOV R0,#+23 \ 00000078 2E0100EF SWI +302 \ 0000007C 0060A0E1 MOV R6,R0 \ 00000080 0C0094E5 LDR R0,[R4, #+12] \ 00000084 2E0100EF SWI +302 \ 00000088 0070A0E1 MOV R7,R0 \ 0000008C 0400A0E3 MOV R0,#+4 \ 00000090 C50100EF SWI +453 \ 00000094 0080A0E1 MOV R8,R0 \ 00000098 140094E5 LDR R0,[R4, #+20] \ 0000009C 0410A0E3 MOV R1,#+4 \ 000000A0 080200EF SWI +520 \ 000000A4 041094E5 LDR R1,[R4, #+4] \ 000000A8 082094E5 LDR R2,[R4, #+8] \ 000000AC 40002DE9 PUSH {R6} \ 000000B0 80002DE9 PUSH {R7} \ 000000B4 0030A0E3 MOV R3,#+0 \ 000000B8 08002DE9 PUSH {R3} \ 000000BC 011085E0 ADD R1,R5,R1 \ 000000C0 010080E0 ADD R0,R0,R1 \ 000000C4 021081E2 ADD R1,R1,#+2 \ 000000C8 0430A0E3 MOV R3,#+4 \ 000000CC 08002DE9 PUSH {R3} \ 000000D0 023088E0 ADD R3,R8,R2 \ 000000D4 08002DE9 PUSH {R3} \ 000000D8 043080E2 ADD R3,R0,#+4 \ 000000DC 140094E5 LDR R0,[R4, #+20] \ 000000E0 4C0100EF SWI +332 99 return get_string_width(ws1,FONT_MEDIUM); \ 000000E4 140094E5 LDR R0,[R4, #+20] \ 000000E8 0410A0E3 MOV R1,#+4 \ 000000EC ........ BL get_string_width \ 000000F0 1CD08DE2 ADD SP,SP,#+28 \ 000000F4 F081BDE8 POP {R4-R8,PC} ;; return 100 } \ In segment DATA_I, align 4, align-sorted \ canvasdata: \ 00000000 DS8 4 \ 00000004 REQUIRE `?` \ X1: \ 00000004 DS8 4 \ 00000008 REQUIRE `?` \ Y1: \ 00000008 DS8 4 \ 0000000C REQUIRE `?` \ col: \ 0000000C DS8 4 \ 00000010 REQUIRE `?` \ `str`: \ 00000010 DS8 4 \ 00000014 REQUIRE `?` \ ws1: \ 00000014 DS8 4 \ 00000018 REQUIRE `?` 101 int w; \ w: \ 00000018 DS8 4 \ 0000001C REQUIRE `?` \ In segment CODE, align 4, keep-with-next 102 void idle() 103 { \ idle: \ 00000000 F0412DE9 PUSH {R4-R8,LR} 104 void *icsm; 105 w=ScreenW(); \ 00000004 ........ LDR R4,??DataTable3 ;; canvasdata \ 00000008 888100EF SWI +33160 \ 0000000C 180084E5 STR R0,[R4, #+24] 106 icsm=FindCSMbyID(CSM_root()->idle_id); \ 00000010 068100EF SWI +33030 \ 00000014 040090E5 LDR R0,[R0, #+4] \ 00000018 080100EF SWI +264 107 if (icsm) \ 0000001C 000050E3 CMP R0,#+0 \ 00000020 F081BD08 POPEQ {R4-R8,PC} 108 { 109 if (IsGuiOnTop(idlegui_id(icsm))) //Если IdleGui на самом верху \ 00000024 2C0090E5 LDR R0,[R0, #+44] \ 00000028 350100EF SWI +309 \ 0000002C 000050E3 CMP R0,#+0 \ 00000030 F081BD08 POPEQ {R4-R8,PC} 110 { 111 GUI *igui=GetTopGUI(); 112 if (igui) //И он существует \ 00000034 4D0100EF SWI +333 \ 00000038 000050E3 CMP R0,#+0 \ 0000003C F081BD08 POPEQ {R4-R8,PC} 113 { 114 115 canvasdata = BuildCanvas(); \ 00000040 F18000EF SWI +33009 \ 00000044 000084E5 STR R0,[R4, #+0] 116 str=DrawChar("Д",2); \ 00000048 0210A0E3 MOV R1,#+2 \ 0000004C 720F8FE2 ADR R0,??idle_0 ;; "Д" \ 00000050 ........ BL DrawChar \ 00000054 100084E5 STR R0,[R4, #+16] 117 str+=DrawChar("ю",str); \ 00000058 705F8FE2 ADR R5,??idle_0+0x4 ;; "ю" \ 0000005C 0010A0E1 MOV R1,R0 \ 00000060 0500A0E1 MOV R0,R5 \ 00000064 ........ BL DrawChar \ 00000068 101094E5 LDR R1,[R4, #+16] 118 str+=DrawChar("х",str); \ 0000006C 6C6F8FE2 ADR R6,??idle_0+0x8 ;; "х" \ 00000070 011080E0 ADD R1,R0,R1 \ 00000074 101084E5 STR R1,[R4, #+16] \ 00000078 0600A0E1 MOV R0,R6 \ 0000007C ........ BL DrawChar \ 00000080 101094E5 LDR R1,[R4, #+16] \ 00000084 011080E0 ADD R1,R0,R1 \ 00000088 101084E5 STR R1,[R4, #+16] 119 str+=DrawChar("а",str); \ 0000008C 650F8FE2 ADR R0,??idle_0+0xC ;; "а" \ 00000090 ........ BL DrawChar \ 00000094 101094E5 LDR R1,[R4, #+16] \ 00000098 010080E0 ADD R0,R0,R1 \ 0000009C 100084E5 STR R0,[R4, #+16] 120 str+=10; \ 000000A0 0A1080E2 ADD R1,R0,#+10 \ 000000A4 101084E5 STR R1,[R4, #+16] 121 str+=DrawChar("с",str); \ 000000A8 5F0F8FE2 ADR R0,??idle_0+0x10 ;; "с" \ 000000AC ........ BL DrawChar \ 000000B0 101094E5 LDR R1,[R4, #+16] \ 000000B4 010080E0 ADD R0,R0,R1 \ 000000B8 100084E5 STR R0,[R4, #+16] 122 str+=10; \ 000000BC 0A1080E2 ADD R1,R0,#+10 \ 000000C0 101084E5 STR R1,[R4, #+16] 123 str+=DrawChar("д",str); \ 000000C4 590F8FE2 ADR R0,??idle_0+0x14 ;; "д" \ 000000C8 ........ BL DrawChar \ 000000CC 101094E5 LDR R1,[R4, #+16] \ 000000D0 011080E0 ADD R1,R0,R1 \ 000000D4 101084E5 STR R1,[R4, #+16] 124 str+=DrawChar("н",str); \ 000000D8 550F8FE2 ADR R0,??idle_0+0x18 ;; "н" \ 000000DC ........ BL DrawChar \ 000000E0 101094E5 LDR R1,[R4, #+16] \ 000000E4 011080E0 ADD R1,R0,R1 \ 000000E8 101084E5 STR R1,[R4, #+16] 125 str+=DrawChar("ю",str); \ 000000EC 0500A0E1 MOV R0,R5 \ 000000F0 ........ BL DrawChar \ 000000F4 101094E5 LDR R1,[R4, #+16] 126 str+=DrawChar("х",str); 127 str+=DrawChar("о",str); 128 str+=DrawChar("й",str); 129 str+=DrawChar("!",str); \ 000000F8 4E5F8FE2 ADR R5,??idle_0+0x1C ;; "!" \ 000000FC 011080E0 ADD R1,R0,R1 \ 00000100 101084E5 STR R1,[R4, #+16] \ 00000104 0600A0E1 MOV R0,R6 \ 00000108 ........ BL DrawChar \ 0000010C 101094E5 LDR R1,[R4, #+16] \ 00000110 011080E0 ADD R1,R0,R1 \ 00000114 101084E5 STR R1,[R4, #+16] \ 00000118 470F8FE2 ADR R0,??idle_0+0x20 ;; "о" \ 0000011C ........ BL DrawChar \ 00000120 101094E5 LDR R1,[R4, #+16] \ 00000124 011080E0 ADD R1,R0,R1 \ 00000128 101084E5 STR R1,[R4, #+16] \ 0000012C 430F8FE2 ADR R0,??idle_0+0x24 ;; "й" \ 00000130 ........ BL DrawChar \ 00000134 101094E5 LDR R1,[R4, #+16] \ 00000138 011080E0 ADD R1,R0,R1 \ 0000013C 101084E5 STR R1,[R4, #+16] \ 00000140 0500A0E1 MOV R0,R5 \ 00000144 ........ BL DrawChar \ 00000148 101094E5 LDR R1,[R4, #+16] \ 0000014C 011080E0 ADD R1,R0,R1 \ 00000150 101084E5 STR R1,[R4, #+16] 130 str+=DrawChar("!",str); \ 00000154 0500A0E1 MOV R0,R5 \ 00000158 ........ BL DrawChar \ 0000015C 101094E5 LDR R1,[R4, #+16] \ 00000160 011080E0 ADD R1,R0,R1 \ 00000164 101084E5 STR R1,[R4, #+16] 131 str+=DrawChar("!",str); \ 00000168 0500A0E1 MOV R0,R5 \ 0000016C ........ BL DrawChar \ 00000170 101094E5 LDR R1,[R4, #+16] \ 00000174 010080E0 ADD R0,R0,R1 132 133 // DrawRoundedFrame( X1-2,Y1-2,X1+str+2, Y1 + 2 + GetFontYSIZE(FONT_MEDIUM),0, 0, 0, GetPaletteAdrByColorIndex(col), GetPaletteAdrByColorIndex(23)); 134 wsprintf(ws1,per_t,"От Олега с Пашкой!!!:)"); \ 00000178 ........ LDR R1,??DataTable4 ;; per_t \ 0000017C 100084E5 STR R0,[R4, #+16] \ 00000180 140094E5 LDR R0,[R4, #+20] \ 00000184 042081E2 ADD R2,R1,#+4 \ 00000188 240100EF SWI +292 135 DrawScrollString(ws1,X1+2,Y1+GetFontYSIZE(FONT_MEDIUM)+10,w,Y1+GetFontYSIZE(FONT_MEDIUM)+10+GetFontYSIZE(FONT_SMALL),1,FONT_SMALL,0,GetPaletteAdrByColorIndex(col),GetPaletteAdrByColorIndex(23)); \ 0000018C 1700A0E3 MOV R0,#+23 \ 00000190 2E0100EF SWI +302 \ 00000194 0070A0E1 MOV R7,R0 \ 00000198 0C0094E5 LDR R0,[R4, #+12] \ 0000019C 2E0100EF SWI +302 \ 000001A0 0080A0E1 MOV R8,R0 \ 000001A4 0400A0E3 MOV R0,#+4 \ 000001A8 C50100EF SWI +453 \ 000001AC 0050A0E1 MOV R5,R0 \ 000001B0 0800A0E3 MOV R0,#+8 \ 000001B4 C50100EF SWI +453 \ 000001B8 0060A0E1 MOV R6,R0 \ 000001BC 0400A0E3 MOV R0,#+4 \ 000001C0 C50100EF SWI +453 \ 000001C4 081094E5 LDR R1,[R4, #+8] \ 000001C8 80002DE9 PUSH {R7} \ 000001CC 00012DE9 PUSH {R8} \ 000001D0 0020A0E3 MOV R2,#+0 \ 000001D4 04002DE9 PUSH {R2} \ 000001D8 010080E0 ADD R0,R0,R1 \ 000001DC 0820A0E3 MOV R2,#+8 \ 000001E0 04002DE9 PUSH {R2} \ 000001E4 0120A0E3 MOV R2,#+1 \ 000001E8 04002DE9 PUSH {R2} \ 000001EC 012085E0 ADD R2,R5,R1 \ 000001F0 022086E0 ADD R2,R6,R2 \ 000001F4 0A2082E2 ADD R2,R2,#+10 \ 000001F8 04002DE9 PUSH {R2} \ 000001FC 183094E5 LDR R3,[R4, #+24] \ 00000200 0A2080E2 ADD R2,R0,#+10 \ 00000204 040094E5 LDR R0,[R4, #+4] \ 00000208 021080E2 ADD R1,R0,#+2 \ 0000020C 140094E5 LDR R0,[R4, #+20] \ 00000210 070200EF SWI +519 \ 00000214 18D08DE2 ADD SP,SP,#+24 136 } 137 } 138 } 139 } \ 00000218 F081BDE8 POP {R4-R8,PC} ;; return \ ??idle_0: \ 0000021C C4000000 DC8 "Д",+0,+0 \ 00000220 FE000000 DC8 "ю",+0,+0 \ 00000224 F5000000 DC8 "х",+0,+0 \ 00000228 E0000000 DC8 "а",+0,+0 \ 0000022C F1000000 DC8 "с",+0,+0 \ 00000230 E4000000 DC8 "д",+0,+0 \ 00000234 ED000000 DC8 "н",+0,+0 \ 00000238 21000000 DC8 "!",+0,+0 \ 0000023C EE000000 DC8 "о",+0,+0 \ 00000240 E9000000 DC8 "й",+0,+0 140 \ In segment CODE, align 4, keep-with-next 141 void check() 142 { \ check: \ 00000000 00402DE9 PUSH {LR} 143 idle(); \ 00000004 ........ BL idle 144 GBS_StartTimerProc(&tmr, 10*TMR_SECOND/10,check); \ 00000008 0C209FE5 LDR R2,??check_0 ;; check \ 0000000C ........ LDR R0,??DataTable7 ;; tmr \ 00000010 D810A0E3 MOV R1,#+216 \ 00000014 4D0000EF SWI +77 145 } \ 00000018 0080BDE8 POP {PC} ;; return \ ??check_0: \ 0000001C ........ DC32 check \ In segment CODE, align 4, keep-with-next 146 int maincsm_onmessage(CSM_RAM* data,GBS_MSG* msg) 147 { \ maincsm_onmessage: \ 00000000 00402DE9 PUSH {LR} 148 if (msg->msg==MSG_IPC)//это проверка если через TimerProc() или при старте эльфа отправили запрос из эльфа,то выполняем команду \ 00000004 040091E5 LDR R0,[R1, #+4] \ 00000008 B020A0E3 MOV R2,#+176 \ 0000000C DE2C82E3 ORR R2,R2,#0xDE00 \ 00000010 020050E1 CMP R0,R2 \ 00000014 1B00001A BNE ??maincsm_onmessage_0 149 { 150 IPC_REQ *ipc; 151 if ((ipc=(IPC_REQ*)msg->data0)) \ 00000018 0C0091E5 LDR R0,[R1, #+12] \ 0000001C 000050E3 CMP R0,#+0 \ 00000020 1800000A BEQ ??maincsm_onmessage_0 152 { 153 if (strcmp_nocase(ipc->name_to,ipc_my_name)==0) \ 00000024 64209FE5 LDR R2,??maincsm_onmessage_1 ;; ipc_my_name \ 00000028 000090E5 LDR R0,[R0, #+0] \ ??maincsm_onmessage_2: \ 0000002C 0030D0E5 LDRB R3,[R0, #+0] \ 00000030 610053E3 CMP R3,#+97 \ 00000034 010000BA BLT ??maincsm_onmessage_3 \ 00000038 7B0053E3 CMP R3,#+123 \ 0000003C 203043B2 SUBLT R3,R3,#+32 \ ??maincsm_onmessage_3: \ 00000040 00C0D2E5 LDRB R12,[R2, #+0] \ 00000044 010080E2 ADD R0,R0,#+1 \ 00000048 61005CE3 CMP R12,#+97 \ 0000004C 010000BA BLT ??maincsm_onmessage_4 \ 00000050 7B005CE3 CMP R12,#+123 \ 00000054 20C04CB2 SUBLT R12,R12,#+32 \ ??maincsm_onmessage_4: \ 00000058 012082E2 ADD R2,R2,#+1 \ 0000005C 0CC053E0 SUBS R12,R3,R12 \ 00000060 0800001A BNE ??maincsm_onmessage_0 \ 00000064 000053E3 CMP R3,#+0 \ 00000068 EFFFFF1A BNE ??maincsm_onmessage_2 154 { 155 switch (msg->submess) \ 0000006C 080091E5 LDR R0,[R1, #+8] \ 00000070 010050E3 CMP R0,#+1 \ 00000074 0300001A BNE ??maincsm_onmessage_0 156 { 157 case IPC_UPDATE_STAT://в нашем случае запускаем таймер для того точбы отправить структуру таску 158 GBS_StartTimerProc(&mytmr, 10*TMR_SECOND/10, TimerProc); \ 00000078 14209FE5 LDR R2,??maincsm_onmessage_1+0x4 ;; TimerProc \ 0000007C 14009FE5 LDR R0,??maincsm_onmessage_1+0x8 ;; mytmr \ 00000080 D810A0E3 MOV R1,#+216 \ 00000084 4D0000EF SWI +77 159 } 160 } 161 } 162 } 163 164 return(1); \ ??maincsm_onmessage_0: \ 00000088 0100A0E3 MOV R0,#+1 \ 0000008C 0080BDE8 POP {PC} ;; return \ ??maincsm_onmessage_1: \ 00000090 ........ DC32 ipc_my_name \ 00000094 ........ DC32 TimerProc \ 00000098 ........ DC32 mytmr 165 } 166 \ In segment CODE, align 4, keep-with-next 167 static void maincsm_oncreate(CSM_RAM *data) 168 { \ maincsm_oncreate: \ 00000000 00402DE9 PUSH {LR} 169 ws1=AllocWS(256); \ 00000004 400FA0E3 MOV R0,#+256 \ 00000008 250100EF SWI +293 \ 0000000C 20109FE5 LDR R1,??maincsm_oncreate_0 ;; canvasdata + 20 170 GBS_SendMessage(MMI_CEPID,MSG_IPC,IPC_UPDATE_STAT,&my_ipc);//При открытии эльфа отсылаем ипц чтобы таск понял что эльф запущен \ 00000010 ........ LDR R3,??DataTable6 ;; my_ipc \ 00000014 000081E5 STR R0,[R1, #+0] \ 00000018 0120A0E3 MOV R2,#+1 \ 0000001C B010A0E3 MOV R1,#+176 \ 00000020 DE1C81E3 ORR R1,R1,#0xDE00 \ 00000024 0900A0E3 MOV R0,#+9 \ 00000028 420C80E3 ORR R0,R0,#0x4200 \ 0000002C 000100EF SWI +256 171 } \ 00000030 0080BDE8 POP {PC} ;; return \ ??maincsm_oncreate_0: \ 00000034 ........ DC32 canvasdata + 20 172 \ In segment CODE, align 4, keep-with-next 173 void maincsm_onclose(CSM_RAM *data) 174 { 175 GBS_DelTimer(&tmr); \ maincsm_onclose: \ 00000000 ........ LDR R0,??DataTable7 ;; tmr \ 00000004 00402DE9 PUSH {LR} \ 00000008 8C0100EF SWI +396 176 extern void seqkill(void *data, void(*next_in_seq)(CSM_RAM *), void *data_to_kill, void *seqkiller); 177 extern void *ELF_BEGIN; 178 } \ 0000000C 0080BDE8 POP {PC} ;; return 179 \ In segment DATA_Z, align 4, align-sorted 180 static unsigned short maincsm_name_body[140]; \ maincsm_name_body: \ 00000000 DS8 280 \ In segment DATA_C, align 4, align-sorted 181 const int minus11=-11; \ minus11: \ 00000000 F5FFFFFF DC32 -11 182 183 static const struct 184 { 185 CSM_DESC maincsm; 186 WSHDR maincsm_name; \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 737572707269 DC8 "surpriz" \ 7A00 \ 00000008 ............ DC32 maincsm_onmessage, maincsm_oncreate, 0, 0, 0, 0, maincsm_onclose \ ....00000000 \ 000000000000 \ 000000000000 \ ........ \ 00000024 280000000100 DC32 40, 1, minus11, maincsm_name_body, 55AACCCCH, 3333AA55H, 0 \ 0000........ \ ........CCCC \ AA5555AA3333 \ 00000000 \ 00000040 8B00 DC16 139 \ 00000042 0000 DC8 0, 0 187 }MAINCSM = 188 { 189 { 190 maincsm_onmessage, 191 maincsm_oncreate, 192 #ifdef NEWSGOLD 193 0, 194 0, 195 0, 196 0, 197 #endif 198 maincsm_onclose, 199 sizeof(CSM_RAM), 200 1, 201 &minus11 202 }, 203 { 204 maincsm_name_body, 205 NAMECSM_MAGIC1, 206 NAMECSM_MAGIC2, 207 0x0, 208 139 209 } 210 }; 211 212 213 static void UpdateCSMname(void) 214 { 215 wsprintf((WSHDR *)(&MAINCSM.maincsm_name),"surpriz"); 216 } 217 // ---------------------------------------------------------------------------- 218 219 \ In segment DATA_Z, align 4, align-sorted 220 CSM_DESC icsmd; \ icsmd: \ 00000000 DS8 40 \ In segment CODE, align 4, keep-with-next 221 int main() 222 { \ main: \ 00000000 70402DE9 PUSH {R4-R6,LR} 223 //-------------------------------------// 224 CSMROOT *csmr;//А это самое интересное:) тут замуты с цсм для того чтобы он определялся как демон,А не просто процесс 225 CSM_RAM *save_cmpc;//и голову ломать не стоит,прост копируешь отсюда и усе... 226 CSM_RAM main_csm; 227 UpdateCSMname(); \ 00000004 54409FE5 LDR R4,??main_0 ;; `?` \ 00000008 28D04DE2 SUB SP,SP,#+40 \ 0000000C 0410A0E1 MOV R1,R4 \ 00000010 300084E2 ADD R0,R4,#+48 \ 00000014 240100EF SWI +292 228 LockSched(); \ 00000018 460100EF SWI +326 229 csmr=CSM_root(); \ 0000001C 068100EF SWI +33030 \ 00000020 0050A0E1 MOV R5,R0 230 save_cmpc=csmr->csm_q->current_msg_processing_csm; \ 00000024 080095E5 LDR R0,[R5, #+8] 231 csmr->csm_q->current_msg_processing_csm=csmr->csm_q->csm.first; 232 CreateCSM(&MAINCSM.maincsm,&main_csm,0); \ 00000028 0020A0E3 MOV R2,#+0 \ 0000002C 081090E5 LDR R1,[R0, #+8] \ 00000030 046090E5 LDR R6,[R0, #+4] \ 00000034 041080E5 STR R1,[R0, #+4] \ 00000038 0D10A0E1 MOV R1,SP \ 0000003C 080084E2 ADD R0,R4,#+8 \ 00000040 070100EF SWI +263 233 csmr->csm_q->current_msg_processing_csm=save_cmpc; \ 00000044 080095E5 LDR R0,[R5, #+8] \ 00000048 046080E5 STR R6,[R0, #+4] 234 UnlockSched(); \ 0000004C 470100EF SWI +327 235 //-------------------------------------// 236 check(); \ 00000050 ........ BL check 237 238 return (0); \ 00000054 0000A0E3 MOV R0,#+0 \ 00000058 28D08DE2 ADD SP,SP,#+40 \ 0000005C 7080BDE8 POP {R4-R6,PC} ;; return \ ??main_0: \ 00000060 ........ DC32 `?` 239 } \ In segment CODE, align 4, keep-with-next \ ??DataTable3: \ 00000000 ........ DC32 canvasdata \ In segment CODE, align 4, keep-with-next \ ??DataTable4: \ 00000000 ........ DC32 per_t \ In segment CODE, align 4, keep-with-next \ ??DataTable6: \ 00000000 ........ DC32 my_ipc \ In segment CODE, align 4, keep-with-next \ ??DataTable7: \ 00000000 ........ DC32 tmr \ In segment DATA_ID, align 4, align-sorted \ `?`: \ 00000000 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000004 02000000 DC32 2 \ `?`: \ 00000008 64000000 DC32 100 \ `?`: \ 0000000C 00000000 DC32 0 \ `?`: \ 00000010 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000014 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000018 00000000 DC8 0, 0, 0, 0 \ In segment ELFBEGIN, align 1 \ In segment DATA_C, align 1, align-sorted \ 00000000 ED00 DC8 "\355" \ In segment DATA_C, align 1, align-sorted \ 00000000 E400 DC8 "\344" \ In segment DATA_C, align 1, align-sorted \ 00000000 F100 DC8 "\361" \ In segment DATA_C, align 1, align-sorted \ 00000000 E000 DC8 "\340" \ In segment DATA_C, align 1, align-sorted \ 00000000 F500 DC8 "\365" \ In segment DATA_C, align 1, align-sorted \ 00000000 FE00 DC8 "\376" \ In segment DATA_C, align 1, align-sorted \ 00000000 C400 DC8 "\304" \ In segment DATA_C, align 1, align-sorted \ 00000000 2100 DC8 "!" \ In segment DATA_C, align 1, align-sorted \ 00000000 E900 DC8 "\351" \ In segment DATA_C, align 1, align-sorted \ 00000000 EE00 DC8 "\356" Maximum stack usage in bytes: Function CSTACK -------- ------ DrawChar 52 ElfKiller 4 TimerProc 4 check 4 get_string_width 20 idle 48 main 56 maincsm_onclose 4 maincsm_oncreate 4 maincsm_onmessage 4 Segment part sizes: Function/Label Bytes -------------- ----- ipc_my_name 8 my_ipc 12 TimerProc 36 old_icsm_onMessage 4 old_icsm_onClose 4 ElfKiller 28 mytmr 16 my_csm_id 4 ErrorNumber 4 percent_t 3 get_string_width 64 per_t 28 per_s 3 s 4 s1 4 s2 4 s3 4 tmr 16 DrawChar 248 canvasdata 28 idle 580 check 32 maincsm_onmessage 156 maincsm_oncreate 56 maincsm_onclose 16 maincsm_name_body 280 minus11 4 ? 68 icsmd 40 main 100 ??DataTable3 4 ??DataTable4 4 ??DataTable6 4 ??DataTable7 4 ? 28 ? 2 ? 2 ? 2 ? 2 ? 2 ? 2 ? 2 ? 2 ? 2 ? 2 Others 76 1 384 bytes in segment CODE 146 bytes in segment DATA_C 28 bytes in segment DATA_I 28 bytes in segment DATA_ID 384 bytes in segment DATA_Z 24 bytes in segment INITTAB 1 332 bytes of CODE memory (+ 76 bytes shared) 174 bytes of CONST memory 412 bytes of DATA memory Errors: none Warnings: none