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 + -
显示快捷键?