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

📄 guiaacircle.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\guiaacircle.o --depend=.\Obj\guiaacircle.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\AntiAlias\GUIAACircle.c]
                          THUMB

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

                  FillCircle PROC
;;;41     */
;;;42     static void FillCircle(int x0, int y0, int r) {
000000  e92d5ff0          PUSH     {r4-r12,lr}
000004  4607              MOV      r7,r0
000006  468b              MOV      r11,r1
;;;43       int i, x;
;;;44       int sqmax = r*r+r/2;
000008  fb02f002          MUL      r0,r2,r2
00000c  eb0271d2          ADD      r1,r2,r2,LSR #31
000010  eb000861          ADD      r8,r0,r1,ASR #1
;;;45       int yMin, yMax;
;;;46       /* First step : find uppermost and lowermost coordinates */
;;;47       yMin = y0 - r;
;;;48       yMax = y0 + r;
;;;49       /* Use Clipping rect to reduce calculation (if possible) */
;;;50       if (GUI_Context.pClipRect_HL) {
000014  4824              LDR      r0,|L1.168|
000016  4616              MOV      r6,r2                 ;42
000018  6900              LDR      r0,[r0,#0x10]  ; GUI_Context
00001a  ebab0902          SUB      r9,r11,r2             ;47
00001e  eb0b0a02          ADD      r10,r11,r2            ;48
000022  b148              CBZ      r0,|L1.56|
;;;51         if (yMax > GUI_Context.pClipRect_HL->y1)
000024  f9b01006          LDRSH    r1,[r0,#6]
000028  4551              CMP      r1,r10
00002a  da00              BGE      |L1.46|
;;;52           yMax = GUI_Context.pClipRect_HL->y1;
00002c  468a              MOV      r10,r1
                  |L1.46|
;;;53         if (yMin < GUI_Context.pClipRect_HL->y0)
00002e  f9b00002          LDRSH    r0,[r0,#2]
000032  4548              CMP      r0,r9
000034  dd00              BLE      |L1.56|
;;;54           yMin = GUI_Context.pClipRect_HL->y0;
000036  4681              MOV      r9,r0
                  |L1.56|
;;;55       }
;;;56       /* Draw top half */
;;;57       for (i=0, x=r; i<r; i++) {
000038  2500              MOVS     r5,#0
00003a  4634              MOV      r4,r6
00003c  e015              B        |L1.106|
;;;58         int y = y0-i;
00003e  bf00              NOP      
                  |L1.64|
000040  ebab0105          SUB      r1,r11,r5
;;;59         if ((y >= yMin) && (y <= yMax)) {
000044  4549              CMP      r1,r9
000046  db0f              BLT      |L1.104|
000048  4551              CMP      r1,r10
00004a  dc0d              BGT      |L1.104|
;;;60           /* calc proper x-value */
;;;61           while ((i*i+x*x) >sqmax)
00004c  fb05f005          MUL      r0,r5,r5
;;;62             --x;
000050  e000              B        |L1.84|
                  |L1.82|
000052  1e64              SUBS     r4,r4,#1
                  |L1.84|
000054  fb040204          MLA      r2,r4,r4,r0           ;61
000058  4542              CMP      r2,r8                 ;61
00005a  dcfa              BGT      |L1.82|
;;;63           LCD_HL_DrawHLine (x0-x, y, x0+x);
00005c  4b12              LDR      r3,|L1.168|
00005e  193a              ADDS     r2,r7,r4
000060  6d9b              LDR      r3,[r3,#0x58]  ; GUI_Context
000062  1b38              SUBS     r0,r7,r4
000064  681b              LDR      r3,[r3,#0]
000066  4798              BLX      r3
                  |L1.104|
000068  1c6d              ADDS     r5,r5,#1              ;57
                  |L1.106|
00006a  42b5              CMP      r5,r6                 ;57
00006c  dbe8              BLT      |L1.64|
;;;64         }
;;;65       }
;;;66       /* Draw bottom half */
;;;67       for (i=0, x=r; i<r; i++) {
00006e  2500              MOVS     r5,#0
000070  4634              MOV      r4,r6
000072  e014              B        |L1.158|
                  |L1.116|
;;;68         int y = y0 + i;
000074  eb0b0105          ADD      r1,r11,r5
;;;69         if ((y >= yMin) && (y <= yMax)) {
000078  4549              CMP      r1,r9
00007a  db0f              BLT      |L1.156|
00007c  4551              CMP      r1,r10
00007e  dc0d              BGT      |L1.156|
000080  fb05f005          MUL      r0,r5,r5              ;61
;;;70           /* calc proper x-value */
;;;71           while ((i*i+x*x) >sqmax)
;;;72             --x;
000084  e000              B        |L1.136|
                  |L1.134|
000086  1e64              SUBS     r4,r4,#1
                  |L1.136|
000088  fb040204          MLA      r2,r4,r4,r0           ;71
00008c  4542              CMP      r2,r8                 ;71
00008e  dcfa              BGT      |L1.134|
;;;73           LCD_HL_DrawHLine (x0-x, y, x0+x);
000090  4b05              LDR      r3,|L1.168|
000092  193a              ADDS     r2,r7,r4
000094  6d9b              LDR      r3,[r3,#0x58]  ; GUI_Context
000096  1b38              SUBS     r0,r7,r4
000098  681b              LDR      r3,[r3,#0]
00009a  4798              BLX      r3
                  |L1.156|
00009c  1c6d              ADDS     r5,r5,#1              ;67
                  |L1.158|
00009e  42b5              CMP      r5,r6                 ;67
0000a0  dbe8              BLT      |L1.116|
;;;74         }
;;;75       }
;;;76     }
0000a2  e8bd9ff0          POP      {r4-r12,pc}
;;;77     
                          ENDP

0000a6  0000              DCW      0x0000
                  |L1.168|
                          DCD      GUI_Context

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

                  GL_FillCircleAA_HiRes PROC
;;;87     */
;;;88     void GL_FillCircleAA_HiRes(int x0, int y0, int r) {
000000  b570              PUSH     {r4-r6,lr}
000002  460e              MOV      r6,r1
000004  4604              MOV      r4,r0
;;;89     /* Init AA Subsystem, pass horizontal limits */
;;;90       GUI_AA_Init_HiRes(x0-r, x0+r);
000006  1881              ADDS     r1,r0,r2
000008  4615              MOV      r5,r2                 ;88
00000a  1a80              SUBS     r0,r0,r2
00000c  f7fffffe          BL       GUI_AA_Init_HiRes
;;;91     /* Do the actual drawing */
;;;92       FillCircle(x0, y0, r);
000010  462a              MOV      r2,r5
000012  4631              MOV      r1,r6
000014  4620              MOV      r0,r4
000016  f7fffffe          BL       FillCircle
;;;93     /* Cleanup */
;;;94       GUI_AA_Exit();
00001a  e8bd4070          POP      {r4-r6,lr}
00001e  f7ffbffe          B.W      GUI_AA_Exit
;;;95     }
;;;96     
                          ENDP


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

                  GUI_AA_FillCircle PROC
;;;100    */
;;;101    void GUI_AA_FillCircle(int x0, int y0, int r) {
000000  b57c              PUSH     {r2-r6,lr}
000002  4605              MOV      r5,r0
000004  460e              MOV      r6,r1
000006  4614              MOV      r4,r2
;;;102      #if (GUI_WINSUPPORT)
;;;103        GUI_RECT Rect;
;;;104      #endif
;;;105      GUI_LOCK();
;;;106      #if (GUI_WINSUPPORT)
;;;107        WM_ADDORG_AA(x0,y0);
000008  f7fffffe          BL       WM__GetOrgX_AA
00000c  4405              ADD      r5,r5,r0
00000e  f7fffffe          BL       WM__GetOrgY_AA
000012  4406              ADD      r6,r6,r0
;;;108      #endif
;;;109      if (!GUI_Context.AA_HiResEnable) {
000014  4815              LDR      r0,|L3.108|
000016  f890105d          LDRB     r1,[r0,#0x5d]  ; GUI_Context
00001a  b921              CBNZ     r1,|L3.38|
;;;110        x0 *= GUI_Context.AA_Factor;
00001c  f890005c          LDRB     r0,[r0,#0x5c]  ; GUI_Context
;;;111        y0 *= GUI_Context.AA_Factor;
000020  4346              MULS     r6,r0,r6
;;;112        r  *= GUI_Context.AA_Factor;
000022  4344              MULS     r4,r0,r4
000024  4345              MULS     r5,r0,r5              ;110
                  |L3.38|
;;;113      }
;;;114      #if (GUI_WINSUPPORT)
;;;115        Rect.x0 = GUI_AA_HiRes2Pixel(x0 - r);
000026  1b28              SUBS     r0,r5,r4
000028  f7fffffe          BL       GUI_AA_HiRes2Pixel
00002c  f8ad0000          STRH     r0,[sp,#0]
;;;116        Rect.x1 = GUI_AA_HiRes2Pixel(x0 + r);
000030  1928              ADDS     r0,r5,r4
000032  f7fffffe          BL       GUI_AA_HiRes2Pixel
000036  f8ad0004          STRH     r0,[sp,#4]
;;;117        Rect.y0 = GUI_AA_HiRes2Pixel(y0 - r);
00003a  1b30              SUBS     r0,r6,r4
00003c  f7fffffe          BL       GUI_AA_HiRes2Pixel
000040  f8ad0002          STRH     r0,[sp,#2]
;;;118        Rect.y1 = GUI_AA_HiRes2Pixel(y0 + r);
000044  1930              ADDS     r0,r6,r4
000046  f7fffffe          BL       GUI_AA_HiRes2Pixel
00004a  f8ad0006          STRH     r0,[sp,#6]
;;;119        WM_ITERATE_START(&Rect); {
00004e  4668              MOV      r0,sp
000050  f7fffffe          BL       WM__InitIVRSearch
000054  e006              B        |L3.100|
                  |L3.86|
;;;120      #endif
;;;121      GL_FillCircleAA_HiRes(x0, y0, r);
000056  4622              MOV      r2,r4
000058  4631              MOV      r1,r6
00005a  4628              MOV      r0,r5
00005c  f7fffffe          BL       GL_FillCircleAA_HiRes
;;;122      #if (GUI_WINSUPPORT)
;;;123        } WM_ITERATE_END();
000060  f7fffffe          BL       WM__GetNextIVR
                  |L3.100|
000064  2800              CMP      r0,#0
000066  d1f6              BNE      |L3.86|
;;;124      #endif
;;;125      GUI_UNLOCK();
;;;126    }
000068  bd7c              POP      {r2-r6,pc}
;;;127    
                          ENDP

00006a  0000              DCW      0x0000
                  |L3.108|
                          DCD      GUI_Context

⌨️ 快捷键说明

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