guiarc.txt

来自「STM32F103ZET6+UCOSII+UCGUI源码」· 文本 代码 · 共 643 行 · 第 1/2 页

TXT
643
字号
; generated by ARM C/C++ Compiler with , RVCT4.0 [Build 524] for uVision
; commandline ArmCC [--split_sections --debug -c --asm --interleave -o.\Obj\guiarc.o --depend=.\Obj\guiarc.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\Core\GUIArc.c]
                          THUMB

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

                  GL_DrawArc PROC
;;;161    */
;;;162    void GL_DrawArc(int x0, int y0, int rx, int ry, int a0, int a1) {
000000  e92d5fff          PUSH     {r0-r12,lr}
;;;163      int aEnd;
;;;164      a0+=360;
000004  e9dd450e          LDRD     r4,r5,[sp,#0x38]
000008  4680              MOV      r8,r0                 ;162
;;;165    	a1+=360;
;;;166    	while (a0>=360) {
;;;167        a0 -= 360;
;;;168        a1 -= 360;
;;;169    	}
;;;170    /* Do first quadrant 0-90 degree */
;;;171    DoFirst:
;;;172      if (a1<=0)
;;;173    	  return;
;;;174    	if (a0<90) {
;;;175        if (a0<0)
;;;176    		  a0=0;
;;;177        aEnd = (a1<90) ? a1 : 90;
00000a  265a              MOVS     r6,#0x5a
00000c  4689              MOV      r9,r1                 ;162
00000e  4692              MOV      r10,r2                ;162
000010  469b              MOV      r11,r3                ;162
000012  f50474b4          ADD      r4,r4,#0x168          ;164
000016  f50575b4          ADD      r5,r5,#0x168          ;165
;;;178        _DrawArc(x0,y0,rx,ry,a0,aEnd, 1, -1);
00001a  f04f37ff          MOV      r7,#0xffffffff
00001e  00b0              LSLS     r0,r6,#2              ;166
000020  e004              B        |L1.44|
000022  bf00              NOP                            ;167
                  |L1.36|
000024  f5a474b4          SUB      r4,r4,#0x168          ;167
000028  f5a575b4          SUB      r5,r5,#0x168          ;168
                  |L1.44|
00002c  4284              CMP      r4,r0                 ;166
00002e  daf9              BGE      |L1.36|
                  |L1.48|
000030  2d00              CMP      r5,#0                 ;172
000032  dd62              BLE      |L1.250|
000034  2c5a              CMP      r4,#0x5a              ;174
000036  da10              BGE      |L1.90|
000038  2c00              CMP      r4,#0                 ;175
00003a  da00              BGE      |L1.62|
00003c  2400              MOVS     r4,#0                 ;176
                  |L1.62|
00003e  4631              MOV      r1,r6                 ;177
000040  2d5a              CMP      r5,#0x5a              ;177
000042  da00              BGE      |L1.70|
000044  4629              MOV      r1,r5                 ;177
                  |L1.70|
000046  2201              MOVS     r2,#1
000048  a801              ADD      r0,sp,#4
00004a  c086              STM      r0!,{r1,r2,r7}
00004c  465b              MOV      r3,r11
00004e  9400              STR      r4,[sp,#0]
000050  4652              MOV      r2,r10
000052  4649              MOV      r1,r9
000054  4640              MOV      r0,r8
000056  f7fffffe          BL       _DrawArc
                  |L1.90|
;;;179    	}
;;;180      a1-=90;
00005a  3d5a              SUBS     r5,r5,#0x5a
;;;181    	a0-=90;
00005c  3c5a              SUBS     r4,r4,#0x5a
;;;182    /* Do second quadrant 90-180 degree */
;;;183      if (a1<=0)
00005e  2d00              CMP      r5,#0
000060  dd4b              BLE      |L1.250|
;;;184    	  return;
;;;185    	if (a0<90) {
000062  2c5a              CMP      r4,#0x5a
000064  da13              BGE      |L1.142|
;;;186        if (a0<0)
000066  2c00              CMP      r4,#0
000068  da00              BGE      |L1.108|
;;;187    		  a0=0;
00006a  2400              MOVS     r4,#0
                  |L1.108|
;;;188        aEnd = (a1<90) ? a1 : 90;
00006c  4630              MOV      r0,r6
00006e  2d5a              CMP      r5,#0x5a
000070  da00              BGE      |L1.116|
000072  4628              MOV      r0,r5
                  |L1.116|
;;;189        _DrawArc(x0,y0,rx,ry,90-aEnd, 90-a0,-1,-1);
000074  f1c4015a          RSB      r1,r4,#0x5a
000078  f1c0005a          RSB      r0,r0,#0x5a
00007c  e88d0083          STM      sp,{r0,r1,r7}
000080  465b              MOV      r3,r11
000082  4652              MOV      r2,r10
000084  4649              MOV      r1,r9
000086  4640              MOV      r0,r8
000088  9703              STR      r7,[sp,#0xc]
00008a  f7fffffe          BL       _DrawArc
                  |L1.142|
;;;190    	}
;;;191      a1-=90;
00008e  3d5a              SUBS     r5,r5,#0x5a
;;;192    	a0-=90;
000090  3c5a              SUBS     r4,r4,#0x5a
;;;193    /* Do third quadrant 180-270 degree */
;;;194      if (a1<=0)
000092  2d00              CMP      r5,#0
000094  dd31              BLE      |L1.250|
;;;195    	  return;
;;;196    	if (a0<90) {
000096  2c5a              CMP      r4,#0x5a
000098  da11              BGE      |L1.190|
;;;197        if (a0<0)
00009a  2c00              CMP      r4,#0
00009c  da00              BGE      |L1.160|
;;;198    		  a0=0;
00009e  2400              MOVS     r4,#0
                  |L1.160|
;;;199        aEnd = (a1<90) ? a1 : 90;
0000a0  4631              MOV      r1,r6
0000a2  2d5a              CMP      r5,#0x5a
0000a4  da00              BGE      |L1.168|
0000a6  4629              MOV      r1,r5
                  |L1.168|
;;;200        _DrawArc(x0,y0,rx,ry,a0,aEnd, -1, 1);
0000a8  2301              MOVS     r3,#1
0000aa  e9cd7302          STRD     r7,r3,[sp,#8]
0000ae  e9cd4100          STRD     r4,r1,[sp,#0]
0000b2  465b              MOV      r3,r11
0000b4  4652              MOV      r2,r10
0000b6  4649              MOV      r1,r9
0000b8  4640              MOV      r0,r8
0000ba  f7fffffe          BL       _DrawArc
                  |L1.190|
;;;201    	}
;;;202      a1-=90;
0000be  3d5a              SUBS     r5,r5,#0x5a
;;;203    	a0-=90;
0000c0  3c5a              SUBS     r4,r4,#0x5a
;;;204    /* Do last quadrant 270-360 degree */
;;;205      if (a1<=0)
0000c2  2d00              CMP      r5,#0
0000c4  dd19              BLE      |L1.250|
;;;206    	  return;
;;;207    	if (a0<90) {
0000c6  2c5a              CMP      r4,#0x5a
0000c8  da14              BGE      |L1.244|
;;;208        if (a0<0)
0000ca  2c00              CMP      r4,#0
0000cc  da00              BGE      |L1.208|
;;;209    		  a0=0;
0000ce  2400              MOVS     r4,#0
                  |L1.208|
;;;210        aEnd = (a1<90) ? a1 : 90;
0000d0  4630              MOV      r0,r6
0000d2  2d5a              CMP      r5,#0x5a
0000d4  da00              BGE      |L1.216|
0000d6  4628              MOV      r0,r5
                  |L1.216|
;;;211        _DrawArc(x0,y0,rx,ry,90-aEnd, 90-a0,1,1);
0000d8  2301              MOVS     r3,#1
0000da  f1c4015a          RSB      r1,r4,#0x5a
0000de  f1c0005a          RSB      r0,r0,#0x5a
0000e2  e88d000b          STM      sp,{r0,r1,r3}
0000e6  9303              STR      r3,[sp,#0xc]
0000e8  465b              MOV      r3,r11
0000ea  4652              MOV      r2,r10
0000ec  4649              MOV      r1,r9
0000ee  4640              MOV      r0,r8
0000f0  f7fffffe          BL       _DrawArc
                  |L1.244|
;;;212    	}
;;;213      a1-=90;
0000f4  3d5a              SUBS     r5,r5,#0x5a
;;;214    	a0-=90;
0000f6  3c5a              SUBS     r4,r4,#0x5a
;;;215    goto DoFirst;
0000f8  e79a              B        |L1.48|
                  |L1.250|
;;;216    }
0000fa  e8bd9fff          POP      {r0-r12,pc}
;;;217    
                          ENDP


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

                  GUI_DrawArc PROC
;;;221    */
;;;222    void GUI_DrawArc(int x0, int y0, int rx, int ry, int a0, int a1) {
000000  e92d47fc          PUSH     {r2-r10,lr}
000004  4616              MOV      r6,r2
;;;223      GUI_LOCK();
;;;224      #if (GUI_WINSUPPORT)
;;;225        WM_ADDORG(x0,y0);
000006  e9dd890a          LDRD     r8,r9,[sp,#0x28]
00000a  4a0c              LDR      r2,|L2.60|
00000c  461f              MOV      r7,r3                 ;222
00000e  6c13              LDR      r3,[r2,#0x40]  ; GUI_Context
000010  181c              ADDS     r4,r3,r0
000012  6c50              LDR      r0,[r2,#0x44]  ; GUI_Context
000014  1845              ADDS     r5,r0,r1
;;;226        WM_ITERATE_START(NULL) {
000016  2000              MOVS     r0,#0
000018  f7fffffe          BL       WM__InitIVRSearch
00001c  e009              B        |L2.50|
                  |L2.30|
;;;227      #endif
;;;228      GL_DrawArc( x0, y0, rx, ry, a0, a1);
00001e  463b              MOV      r3,r7
000020  4632              MOV      r2,r6
000022  4629              MOV      r1,r5
000024  4620              MOV      r0,r4
000026  e9cd8900          STRD     r8,r9,[sp,#0]
00002a  f7fffffe          BL       GL_DrawArc
;;;229      #if (GUI_WINSUPPORT)
;;;230        } WM_ITERATE_END();
00002e  f7fffffe          BL       WM__GetNextIVR
                  |L2.50|
000032  2800              CMP      r0,#0
000034  d1f3              BNE      |L2.30|
;;;231      #endif
;;;232      GUI_UNLOCK();
;;;233    }
000036  e8bd87fc          POP      {r2-r10,pc}
;;;234    
                          ENDP

00003a  0000              DCW      0x0000
                  |L2.60|
                          DCD      GUI_Context

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

                  _CalcInterSectLin PROC
;;;66     */
;;;67     static float _CalcInterSectLin(float y, float y0, float y1, float x0, float x1) {
000000  e92d41f0          PUSH     {r4-r8,lr}
000004  4605              MOV      r5,r0
000006  460e              MOV      r6,r1
000008  4614              MOV      r4,r2
00000a  4698              MOV      r8,r3
;;;68       if (y1==y0) {
00000c  4610              MOV      r0,r2
00000e  9f06              LDR      r7,[sp,#0x18]
000010  f7fffffe          BL       __aeabi_cfcmpeq
000014  d102              BNE      |L3.28|
;;;69     	  return y0;
000016  4630              MOV      r0,r6
;;;70     	} else {
;;;71         float Slope = (x1-x0)/(y1-y0);
;;;72        return (y-y0)*Slope+x0;
;;;73     	}
;;;74     }
000018  e8bd81f0          POP      {r4-r8,pc}
                  |L3.28|
00001c  4631              MOV      r1,r6                 ;71
00001e  4620              MOV      r0,r4                 ;71
000020  f7fffffe          BL       __aeabi_fsub
000024  4604              MOV      r4,r0                 ;71
000026  4641              MOV      r1,r8                 ;71
000028  4638              MOV      r0,r7                 ;71
00002a  f7fffffe          BL       __aeabi_fsub
00002e  4621              MOV      r1,r4                 ;71
000030  f7fffffe          BL       __aeabi_fdiv
000034  4604              MOV      r4,r0                 ;71
000036  4631              MOV      r1,r6                 ;72
000038  4628              MOV      r0,r5                 ;72
00003a  f7fffffe          BL       __aeabi_fsub
00003e  4621              MOV      r1,r4                 ;72
000040  f7fffffe          BL       __aeabi_fmul
000044  4641              MOV      r1,r8                 ;72
000046  e8bd41f0          POP      {r4-r8,lr}            ;72
00004a  f7ffbffe          B.W      __aeabi_fadd
;;;75     
                          ENDP


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

                  _CalcX PROC
;;;45     */
;;;46     static void _CalcX(int*px, int y, U32 r2) {
000000  b510              PUSH     {r4,lr}
;;;47       int x =*px;
;;;48       U32 y2 = (U32)y*(U32)y;
000002  4349              MULS     r1,r1,r1
;;;49       U32 r2y2 = r2-y2;
000004  1a54              SUBS     r4,r2,r1
;;;50       U32 x2;
;;;51       if (y2>=r2) {
000006  6803              LDR      r3,[r0,#0]
000008  4291              CMP      r1,r2
00000a  d302              BCC      |L4.18|
;;;52         *px=0;
00000c  2100              MOVS     r1,#0
;;;53     		return;
00000e  6001              STR      r1,[r0,#0]
;;;54     	}
;;;55       /* x2 = r2-y2 */
;;;56       do {
;;;57         x++;
;;;58         x2 =(U32)x*(U32)x;
;;;59     	} while (x2 < r2y2);
;;;60     	*px = x-1;
;;;61     }
000010  bd10              POP      {r4,pc}
                  |L4.18|
000012  1c5b              ADDS     r3,r3,#1              ;57
000014  fb03f103          MUL      r1,r3,r3              ;58
000018  42a1              CMP      r1,r4                 ;59
00001a  d3fa              BCC      |L4.18|
00001c  1e5b              SUBS     r3,r3,#1              ;60
00001e  6003              STR      r3,[r0,#0]
000020  bd10              POP      {r4,pc}
;;;62     
                          ENDP

⌨️ 快捷键说明

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