⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 editbin.txt

📁 STM32F103ZET6+UCOSII+UCGUI源码
💻 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 + -