edithex.txt
来自「STM32F103ZET6+UCOSII+UCGUI源码」· 文本 代码 · 共 283 行
TXT
283 行
; generated by ARM C/C++ Compiler with , RVCT4.0 [Build 524] for uVision
; commandline ArmCC [--split_sections --debug -c --asm --interleave -o.\Obj\edithex.o --depend=.\Obj\edithex.d --device=DARMSTM --apcs=interwork -O3 -I..\..\include -I..\..\..\FWLib\library\inc -I..\..\..\USBLib\library\inc -I..\..\Config -I..\..\GUI\Core -I..\..\GUI\Font -I..\..\GUI\ConvertColor -I..\..\GUI\AntiAlias -I..\..\GUI\ConvertMono -I..\..\GUI\JPEG -I..\..\GUI\MemDev -I..\..\GUI\MultiLayer -I..\..\GUI\Widget -I..\..\GUI\WM -IC:\Keil\ARM\INC\ST\STM32F10x ..\..\GUI\Widget\EDITHex.c]
THUMB
AREA ||i.EDIT_SetHexMode||, CODE, READONLY, ALIGN=2
EDIT_SetHexMode PROC
;;;188 */
;;;189 void EDIT_SetHexMode(EDIT_Handle hEdit, U32 Value, U32 Min, U32 Max) {
000000 e92d41f0 PUSH {r4-r8,lr}
000004 ea5f0800 MOVS r8,r0
000008 460f MOV r7,r1
00000a 4616 MOV r6,r2
00000c 461d MOV r5,r3
;;;190 EDIT_Obj* pObj;
;;;191 WM_LOCK();
;;;192 if (hEdit) {
00000e d02a BEQ |L1.102|
;;;193 int MaxLen;
;;;194 pObj = EDIT_H2P(hEdit);
000010 4640 MOV r0,r8
000012 f7fffffe BL GUI_ALLOC_h2p
;;;195 pObj->pfAddKeyEx = _AddKeyHex;
000016 4915 LDR r1,|L1.108|
;;;196 pObj->pfUpdateBuffer= _UpdateBuffer;
000018 64c1 STR r1,[r0,#0x4c]
00001a 4915 LDR r1,|L1.112|
;;;197 pObj->CurrentValue = Value;
;;;198 pObj->CursorPos = 0;
00001c 63c7 STR r7,[r0,#0x3c]
00001e 6501 STR r1,[r0,#0x50]
000020 2100 MOVS r1,#0
;;;199 MaxLen = pObj->MaxLen;
000022 6401 STR r1,[r0,#0x40]
000024 f9b0102a LDRSH r1,[r0,#0x2a]
000028 4604 MOV r4,r0 ;194
00002a 1e0a SUBS r2,r1,#0
;;;200 if (MaxLen <= 0 ) {
00002c dc06 BGT |L1.60|
;;;201 MaxLen = _GetNumDigits(Max);
00002e 4628 MOV r0,r5
000030 2100 MOVS r1,#0
000032 e001 B |L1.56|
|L1.52|
000034 0900 LSRS r0,r0,#4
000036 1c49 ADDS r1,r1,#1
|L1.56|
000038 2800 CMP r0,#0
00003a d1fb BNE |L1.52|
|L1.60|
;;;202 }
;;;203 if (MaxLen > 8) {
00003c 2908 CMP r1,#8
00003e dd00 BLE |L1.66|
;;;204 MaxLen = 8;
000040 2108 MOVS r1,#8
|L1.66|
;;;205 }
;;;206 if (MaxLen != pObj->MaxLen) {
000042 428a CMP r2,r1
000044 d002 BEQ |L1.76|
;;;207 EDIT_SetMaxLen(hEdit, MaxLen);
000046 4640 MOV r0,r8
000048 f7fffffe BL EDIT_SetMaxLen
|L1.76|
;;;208 }
;;;209 pObj->Min = Min;
;;;210 pObj->Max = Max;
;;;211 pObj->EditMode = GUI_EDIT_MODE_OVERWRITE;
00004c e9c4650c STRD r6,r5,[r4,#0x30]
000050 2001 MOVS r0,#1
000052 f8840048 STRB r0,[r4,#0x48]
;;;212 _UpdateBuffer(hEdit);
000056 4640 MOV r0,r8
000058 f7fffffe BL _UpdateBuffer
;;;213 WM_Invalidate(hEdit);
00005c 4640 MOV r0,r8
00005e e8bd41f0 POP {r4-r8,lr}
000062 f7ffbffe B.W WM_InvalidateWindow
|L1.102|
;;;214 }
;;;215 WM_UNLOCK();
;;;216 }
000066 e8bd81f0 POP {r4-r8,pc}
;;;217
ENDP
00006a 0000 DCW 0x0000
|L1.108|
DCD _AddKeyHex
|L1.112|
DCD _UpdateBuffer
AREA ||i._AddKeyHex||, CODE, READONLY, ALIGN=1
_AddKeyHex PROC
;;;132 */
;;;133 static void _AddKeyHex(EDIT_Handle hObj, int Key) {
000000 e92d41f0 PUSH {r4-r8,lr}
000004 4606 MOV r6,r0
000006 460d MOV r5,r1
;;;134 EDIT_Obj * pObj;
;;;135 pObj = EDIT_H2P(hObj); /* The GUI needs not to be locked here. This function is called only from EDIT_AddKey which has already locked the GUI */
000008 f7fffffe BL GUI_ALLOC_h2p
00000c 0004 MOVS r4,r0
;;;136 if (pObj) {
00000e d018 BEQ |L2.66|
;;;137 switch (Key) {
000010 2d10 CMP r5,#0x10
000012 d011 BEQ |L2.56|
000014 2d11 CMP r5,#0x11
000016 d006 BEQ |L2.38|
000018 2d12 CMP r5,#0x12
00001a d00a BEQ |L2.50|
;;;138 #if EDIT_HEX_DIGITONLY
;;;139 case GUI_KEY_UP:
;;;140 {
;;;141 int Nibble = (_GetCurrentNibble(pObj) + 1) & 15;
;;;142 _EditHex(Nibble, pObj, hObj);
;;;143 }
;;;144 break;
;;;145 case GUI_KEY_DOWN:
;;;146 {
;;;147 int Nibble = (_GetCurrentNibble(pObj) + 1) & 15;
;;;148 _EditHex(Nibble, pObj, hObj);
;;;149 }
;;;150 break;
;;;151 #else
;;;152 case GUI_KEY_UP:
;;;153 _AddPosition(pObj, hObj, 1);
;;;154 break;
;;;155 case GUI_KEY_DOWN:
;;;156 _AddPosition(pObj, hObj, -1);
00001c f04f32ff MOV r2,#0xffffffff
000020 2d13 CMP r5,#0x13 ;137
000022 d113 BNE |L2.76|
000024 e000 B |L2.40|
|L2.38|
000026 2201 MOVS r2,#1 ;153
|L2.40|
000028 4631 MOV r1,r6
00002a 4620 MOV r0,r4
00002c f7fffffe BL _AddPosition
;;;157 break;
000030 e007 B |L2.66|
|L2.50|
;;;158 #endif
;;;159 case GUI_KEY_RIGHT:
;;;160 EDIT__SetCursorPos(pObj, pObj->CursorPos + 1);
000032 6c21 LDR r1,[r4,#0x40]
000034 1c49 ADDS r1,r1,#1
;;;161 break;
000036 e001 B |L2.60|
|L2.56|
;;;162 case GUI_KEY_LEFT:
;;;163 EDIT__SetCursorPos(pObj, pObj->CursorPos - 1);
000038 6c21 LDR r1,[r4,#0x40]
00003a 1e49 SUBS r1,r1,#1
|L2.60|
;;;164 break;
;;;165 default:
;;;166 {
;;;167 int Nibble = _HexChar2Int(Key);
;;;168 if (Nibble >= 0) {
;;;169 _EditHex(Nibble, pObj, hObj);
;;;170 EDIT__SetCursorPos(pObj, pObj->CursorPos + 1);
00003c 4620 MOV r0,r4
00003e f7fffffe BL EDIT__SetCursorPos
|L2.66|
;;;171 }
;;;172 }
;;;173 break;
;;;174 }
;;;175 }
;;;176 _UpdateBuffer(hObj);
000042 4630 MOV r0,r6
000044 e8bd41f0 POP {r4-r8,lr}
000048 f7ffbffe B.W _UpdateBuffer
|L2.76|
00004c f1a50730 SUB r7,r5,#0x30
000050 4638 MOV r0,r7
000052 2f09 CMP r7,#9
000054 d908 BLS |L2.104|
000056 f0250020 BIC r0,r5,#0x20
00005a f1a00141 SUB r1,r0,#0x41
00005e 2905 CMP r1,#5
000060 d801 BHI |L2.102|
000062 3837 SUBS r0,r0,#0x37
000064 e000 B |L2.104|
|L2.102|
000066 4610 MOV r0,r2
|L2.104|
000068 2800 CMP r0,#0 ;168
00006a dbea BLT |L2.66|
00006c 8d61 LDRH r1,[r4,#0x2a] ;168
00006e 6c22 LDR r2,[r4,#0x40] ;168
000070 1a89 SUBS r1,r1,r2 ;168
000072 1e49 SUBS r1,r1,#1 ;168
000074 0089 LSLS r1,r1,#2 ;168
000076 220f MOVS r2,#0xf ;168
000078 408a LSLS r2,r2,r1 ;168
00007a 4088 LSLS r0,r0,r1 ;168
00007c 6be1 LDR r1,[r4,#0x3c] ;168
00007e 4391 BICS r1,r1,r2 ;168
000080 4301 ORRS r1,r1,r0 ;168
000082 4630 MOV r0,r6 ;168
000084 f7fffffe BL EDIT_SetValue
000088 e7d3 B |L2.50|
;;;177 }
;;;178
ENDP
AREA ||i._AddPosition||, CODE, READONLY, ALIGN=1
_AddPosition PROC
;;;109 */
;;;110 static void _AddPosition(EDIT_Obj* pObj, EDIT_Handle hObj, int Sign) {
000000 b430 PUSH {r4,r5}
;;;111 int Pos;
;;;112 U32 v;
;;;113 v = 1;
;;;114 Pos = pObj->MaxLen - pObj->CursorPos - 1;
000002 f9b0302a LDRSH r3,[r0,#0x2a]
000006 6c05 LDR r5,[r0,#0x40]
000008 460c MOV r4,r1 ;110
00000a 2101 MOVS r1,#1 ;113
00000c 1b5b SUBS r3,r3,r5
00000e 1e5b SUBS r3,r3,#1
;;;115 while (Pos--) {
000010 e000 B |L3.20|
|L3.18|
;;;116 v <<= 4;
000012 0109 LSLS r1,r1,#4
|L3.20|
000014 1e5b SUBS r3,r3,#1 ;115
000016 d2fc BCS |L3.18|
;;;117 }
;;;118 if (Sign < 0)
000018 2a00 CMP r2,#0
00001a da01 BGE |L3.32|
;;;119 v = ~v + 1;
00001c 43c9 MVNS r1,r1
00001e 1c49 ADDS r1,r1,#1
|L3.32|
;;;120 EDIT_SetValue(hObj, pObj->CurrentValue + v);
000020 6bc0 LDR r0,[r0,#0x3c]
000022 4401 ADD r1,r1,r0
000024 4620 MOV r0,r4
000026 bc30 POP {r4,r5}
000028 f7ffbffe B.W EDIT_SetValue
;;;121 }
;;;122
ENDP
AREA ||i._UpdateBuffer||, CODE, READONLY, ALIGN=1
_UpdateBuffer PROC
;;;61 */
;;;62 static void _UpdateBuffer(EDIT_Handle hObj) {
000000 b538 PUSH {r3-r5,lr}
;;;63 char * s;
;;;64 EDIT_Obj * pObj;
;;;65 pObj = EDIT_H2P(hObj); /* The GUI needs not to be locked here. This function is called only from EDIT_AddKey which has already locked the GUI */
000002 f7fffffe BL GUI_ALLOC_h2p
000006 4604 MOV r4,r0
;;;66 s = (char*) GUI_ALLOC_h2p(pObj->hpText);
000008 f9b00028 LDRSH r0,[r0,#0x28]
00000c f7fffffe BL GUI_ALLOC_h2p
;;;67 GUI_AddHex(pObj->CurrentValue, pObj->MaxLen, &s);
000010 9000 STR r0,[sp,#0]
000012 8d60 LDRH r0,[r4,#0x2a]
000014 466a MOV r2,sp
000016 b2c1 UXTB r1,r0
000018 6be0 LDR r0,[r4,#0x3c]
00001a f7fffffe BL GUI_AddHex
;;;68 }
00001e bd38 POP {r3-r5,pc}
;;;69
ENDP
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?