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

📄 guidev.txt

📁 STM32F103ZET6+UCOSII+UCGUI源码
💻 TXT
📖 第 1 页 / 共 3 页
字号:
                          ENDP

                  |L5.48|
                          DCD      GUI_Context

                          AREA ||i.GUI_MEMDEV_Select||, CODE, READONLY, ALIGN=2

                  GUI_MEMDEV_Select PROC
;;;226    */
;;;227    GUI_MEMDEV_Handle GUI_MEMDEV_Select(GUI_MEMDEV_Handle hMem) {
000000  e92d41f0          PUSH     {r4-r8,lr}
;;;228      GUI_MEMDEV_Handle r;
;;;229      GUI_LOCK();
;;;230      r = GUI_Context.hDevData;
000004  4c0f              LDR      r4,|L6.68|
000006  0005              MOVS     r5,r0                 ;227
000008  f9b4704c          LDRSH    r7,[r4,#0x4c]  ; GUI_Context
;;;231      if (hMem == 0) {
00000c  d102              BNE      |L6.20|
;;;232        GUI_SelectLCD();
00000e  f7fffffe          BL       GUI_SelectLCD
000012  e014              B        |L6.62|
                  |L6.20|
;;;233      } else {
;;;234        GUI_MEMDEV* pDev = GUI_MEMDEV_H2P(hMem);
000014  4628              MOV      r0,r5
000016  f7fffffe          BL       GUI_ALLOC_h2p
00001a  4606              MOV      r6,r0
;;;235        #if GUI_WINSUPPORT
;;;236          WM_Deactivate();
00001c  f7fffffe          BL       WM_Deactivate
;;;237        #endif
;;;238        /* If LCD was selected Save cliprect */
;;;239        if (GUI_Context.hDevData == 0) {
000020  f8b4004c          LDRH     r0,[r4,#0x4c]  ; GUI_Context
000024  b928              CBNZ     r0,|L6.50|
;;;240          GUI_Context.ClipRectPrev = GUI_Context.ClipRect;
000026  4807              LDR      r0,|L6.68|
000028  2208              MOVS     r2,#8
00002a  1d21              ADDS     r1,r4,#4
00002c  304e              ADDS     r0,r0,#0x4e
00002e  f7fffffe          BL       __aeabi_memcpy
                  |L6.50|
;;;241        }
;;;242        GUI_Context.hDevData = hMem;
000032  f8a4504c          STRH     r5,[r4,#0x4c]
;;;243        GUI_Context.pDeviceAPI = pDev->pAPIList;
000036  6ab0              LDR      r0,[r6,#0x28]
;;;244        LCD_SetClipRectMax();
000038  64a0              STR      r0,[r4,#0x48]  ; GUI_Context
00003a  f7fffffe          BL       LCD_SetClipRectMax
                  |L6.62|
;;;245      }
;;;246      GUI_UNLOCK();
;;;247      return r;
00003e  4638              MOV      r0,r7
;;;248    }
000040  e8bd81f0          POP      {r4-r8,pc}
;;;249    
                          ENDP

                  |L6.68|
                          DCD      GUI_Context

                          AREA ||i.GUI_MEMDEV__Color2Index||, CODE, READONLY, ALIGN=2

                  GUI_MEMDEV__Color2Index PROC
;;;55     */
;;;56     unsigned int GUI_MEMDEV__Color2Index(LCD_COLOR Color) {
000000  b510              PUSH     {r4,lr}
000002  4604              MOV      r4,r0
;;;57       GUI_MEMDEV* pDev = GUI_MEMDEV_H2P(GUI_Context.hDevData);
000004  4804              LDR      r0,|L7.24|
000006  f9b0004c          LDRSH    r0,[r0,#0x4c]  ; GUI_Context
00000a  f7fffffe          BL       GUI_ALLOC_h2p
;;;58       return pDev->pfColor2Index(Color);
00000e  69c1              LDR      r1,[r0,#0x1c]
000010  4620              MOV      r0,r4
000012  e8bd4010          POP      {r4,lr}
000016  4708              BX       r1
;;;59     }
;;;60     
                          ENDP

                  |L7.24|
                          DCD      GUI_Context

                          AREA ||i.GUI_MEMDEV__CreateFixed||, CODE, READONLY, ALIGN=1

                  GUI_MEMDEV__CreateFixed PROC
;;;109    */
;;;110    GUI_MEMDEV_Handle GUI_MEMDEV__CreateFixed(int x0, int y0, int xsize, int ysize, int Flags
000000  e92d4fff          PUSH     {r0-r11,lr}
;;;111                                            ,const tLCDDEV_APIList * pMemDevAPI
;;;112                                            ,tLCDDEV_Color2Index*        pfColor2Index
;;;113                                            ,tLCDDEV_Index2Color*        pfIndex2Color
;;;114                                            ,tLCDDEV_GetIndexMask*       pfGetIndexMask) {
000004  b081              SUB      sp,sp,#4
;;;115      I32 MemSize;
;;;116      GUI_USAGE_Handle hUsage = 0;
;;;117      unsigned int BitsPerPixel, BytesPerLine;
;;;118      GUI_MEMDEV_Handle hMemDev;
;;;119      BitsPerPixel = pMemDevAPI->BitsPerPixel;
000006  e9dd4b0e          LDRD     r4,r11,[sp,#0x38]
;;;120      BytesPerLine = (xsize * BitsPerPixel + 7) >> 3;     /* Note: This code works with 8 and 16 bit memory devices. If other BPPs are introduced for MemDevs, it needs to be changed */
00000a  f8db903c          LDR      r9,[r11,#0x3c]
00000e  4692              MOV      r10,r2                ;114
000010  fb02f009          MUL      r0,r2,r9
000014  1dc0              ADDS     r0,r0,#7
000016  461d              MOV      r5,r3                 ;114
000018  2600              MOVS     r6,#0                 ;116
00001a  08c7              LSRS     r7,r0,#3
;;;121      /* Calc available MemSize */
;;;122      MemSize = GUI_ALLOC_GetMaxSize();
00001c  f7fffffe          BL       GUI_ALLOC_GetMaxSize
;;;123      if (!(Flags & GUI_MEMDEV_NOTRANS)) {
000020  07e1              LSLS     r1,r4,#31
000022  d105              BNE      |L8.48|
;;;124        MemSize = (MemSize / 4) * 3;   /* We need to reserve some memory for usage object ... TBD: This can be optimized as we do not use memory perfectly. */
000024  17c1              ASRS     r1,r0,#31
000026  eb007091          ADD      r0,r0,r1,LSR #30
00002a  1080              ASRS     r0,r0,#2
00002c  eb000040          ADD      r0,r0,r0,LSL #1
                  |L8.48|
;;;125      }
;;;126      if (ysize<=0) {
000030  2d00              CMP      r5,#0
000032  dc06              BGT      |L8.66|
;;;127        int MaxLines = (MemSize - sizeof(GUI_MEMDEV)) / BytesPerLine;
000034  382c              SUBS     r0,r0,#0x2c
000036  fbb0f0f7          UDIV     r0,r0,r7
;;;128        ysize = (MaxLines > -ysize) ? -ysize : MaxLines;
00003a  426d              RSBS     r5,r5,#0
00003c  42a8              CMP      r0,r5
00003e  dc00              BGT      |L8.66|
000040  4605              MOV      r5,r0
                  |L8.66|
;;;129      }
;;;130      if (!(Flags & GUI_MEMDEV_NOTRANS)) {
000042  07e0              LSLS     r0,r4,#31
000044  d108              BNE      |L8.88|
;;;131        /* Create the usage map */
;;;132        hUsage = GUI_USAGE_BM_Create(x0, y0, xsize, ysize, 0);
000046  2300              MOVS     r3,#0
000048  9300              STR      r3,[sp,#0]
00004a  e9dd0101          LDRD     r0,r1,[sp,#4]
00004e  462b              MOV      r3,r5
000050  4652              MOV      r2,r10
000052  f7fffffe          BL       GUI_USAGE_BM_Create
000056  4606              MOV      r6,r0
                  |L8.88|
;;;133      }
;;;134      /* Check if we can alloc sufficient memory */
;;;135      if (ysize <= 0) {
000058  2d00              CMP      r5,#0
00005a  dc03              BGT      |L8.100|
;;;136        GUI_DEBUG_WARN("GUI_MEMDEV_Create: Too little memory");
;;;137        GUI_UNLOCK();
;;;138        return 0;    
00005c  2000              MOVS     r0,#0
                  |L8.94|
;;;139      }
;;;140      MemSize = ysize * BytesPerLine + sizeof(GUI_MEMDEV);
;;;141      if (Flags & GUI_MEMDEV_NOTRANS) {
;;;142        hMemDev = GUI_ALLOC_AllocNoInit(MemSize);
;;;143      } else {
;;;144        hMemDev = GUI_ALLOC_AllocZero(MemSize);
;;;145      }
;;;146      if (hMemDev) {
;;;147        GUI_MEMDEV* pDevData;
;;;148        pDevData = GUI_MEMDEV_H2P(hMemDev);
;;;149        pDevData->x0            = x0;
;;;150        pDevData->y0            = y0;
;;;151        pDevData->XSize         = xsize;
;;;152        pDevData->YSize         = ysize;
;;;153        pDevData->NumColors     = 
;;;154        #if GUI_NUM_LAYERS == 1
;;;155          LCD_GET_NUMCOLORS();
;;;156        #else
;;;157          LCD_GetNumColorsEx(GUI_Context.SelLayer);
;;;158        #endif
;;;159        pDevData->BytesPerLine  = BytesPerLine;
;;;160        pDevData->hUsage        = hUsage;
;;;161        /* Set color conversion routine pointers */
;;;162        pDevData->pfColor2Index = pfColor2Index;    /* LCD_L0_Color2Index; */
;;;163        pDevData->pfIndex2Color = pfIndex2Color;    /* LCD_L0_Index2Color; */
;;;164        pDevData->pfGetIndexMask= pfGetIndexMask;   /* LCD_L0_GetIndexMask */
;;;165    
;;;166        pDevData->pAPIList      = pMemDevAPI;
;;;167        pDevData->BitsPerPixel  = BitsPerPixel;
;;;168        #if (GUI_NUM_LAYERS > 1)   /* Size opt., preprocessor not required */
;;;169          pDevData->LayerIndex  = GUI_Context.SelLayer;
;;;170        #else
;;;171          pDevData->LayerIndex  = 0;
;;;172        #endif
;;;173      } else {
;;;174        if (hUsage) {
;;;175          GUI_ALLOC_Free(hUsage);
;;;176        }
;;;177        GUI_DEBUG_WARN("GUI_MEMDEV_Create: Alloc failed");
;;;178      }
;;;179      return hMemDev;
;;;180    }
00005e  b005              ADD      sp,sp,#0x14
000060  e8bd8ff0          POP      {r4-r11,pc}
                  |L8.100|
000064  fb05f007          MUL      r0,r5,r7              ;140
000068  f100002c          ADD      r0,r0,#0x2c           ;140
00006c  07e1              LSLS     r1,r4,#31             ;141
00006e  b200              SXTH     r0,r0                 ;142
000070  d002              BEQ      |L8.120|
000072  f7fffffe          BL       GUI_ALLOC_AllocNoInit
000076  e001              B        |L8.124|
                  |L8.120|
000078  f7fffffe          BL       GUI_ALLOC_AllocZero
                  |L8.124|
00007c  ea5f0800          MOVS     r8,r0                 ;144
000080  d01b              BEQ      |L8.186|
000082  4640              MOV      r0,r8                 ;148
000084  f7fffffe          BL       GUI_ALLOC_h2p
000088  9901              LDR      r1,[sp,#4]            ;149
00008a  8001              STRH     r1,[r0,#0]            ;149
00008c  9902              LDR      r1,[sp,#8]            ;150
00008e  8041              STRH     r1,[r0,#2]            ;150
000090  f8a0a004          STRH     r10,[r0,#4]           ;151
000094  4604              MOV      r4,r0                 ;148
000096  80c5              STRH     r5,[r0,#6]            ;152
000098  f7fffffe          BL       LCD_GetNumColors
00009c  e9c40702          STRD     r0,r7,[r4,#8]         ;160
0000a0  8326              STRH     r6,[r4,#0x18]         ;160
0000a2  9910              LDR      r1,[sp,#0x40]         ;162
0000a4  61e1              STR      r1,[r4,#0x1c]         ;163
0000a6  9911              LDR      r1,[sp,#0x44]         ;163
0000a8  6221              STR      r1,[r4,#0x20]         ;164
0000aa  9912              LDR      r1,[sp,#0x48]         ;164
0000ac  e9c41b09          STRD     r1,r11,[r4,#0x24]     ;171
0000b0  f8c49010          STR      r9,[r4,#0x10]         ;171
0000b4  2100              MOVS     r1,#0                 ;171
0000b6  6161              STR      r1,[r4,#0x14]         ;173
0000b8  e003              B        |L8.194|
                  |L8.186|
0000ba  b116              CBZ      r6,|L8.194|
0000bc  4630              MOV      r0,r6                 ;175
0000be  f7fffffe          BL       GUI_ALLOC_Free
                  |L8.194|
0000c2  4640              MOV      r0,r8                 ;179
0000c4  e7cb              B        |L8.94|
;;;181    

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -