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

📄 guidev_writeex.txt

📁 STM32F103ZET6+UCOSII+UCGUI源码
💻 TXT
📖 第 1 页 / 共 3 页
字号:
; generated by ARM C/C++ Compiler with , RVCT4.0 [Build 524] for uVision
; commandline ArmCC [--split_sections --debug -c --asm --interleave -o.\Obj\guidev_writeex.o --depend=.\Obj\guidev_writeex.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\MemDev\GUIDEV_WriteEx.c]
                          THUMB

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

                  GUI_MEMDEV_WriteEx PROC
;;;261    */
;;;262    void GUI_MEMDEV_WriteEx(GUI_MEMDEV_Handle hMem, int xMag, int yMag, int Alpha) {
000000  b51c              PUSH     {r2-r4,lr}
;;;263      GUI_MEMDEV_WriteExAt(hMem, GUI_POS_AUTO, GUI_POS_AUTO, xMag, yMag, Alpha);
000002  e9cd2300          STRD     r2,r3,[sp,#0]
000006  460b              MOV      r3,r1
000008  4902              LDR      r1,|L1.20|
00000a  460a              MOV      r2,r1
00000c  f7fffffe          BL       GUI_MEMDEV_WriteExAt
;;;264    }
000010  bd1c              POP      {r2-r4,pc}
;;;265    
                          ENDP

000012  0000              DCW      0x0000
                  |L1.20|
                          DCD      0xfffff001

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

                  GUI_MEMDEV_WriteExAt PROC
;;;239    */
;;;240    void GUI_MEMDEV_WriteExAt(GUI_MEMDEV_Handle hMem, int x, int y, int xMag, int yMag, int Alpha) {
000000  e92d5ffc          PUSH     {r2-r12,lr}
;;;241      if (hMem) {
000004  f8ddb030          LDR      r11,[sp,#0x30]
000008  ea5f0800          MOVS     r8,r0                 ;240
00000c  460d              MOV      r5,r1                 ;240
00000e  4691              MOV      r9,r2                 ;240
000010  469a              MOV      r10,r3                ;240
000012  d01a              BEQ      |L2.74|
;;;242        GUI_MEMDEV* pDevData;
;;;243        GUI_RECT ClipRectPrev;
;;;244        GUI_LOCK();
;;;245        pDevData = (GUI_MEMDEV*) GUI_ALLOC_h2p(hMem);
000014  4640              MOV      r0,r8
000016  f7fffffe          BL       GUI_ALLOC_h2p
;;;246        if (x == GUI_POS_AUTO) {
00001a  f64071ff          MOV      r1,#0xfff
00001e  1949              ADDS     r1,r1,r5
000020  d103              BNE      |L2.42|
;;;247          x = pDevData->x0;
000022  f9b05000          LDRSH    r5,[r0,#0]
;;;248          y = pDevData->y0;
000026  f9b09002          LDRSH    r9,[r0,#2]
                  |L2.42|
;;;249        }
;;;250        ClipRectPrev = GUI_Context.ClipRect;
00002a  4c09              LDR      r4,|L2.80|
;;;251        LCD_SetClipRectMax();
00002c  e9d46701          LDRD     r6,r7,[r4,#4]
000030  f7fffffe          BL       LCD_SetClipRectMax
;;;252        _WriteExToActiveAt(hMem, x, y, xMag, yMag, Alpha);
000034  9b0d              LDR      r3,[sp,#0x34]
000036  464a              MOV      r2,r9
000038  e9cdb300          STRD     r11,r3,[sp,#0]
00003c  4653              MOV      r3,r10
00003e  4629              MOV      r1,r5
000040  4640              MOV      r0,r8
000042  f7fffffe          BL       _WriteExToActiveAt
;;;253        GUI_Context.ClipRect = ClipRectPrev;
;;;254        GUI_UNLOCK();
;;;255      }
000046  e9c46701          STRD     r6,r7,[r4,#4]
                  |L2.74|
;;;256    }
00004a  e8bd9ffc          POP      {r2-r12,pc}
;;;257    
                          ENDP

00004e  0000              DCW      0x0000
                  |L2.80|
                          DCD      GUI_Context

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

                  _DrawBitmapEx PROC
;;;149    */
;;;150    static void _DrawBitmapEx(int x0, int y0, int xOff, int yOff, int xSize, int ySize, int xMag, int yMag,
000000  e92d4fff          PUSH     {r0-r11,lr}
;;;151                              int Alpha, int BmpSizeX, int BmpSizeY, int bpp, int BytesPerLine, const U8* pData) {
000004  b087              SUB      sp,sp,#0x1c
000006  4689              MOV      r9,r1
000008  461e              MOV      r6,r3
;;;152      int y, yi, yMin, yMax, yEnd, yPrev;
;;;153      yMin = GUI_Context.ClipRect.y0;
00000a  4930              LDR      r1,|L3.204|
;;;154      yMax = GUI_Context.ClipRect.y1;
;;;155      if (xMag < 0) {
00000c  e9dd3716          LDRD     r3,r7,[sp,#0x58]
000010  e9dd2019          LDRD     r2,r0,[sp,#0x64]
000014  f9b1b006          LDRSH    r11,[r1,#6]           ;153  ; GUI_Context
000018  f9b1a00a          LDRSH    r10,[r1,#0xa]         ;154  ; GUI_Context
;;;156        x0 -= (BmpSizeX - (xOff << 1) - xSize) * xMag / 1000;
00001c  f44f717a          MOV      r1,#0x3e8
000020  2b00              CMP      r3,#0                 ;155
000022  da0b              BGE      |L3.60|
000024  9b09              LDR      r3,[sp,#0x24]
000026  eba20243          SUB      r2,r2,r3,LSL #1
00002a  9b14              LDR      r3,[sp,#0x50]
00002c  1ad2              SUBS     r2,r2,r3
00002e  9b16              LDR      r3,[sp,#0x58]
000030  435a              MULS     r2,r3,r2
000032  fb92f2f1          SDIV     r2,r2,r1
000036  9b07              LDR      r3,[sp,#0x1c]
000038  1a9a              SUBS     r2,r3,r2
00003a  9207              STR      r2,[sp,#0x1c]
                  |L3.60|
;;;157      }
;;;158      if (yMag < 0) {
00003c  2f00              CMP      r7,#0
00003e  da05              BGE      |L3.76|
;;;159        y0 -= (BmpSizeY - 1) * yMag / 1000;
000040  1e40              SUBS     r0,r0,#1
000042  4378              MULS     r0,r7,r0
000044  fb90f2f1          SDIV     r2,r0,r1
000048  eba90902          SUB      r9,r9,r2
                  |L3.76|
;;;160      }
;;;161      yEnd  = y0 + GUI__DivideRound32(((I32)(yOff) * yMag), 1000);
00004c  fb06f007          MUL      r0,r6,r7
000050  f44f717a          MOV      r1,#0x3e8
000054  f7fffffe          BL       GUI__DivideRound32
000058  eb000509          ADD      r5,r0,r9
;;;162      yPrev = yEnd + 1;
;;;163      for (yi = yOff; yi < (yOff + ySize); yi++) {
00005c  9915              LDR      r1,[sp,#0x54]
00005e  f1050801          ADD      r8,r5,#1              ;162
000062  1870              ADDS     r0,r6,r1
000064  9006              STR      r0,[sp,#0x18]
000066  e02b              B        |L3.192|
                  |L3.104|
;;;164        y = yEnd;
;;;165        yEnd = y0 + GUI__DivideRound32(((I32)(yi + 1) * yMag), 1000);
000068  1c70              ADDS     r0,r6,#1
00006a  462c              MOV      r4,r5                 ;164
00006c  4378              MULS     r0,r7,r0
00006e  f44f717a          MOV      r1,#0x3e8
000072  f7fffffe          BL       GUI__DivideRound32
000076  eb000509          ADD      r5,r0,r9
;;;166        if (y != yPrev) {
00007a  4544              CMP      r4,r8
00007c  d01e              BEQ      |L3.188|
;;;167          yPrev = y;
00007e  46a0              MOV      r8,r4
                  |L3.128|
;;;168          do {
;;;169            if ((y >= yMin) && (y <= yMax)) {
000080  455c              CMP      r4,r11
000082  db12              BLT      |L3.170|
000084  4554              CMP      r4,r10
000086  dc10              BGT      |L3.170|
;;;170              _DrawBitmapLineEx(x0, y, xOff, yi, xSize, xMag, Alpha, bpp, BytesPerLine, pData);
000088  a91b              ADD      r1,sp,#0x6c
00008a  c90e              LDM      r1,{r1-r3}
00008c  9818              LDR      r0,[sp,#0x60]
00008e  e9cd0102          STRD     r0,r1,[sp,#8]
000092  e9cd2304          STRD     r2,r3,[sp,#0x10]
000096  9b16              LDR      r3,[sp,#0x58]
000098  9a14              LDR      r2,[sp,#0x50]
00009a  e9cd2300          STRD     r2,r3,[sp,#0]
00009e  4633              MOV      r3,r6
0000a0  4621              MOV      r1,r4
0000a2  9a09              LDR      r2,[sp,#0x24]
0000a4  9807              LDR      r0,[sp,#0x1c]
0000a6  f7fffffe          BL       _DrawBitmapLineEx
                  |L3.170|
;;;171            }
;;;172          } while ((yMag < 0) ? (--y > yEnd) : (++y < yEnd));
0000aa  2f00              CMP      r7,#0
0000ac  da03              BGE      |L3.182|
0000ae  1e64              SUBS     r4,r4,#1
0000b0  42ac              CMP      r4,r5
0000b2  dce5              BGT      |L3.128|
0000b4  e002              B        |L3.188|
                  |L3.182|
0000b6  1c64              ADDS     r4,r4,#1
0000b8  42ac              CMP      r4,r5
0000ba  dbe1              BLT      |L3.128|
                  |L3.188|
0000bc  9806              LDR      r0,[sp,#0x18]         ;163
0000be  1c76              ADDS     r6,r6,#1              ;163
                  |L3.192|
0000c0  42b0              CMP      r0,r6                 ;163
0000c2  dcd1              BGT      |L3.104|
;;;173        }
;;;174      }
;;;175    }
0000c4  b00b              ADD      sp,sp,#0x2c
0000c6  e8bd8ff0          POP      {r4-r11,pc}
;;;176    
                          ENDP

0000ca  0000              DCW      0x0000
                  |L3.204|
                          DCD      GUI_Context

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

                  _DrawBitmapLineEx PROC
;;;85     */
;;;86     static void _DrawBitmapLineEx(int x0, int y0, int xOff, int yOff, int xSize, int xMag, int Alpha,
000000  e92d4fff          PUSH     {r0-r11,lr}
;;;87                                   int bpp, int BytesPerLine, const U8* pData) {
;;;88       int x, xi, xAct, xStart, xMagAbs, xiMag, xMin, xMax, Cached;
;;;89       LCD_PIXELINDEX Index = 0, IndexPrev = 0;
;;;90       /* Use clipping rect */
;;;91       xMin = GUI_Context.ClipRect.x0 - x0;
000004  4953              LDR      r1,|L4.340|
000006  4607              MOV      r7,r0                 ;87
000008  f9b14004          LDRSH    r4,[r1,#4]  ; GUI_Context
00000c  b083              SUB      sp,sp,#0xc            ;87
;;;92       xMax = GUI_Context.ClipRect.x1 - x0;
00000e  f9b11008          LDRSH    r1,[r1,#8]  ; GUI_Context
000012  eba40907          SUB      r9,r4,r7              ;91
;;;93       /* Init some values */
;;;94       xMagAbs =  (xMag > 0) ? xMag : -xMag;
000016  9c11              LDR      r4,[sp,#0x44]
000018  f04f0a00          MOV      r10,#0                ;89
00001c  9a14              LDR      r2,[sp,#0x50]
00001e  eba10107          SUB      r1,r1,r7              ;92
000022  4650              MOV      r0,r10                ;89
000024  2c00              CMP      r4,#0
000026  9101              STR      r1,[sp,#4]
000028  dc00              BGT      |L4.44|
00002a  4264              RSBS     r4,r4,#0
                  |L4.44|
;;;95       x       =  (xOff * xMagAbs) / 1000;
00002c  9905              LDR      r1,[sp,#0x14]
00002e  9402              STR      r4,[sp,#8]
000030  4361              MULS     r1,r4,r1
000032  f44f757a          MOV      r5,#0x3e8
000036  fb91f4f5          SDIV     r4,r1,r5
;;;96       xiMag   =  (xOff * xMagAbs) % 1000;
00003a  fb051614          MLS      r6,r5,r4,r1
;;;97       xStart  = -1;
;;;98       Cached  =  0;

⌨️ 快捷键说明

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