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

📄 guiaalib.txt

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

                  |L10.32|
                          DCD      ||.data||
                  |L10.36|
                          DCD      0xffffc001

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

                  _DrawHLine PROC
;;;114    */
;;;115    static void _DrawHLine  (int x0, int y,  int x1) {
000000  e92d41f0          PUSH     {r4-r8,lr}
000004  4604              MOV      r4,r0
000006  460f              MOV      r7,r1
000008  4615              MOV      r5,r2
;;;116      int x0Real, x1Real;
;;;117    /* Make sure there is something to do */
;;;118      if (x1<x0)
00000a  4282              CMP      r2,r0
00000c  db56              BLT      |L11.188|
;;;119        return;
;;;120    /* Flush line if we are in an other pixel (real) line */
;;;121      if (y/GUI_Context.AA_Factor != _y) {
00000e  f8df80b0          LDR      r8,|L11.192|
000012  4e2c              LDR      r6,|L11.196|
000014  f898005c          LDRB     r0,[r8,#0x5c]  ; GUI_Context
000018  68f1              LDR      r1,[r6,#0xc]  ; _y
00001a  fb97f0f0          SDIV     r0,r7,r0
00001e  4288              CMP      r0,r1
000020  d006              BEQ      |L11.48|
;;;122        _FlushLine();
000022  f7fffffe          BL       _FlushLine
;;;123        _y = y/GUI_Context.AA_Factor;
000026  f898105c          LDRB     r1,[r8,#0x5c]  ; GUI_Context
00002a  fb97f0f1          SDIV     r0,r7,r1
00002e  60f0              STR      r0,[r6,#0xc]  ; _y
                  |L11.48|
;;;124      }
;;;125      x0Real = x0/GUI_Context.AA_Factor;
000030  f898005c          LDRB     r0,[r8,#0x5c]  ; GUI_Context
;;;126      x1Real = x1/GUI_Context.AA_Factor;
;;;127    /* Handle used area (speed optimization for drawing) */
;;;128      if (x0Real < _x0_InUse)
000034  6932              LDR      r2,[r6,#0x10]  ; _x0_InUse
000036  fb94f3f0          SDIV     r3,r4,r0              ;125
00003a  fb95f1f0          SDIV     r1,r5,r0              ;126
00003e  4293              CMP      r3,r2
000040  da00              BGE      |L11.68|
;;;129        _x0_InUse = x0Real;
000042  6133              STR      r3,[r6,#0x10]  ; _x0_InUse
                  |L11.68|
;;;130      if (x1Real > _x1_InUse)
000044  6972              LDR      r2,[r6,#0x14]  ; _x1_InUse
000046  4291              CMP      r1,r2
000048  dd00              BLE      |L11.76|
;;;131        _x1_InUse = x1Real;
00004a  6171              STR      r1,[r6,#0x14]  ; _x1_InUse
                  |L11.76|
;;;132    /* Clip (should not be necessary ... Just to be on the safe side ! */
;;;133      if (x0Real < _x0) {
00004c  6872              LDR      r2,[r6,#4]  ; _x0
00004e  4293              CMP      r3,r2
000050  da01              BGE      |L11.86|
;;;134        x0 = _x0 * GUI_Context.AA_Factor;
000052  fb00f402          MUL      r4,r0,r2
                  |L11.86|
;;;135      }
;;;136      if (x1Real > _x1) {
000056  68b3              LDR      r3,[r6,#8]  ; _x1
000058  4299              CMP      r1,r3
00005a  dd03              BLE      |L11.100|
;;;137        x1 = (_x1+1)*GUI_Context.AA_Factor-1;
00005c  1c5b              ADDS     r3,r3,#1
00005e  fb00f503          MUL      r5,r0,r3
000062  1e6d              SUBS     r5,r5,#1
                  |L11.100|
;;;138      }
;;;139    /* Make sure there is still something to do (after clipping) */
;;;140      if (x1<x0)
000064  42a5              CMP      r5,r4
000066  db29              BLT      |L11.188|
;;;141        return;
;;;142    /* Inc. hit counters in buffer */
;;;143      {
;;;144        int x0_Off = x0/GUI_Context.AA_Factor-_x0;
000068  fb94f1f0          SDIV     r1,r4,r0
00006c  1a8b              SUBS     r3,r1,r2
;;;145        int x1_Off = x1/GUI_Context.AA_Factor-_x0;
00006e  fb95f1f0          SDIV     r1,r5,r0
000072  1a8f              SUBS     r7,r1,r2
;;;146        int iRem = x1_Off-x0_Off+1;
000074  1af9              SUBS     r1,r7,r3
;;;147        U8 *pDest = pabAABuffer+x0_Off;
000076  6836              LDR      r6,[r6,#0]  ; pabAABuffer
000078  1c49              ADDS     r1,r1,#1              ;146
;;;148        if (iRem ==1) {
00007a  2901              CMP      r1,#1
00007c  441e              ADD      r6,r6,r3              ;147
00007e  d104              BNE      |L11.138|
;;;149          *(pDest) += x1-x0+1;
000080  7831              LDRB     r1,[r6,#0]
000082  1b28              SUBS     r0,r5,r4
000084  1c40              ADDS     r0,r0,#1
000086  4408              ADD      r0,r0,r1
000088  e017              B        |L11.186|
                  |L11.138|
;;;150        } else {
;;;151          /* First Pixel */
;;;152          *pDest++ += ((x0_Off+_x0+1)*GUI_Context.AA_Factor-x0);
00008a  4413              ADD      r3,r3,r2
00008c  1c5b              ADDS     r3,r3,#1
00008e  4343              MULS     r3,r0,r3
000090  7830              LDRB     r0,[r6,#0]
000092  1b1b              SUBS     r3,r3,r4
000094  4418              ADD      r0,r0,r3
;;;153          /* Middle Pixels */
;;;154          for (;--iRem>1; ) {
000096  e003              B        |L11.160|
                  |L11.152|
;;;155            *pDest++ +=GUI_Context.AA_Factor;
000098  7830              LDRB     r0,[r6,#0]
00009a  f898305c          LDRB     r3,[r8,#0x5c]  ; GUI_Context
00009e  4418              ADD      r0,r0,r3
                  |L11.160|
0000a0  1e49              SUBS     r1,r1,#1              ;154
0000a2  f8060b01          STRB     r0,[r6],#1            ;152
0000a6  2901              CMP      r1,#1                 ;154
0000a8  dcf6              BGT      |L11.152|
;;;156          }
;;;157          /* Last Pixel */
;;;158          *pDest += (1+x1- (x1_Off+_x0) *GUI_Context.AA_Factor);
0000aa  18b8              ADDS     r0,r7,r2
0000ac  f898105c          LDRB     r1,[r8,#0x5c]  ; GUI_Context
0000b0  7832              LDRB     r2,[r6,#0]
0000b2  fb005011          MLS      r0,r0,r1,r5
0000b6  1c40              ADDS     r0,r0,#1
0000b8  4410              ADD      r0,r0,r2
                  |L11.186|
0000ba  7030              STRB     r0,[r6,#0]            ;149
                  |L11.188|
;;;159        }
;;;160      }
;;;161    }
0000bc  e8bd81f0          POP      {r4-r8,pc}
;;;162    
                          ENDP

                  |L11.192|
                          DCD      GUI_Context
                  |L11.196|
                          DCD      ||.data||

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

                  _FlushLine PROC
;;;74     */
;;;75     static void _FlushLine(void) {
000000  e92d47f0          PUSH     {r4-r10,lr}
;;;76       int i;
;;;77       int iEnd = _x1_InUse-_x0;
000004  f8df808c          LDR      r8,|L12.148|
;;;78       int IMax = GUI_Context.AA_Factor * GUI_Context.AA_Factor;
000008  f8df908c          LDR      r9,|L12.152|
00000c  f8d83014          LDR      r3,[r8,#0x14]         ;77  ; _x1_InUse
000010  f8d80004          LDR      r0,[r8,#4]            ;77  ; _x0
000014  f899605c          LDRB     r6,[r9,#0x5c]  ; GUI_Context
;;;79       for (i =_x0_InUse-_x0; i<=iEnd; i++) {
000018  f8d81010          LDR      r1,[r8,#0x10]  ; _x0_InUse
00001c  1a1f              SUBS     r7,r3,r0              ;77
00001e  4376              MULS     r6,r6,r6              ;78
000020  1a0c              SUBS     r4,r1,r0
000022  e030              B        |L12.134|
                  |L12.36|
;;;80         int Intens = *(pabAABuffer+i);
000024  f8d82000          LDR      r2,[r8,#0]  ; pabAABuffer
000028  4641              MOV      r1,r8
00002a  5d10              LDRB     r0,[r2,r4]
;;;81         if (Intens) {
00002c  b350              CBZ      r0,|L12.132|
;;;82           /* Check we can use line draw */
;;;83           if (Intens == IMax) {
00002e  42b0              CMP      r0,r6
000030  d11a              BNE      |L12.104|
;;;84             int j;
;;;85             for (j=i; j<iEnd; ) {
000032  4625              MOV      r5,r4
000034  e004              B        |L12.64|
                  |L12.54|
;;;86               if (*(pabAABuffer+j+1) != IMax) {
000036  1950              ADDS     r0,r2,r5
000038  7840              LDRB     r0,[r0,#1]
00003a  42b0              CMP      r0,r6
00003c  d102              BNE      |L12.68|
;;;87                 break;
;;;88               }
;;;89               j++;
00003e  1c6d              ADDS     r5,r5,#1
                  |L12.64|
000040  42bd              CMP      r5,r7                 ;85
000042  dbf8              BLT      |L12.54|
                  |L12.68|
;;;90             }
;;;91             /* Draw the full pixel(s) */
;;;92             if (j!=i) {
000044  6848              LDR      r0,[r1,#4]  ; _x0
000046  42a5              CMP      r5,r4
000048  d007              BEQ      |L12.90|
;;;93               pLCD_HLPrev->pfDrawHLine(_x0+i, _y, _x0+j);
00004a  698b              LDR      r3,[r1,#0x18]  ; pLCD_HLPrev
00004c  1942              ADDS     r2,r0,r5
00004e  681b              LDR      r3,[r3,#0]
000050  4420              ADD      r0,r0,r4
000052  68c9              LDR      r1,[r1,#0xc]  ; _y
000054  4798              BLX      r3
;;;94               i = j;  /*xxx*/
000056  462c              MOV      r4,r5
000058  e014              B        |L12.132|
                  |L12.90|
;;;95             } else {
;;;96               LCD_HL_DrawPixel (_x0+i,_y);
00005a  f8d92058          LDR      r2,[r9,#0x58]  ; GUI_Context
00005e  4420              ADD      r0,r0,r4
000060  6852              LDR      r2,[r2,#4]
000062  68c9              LDR      r1,[r1,#0xc]  ; _y
000064  4790              BLX      r2
000066  e00d              B        |L12.132|
                  |L12.104|
;;;97             }
;;;98           } else {
;;;99             LCD_SetPixelAA(_x0+i,_y, (15*Intens+IMax/2)/IMax);
000068  ebc01000          RSB      r0,r0,r0,LSL #4
00006c  eb0672d6          ADD      r2,r6,r6,LSR #31
000070  eb000062          ADD      r0,r0,r2,ASR #1
000074  fb90f0f6          SDIV     r0,r0,r6
000078  b2c2              UXTB     r2,r0
00007a  6848              LDR      r0,[r1,#4]  ; _x0
00007c  68c9              LDR      r1,[r1,#0xc]  ; _y
00007e  4420              ADD      r0,r0,r4
000080  f7fffffe          BL       LCD_SetPixelAA
                  |L12.132|
000084  1c64              ADDS     r4,r4,#1              ;79
                  |L12.134|
000086  42bc              CMP      r4,r7                 ;79
000088  ddcc              BLE      |L12.36|
;;;100          }
;;;101        }    
;;;102      }
;;;103      _CleanLine();
00008a  e8bd47f0          POP      {r4-r10,lr}
00008e  f7ffbffe          B.W      _CleanLine
;;;104    }
;;;105    
                          ENDP

000092  0000              DCW      0x0000
                  |L12.148|
                          DCD      ||.data||
                  |L12.152|
                          DCD      GUI_Context

                          AREA ||.bss||, DATA, NOINIT, ALIGN=0

                  abAABuffer
                          %        320

                          AREA ||.data||, DATA, ALIGN=2

                  pabAABuffer
                          DCD      0x00000000
                  _x0
                          DCD      0x00000000
                  _x1
                          DCD      0x00000000
                  ||_y||
                          DCD      0x00000000
                  _x0_InUse
                          DCD      0x00000000
                  _x1_InUse
                          DCD      0x00000000
                  pLCD_HLPrev
                          DCD      0x00000000
                  ClipRect_HL
                          %        8
                  DrawAPICopy
                          %        8

⌨️ 快捷键说明

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