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 + -
显示快捷键?