📄 editbin.txt
字号:
; generated by ARM C/C++ Compiler with , RVCT4.0 [Build 524] for uVision
; commandline ArmCC [--split_sections --debug -c --asm --interleave -o.\Obj\editbin.o --depend=.\Obj\editbin.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\EDITBin.c]
THUMB
AREA ||i.EDIT_SetBinMode||, CODE, READONLY, ALIGN=2
EDIT_SetBinMode PROC
;;;153 */
;;;154 void EDIT_SetBinMode(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
;;;155 EDIT_Obj* pObj;
;;;156 int MaxLen;
;;;157 WM_LOCK();
;;;158 if (hEdit) {
00000e d02a BEQ |L1.102|
;;;159 pObj = EDIT_H2P(hEdit);
000010 4640 MOV r0,r8
000012 f7fffffe BL GUI_ALLOC_h2p
;;;160 pObj->pfAddKeyEx = _AddKeyBin;
000016 4915 LDR r1,|L1.108|
;;;161 pObj->pfUpdateBuffer = _UpdateBuffer;
000018 64c1 STR r1,[r0,#0x4c]
00001a 4915 LDR r1,|L1.112|
;;;162 pObj->CurrentValue = Value;
;;;163 pObj->CursorPos = 0;
00001c 63c7 STR r7,[r0,#0x3c]
00001e 6501 STR r1,[r0,#0x50]
000020 2100 MOVS r1,#0
;;;164 MaxLen = pObj->MaxLen;
000022 6401 STR r1,[r0,#0x40]
000024 f9b0102a LDRSH r1,[r0,#0x2a]
000028 4604 MOV r4,r0 ;159
00002a 1e0a SUBS r2,r1,#0
;;;165 if (MaxLen <= 0 ) {
00002c dc06 BGT |L1.60|
;;;166 MaxLen = _GetNumDigits(Max);
00002e 4628 MOV r0,r5
000030 2100 MOVS r1,#0
000032 e001 B |L1.56|
|L1.52|
000034 0840 LSRS r0,r0,#1
000036 1c49 ADDS r1,r1,#1
|L1.56|
000038 2800 CMP r0,#0
00003a d1fb BNE |L1.52|
|L1.60|
;;;167 }
;;;168 if (MaxLen > 32) {
00003c 2920 CMP r1,#0x20
00003e dd00 BLE |L1.66|
;;;169 MaxLen = 32;
000040 2120 MOVS r1,#0x20
|L1.66|
;;;170 }
;;;171 if (MaxLen != pObj->MaxLen) {
000042 428a CMP r2,r1
000044 d002 BEQ |L1.76|
;;;172 EDIT_SetMaxLen(hEdit, MaxLen);
000046 4640 MOV r0,r8
000048 f7fffffe BL EDIT_SetMaxLen
|L1.76|
;;;173 }
;;;174 pObj->Min = Min;
;;;175 pObj->Max = Max;
;;;176 pObj->EditMode = GUI_EDIT_MODE_OVERWRITE;
00004c e9c4650c STRD r6,r5,[r4,#0x30]
000050 2001 MOVS r0,#1
000052 f8840048 STRB r0,[r4,#0x48]
;;;177 _UpdateBuffer(hEdit);
000056 4640 MOV r0,r8
000058 f7fffffe BL _UpdateBuffer
;;;178 WM_Invalidate(hEdit);
00005c 4640 MOV r0,r8
00005e e8bd41f0 POP {r4-r8,lr}
000062 f7ffbffe B.W WM_InvalidateWindow
|L1.102|
;;;179 }
;;;180 WM_UNLOCK();
;;;181 }
000066 e8bd81f0 POP {r4-r8,pc}
;;;182
ENDP
00006a 0000 DCW 0x0000
|L1.108|
DCD _AddKeyBin
|L1.112|
DCD _UpdateBuffer
AREA ||i._AddKeyBin||, CODE, READONLY, ALIGN=1
_AddKeyBin PROC
;;;100 */
;;;101 static void _AddKeyBin(EDIT_Handle hObj, int Key) {
000000 b570 PUSH {r4-r6,lr}
000002 4606 MOV r6,r0
000004 460d MOV r5,r1
;;;102 EDIT_Obj * pObj;
;;;103 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 */
000006 f7fffffe BL GUI_ALLOC_h2p
00000a 0004 MOVS r4,r0
;;;104 if (pObj) {
00000c d037 BEQ |L2.126|
;;;105 switch (Key) {
00000e 2d10 CMP r5,#0x10
000010 d01d BEQ |L2.78|
000012 2d11 CMP r5,#0x11
000014 d009 BEQ |L2.42|
000016 2d12 CMP r5,#0x12
000018 d016 BEQ |L2.72|
00001a 2d13 CMP r5,#0x13
00001c d11d BNE |L2.90|
;;;106 case GUI_KEY_UP:
;;;107 {
;;;108 int Bit = _GetCurrentBit(pObj) + 1;
;;;109 if (Bit > 1) {
;;;110 Bit = 0;
;;;111 }
;;;112 _EditBin(Bit, pObj, hObj);
;;;113 }
;;;114 break;
;;;115 case GUI_KEY_DOWN:
;;;116 {
;;;117 int Bit = _GetCurrentBit(pObj) - 1;
00001e 4620 MOV r0,r4
000020 f7fffffe BL _GetCurrentBit
000024 1e40 SUBS r0,r0,#1
;;;118 if (Bit < 0) {
000026 d40d BMI |L2.68|
000028 e006 B |L2.56|
|L2.42|
00002a 4620 MOV r0,r4 ;108
00002c f7fffffe BL _GetCurrentBit
000030 1c40 ADDS r0,r0,#1 ;108
000032 2801 CMP r0,#1 ;109
000034 dd00 BLE |L2.56|
000036 2000 MOVS r0,#0 ;110
|L2.56|
000038 4632 MOV r2,r6 ;112
00003a 4621 MOV r1,r4 ;112
00003c b2c0 UXTB r0,r0 ;112
00003e f7fffffe BL _EditBin
000042 e017 B |L2.116|
|L2.68|
;;;119 Bit = 1;
000044 2001 MOVS r0,#1
000046 e7f7 B |L2.56|
|L2.72|
;;;120 }
;;;121 _EditBin(Bit, pObj, hObj);
;;;122 }
;;;123 break;
;;;124 case GUI_KEY_RIGHT:
;;;125 EDIT__SetCursorPos(pObj, pObj->CursorPos + 1);
000048 6c21 LDR r1,[r4,#0x40]
00004a 1c49 ADDS r1,r1,#1
;;;126 break;
00004c e001 B |L2.82|
|L2.78|
;;;127 case GUI_KEY_LEFT:
;;;128 EDIT__SetCursorPos(pObj, pObj->CursorPos - 1);
00004e 6c21 LDR r1,[r4,#0x40]
000050 1e49 SUBS r1,r1,#1
|L2.82|
000052 4620 MOV r0,r4 ;125
000054 f7fffffe BL EDIT__SetCursorPos
000058 e00c B |L2.116|
|L2.90|
00005a 3d30 SUBS r5,r5,#0x30 ;125
00005c 2d01 CMP r5,#1 ;125
00005e d901 BLS |L2.100|
000060 f04f35ff MOV r5,#0xffffffff ;125
|L2.100|
;;;129 break;
;;;130 default:
;;;131 {
;;;132 int Bit = _BinChar2Int(Key);
;;;133 if (Bit >= 0) {
000064 2d00 CMP r5,#0
000066 db05 BLT |L2.116|
;;;134 _EditBin(Bit, pObj, hObj);
000068 4632 MOV r2,r6
00006a 4621 MOV r1,r4
00006c b2e8 UXTB r0,r5
00006e f7fffffe BL _EditBin
;;;135 EDIT__SetCursorPos(pObj, pObj->CursorPos + 1);
000072 e7e9 B |L2.72|
|L2.116|
;;;136 }
;;;137 }
;;;138 break;
;;;139 }
;;;140 _UpdateBuffer(hObj);
000074 4630 MOV r0,r6
000076 e8bd4070 POP {r4-r6,lr}
00007a f7ffbffe B.W _UpdateBuffer
|L2.126|
;;;141 }
;;;142 }
00007e bd70 POP {r4-r6,pc}
;;;143
ENDP
AREA ||i._EditBin||, CODE, READONLY, ALIGN=1
_EditBin PROC
;;;70 */
;;;71 static void _EditBin(U8 Bit, EDIT_Obj* pObj, EDIT_Handle hObj) {
000000 b430 PUSH {r4,r5}
000002 4604 MOV r4,r0
000004 4610 MOV r0,r2
;;;72 int Pos = pObj->MaxLen - pObj->CursorPos - 1; /* Bit position */
000006 8d4a LDRH r2,[r1,#0x2a]
000008 6c0b LDR r3,[r1,#0x40]
;;;73 U32 AndMask = ~(1 << Pos);
;;;74 U32 OrMask = Bit << Pos;
;;;75 I32 Result = pObj->CurrentValue & AndMask;
00000a 6bc9 LDR r1,[r1,#0x3c]
00000c 1ad3 SUBS r3,r2,r3 ;72
00000e 1e5b SUBS r3,r3,#1 ;72
000010 2201 MOVS r2,#1 ;73
000012 409a LSLS r2,r2,r3 ;73
000014 409c LSLS r4,r4,r3 ;74
000016 4391 BICS r1,r1,r2
;;;76 Result |= OrMask;
000018 4321 ORRS r1,r1,r4
;;;77 EDIT_SetValue(hObj, Result);
00001a bc30 POP {r4,r5}
00001c f7ffbffe B.W EDIT_SetValue
;;;78 }
;;;79
ENDP
AREA ||i._GetCurrentBit||, CODE, READONLY, ALIGN=1
_GetCurrentBit PROC
;;;83 */
;;;84 static U8 _GetCurrentBit(EDIT_Obj* pObj) {
000000 8d41 LDRH r1,[r0,#0x2a]
;;;85 int Pos = pObj->MaxLen - pObj->CursorPos - 1; /* Bit position */
000002 6c02 LDR r2,[r0,#0x40]
;;;86 U32 AndMask = 1 << Pos;
;;;87 U8 Bit = (pObj->CurrentValue & AndMask) >> Pos;
000004 6bc0 LDR r0,[r0,#0x3c]
000006 1a89 SUBS r1,r1,r2 ;85
000008 1e49 SUBS r1,r1,#1 ;85
00000a 2201 MOVS r2,#1 ;86
00000c 408a LSLS r2,r2,r1 ;86
00000e 4010 ANDS r0,r0,r2
000010 40c8 LSRS r0,r0,r1
000012 b2c0 UXTB r0,r0
;;;88 return Bit;
;;;89 }
000014 4770 BX lr
;;;90
ENDP
AREA ||i._UpdateBuffer||, CODE, READONLY, ALIGN=1
_UpdateBuffer PROC
;;;58 */
;;;59 static void _UpdateBuffer(EDIT_Handle hObj) {
000000 b538 PUSH {r3-r5,lr}
;;;60 char * s;
;;;61 EDIT_Obj * pObj;
;;;62 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
;;;63 s = (char*) GUI_ALLOC_h2p(pObj->hpText);
000008 f9b00028 LDRSH r0,[r0,#0x28]
00000c f7fffffe BL GUI_ALLOC_h2p
;;;64 GUI_AddBin(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_AddBin
;;;65 }
00001e bd38 POP {r3-r5,pc}
;;;66
ENDP
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -