📄 gui2dlib.txt
字号:
; generated by ARM C/C++ Compiler with , RVCT4.0 [Build 524] for uVision
; commandline ArmCC [--split_sections --debug -c --asm --interleave -o.\Obj\gui2dlib.o --depend=.\Obj\gui2dlib.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\GUI2DLib.c]
THUMB
AREA ||i.Abs||, CODE, READONLY, ALIGN=1
Abs PROC
;;;53 */
;;;54 static int Abs(int v) {
000000 2800 CMP r0,#0
;;;55 return ABS(v);
000002 dc00 BGT |L1.6|
000004 4240 RSBS r0,r0,#0
|L1.6|
;;;56 }
000006 4770 BX lr
;;;57
ENDP
AREA ||i.GL_DrawLine||, CODE, READONLY, ALIGN=2
GL_DrawLine PROC
;;;337 */
;;;338 void GL_DrawLine(int x0, int y0, int x1, int y1) {
000000 e92d47ff PUSH {r0-r10,lr}
000004 4604 MOV r4,r0
;;;339 if (GUI_Context.PenSize ==1) {
000006 4840 LDR r0,|L2.264|
000008 4616 MOV r6,r2 ;338
00000a 7d02 LDRB r2,[r0,#0x14] ; GUI_Context
00000c 460d MOV r5,r1 ;338
00000e 4698 MOV r8,r3 ;338
000010 2a01 CMP r2,#1
000012 d108 BNE |L2.38|
;;;340 GL_DrawLine1(x0,y0,x1,y1);
000014 4643 MOV r3,r8
000016 4632 MOV r2,r6
000018 4629 MOV r1,r5
00001a 4620 MOV r0,r4
00001c b004 ADD sp,sp,#0x10
00001e e8bd47f0 POP {r4-r10,lr}
000022 f7ffbffe B.W GL_DrawLine1
|L2.38|
;;;341 } else {
;;;342 int xdiff, ydiff;
;;;343 xdiff = x0-x1;
000026 1ba0 SUBS r0,r4,r6
;;;344 ydiff = y0-y1;
000028 eba50108 SUB r1,r5,r8
;;;345 if (xdiff | ydiff) {
00002c ea500301 ORRS r3,r0,r1
000030 d068 BEQ |L2.260|
;;;346 GUI_POINT Poly[4];
;;;347 int xOff, yOff;
;;;348 int xOffP, yOffP, xOffM, yOffM;
;;;349 _CalcOrto(x0-x1,y0-y1, (I32)(GUI_Context.PenSize-1), &xOff, &yOff);
000032 f1a20a01 SUB r10,r2,#1
000036 f7fffffe BL _atan2
00003a f5006980 ADD r9,r0,#0x400
00003e f5006000 ADD r0,r0,#0x800
000042 f7fffffe BL GUI_sin
000046 fb00f70a MUL r7,r0,r10
00004a 4648 MOV r0,r9
00004c f7fffffe BL GUI_sin
000050 fb00f00a MUL r0,r0,r10
000054 2f00 CMP r7,#0
000056 da04 BGE |L2.98|
000058 f5c77100 RSB r1,r7,#0x200
00005c 1289 ASRS r1,r1,#10
00005e 4249 RSBS r1,r1,#0
000060 e002 B |L2.104|
|L2.98|
000062 f5077700 ADD r7,r7,#0x200
000066 12b9 ASRS r1,r7,#10
|L2.104|
000068 2800 CMP r0,#0
00006a da04 BGE |L2.118|
00006c f5c07000 RSB r0,r0,#0x200
000070 1280 ASRS r0,r0,#10
000072 4240 RSBS r0,r0,#0
000074 e002 B |L2.124|
|L2.118|
000076 f5007000 ADD r0,r0,#0x200
00007a 1280 ASRS r0,r0,#10
|L2.124|
;;;350 /* Do rounding for offsets */
;;;351 if (xOff >0) {
00007c 2900 CMP r1,#0
00007e dd04 BLE |L2.138|
;;;352 xOffP = (xOff+1)/2;
000080 1c4a ADDS r2,r1,#1
000082 eb0272d2 ADD r2,r2,r2,LSR #31
000086 1052 ASRS r2,r2,#1
;;;353 xOffM = xOff /2;
000088 e003 B |L2.146|
|L2.138|
;;;354 } else {
;;;355 xOffP = xOff/2;
00008a eb0172d1 ADD r2,r1,r1,LSR #31
00008e 1052 ASRS r2,r2,#1
;;;356 xOffM = (xOff-1) /2;
000090 1e49 SUBS r1,r1,#1
|L2.146|
000092 eb0171d1 ADD r1,r1,r1,LSR #31
000096 104b ASRS r3,r1,#1
;;;357 }
;;;358 if (yOff >0) {
000098 2800 CMP r0,#0
00009a dd04 BLE |L2.166|
;;;359 yOffP = (yOff+1)/2;
00009c 1c41 ADDS r1,r0,#1
00009e eb0171d1 ADD r1,r1,r1,LSR #31
0000a2 1049 ASRS r1,r1,#1
;;;360 yOffM = yOff /2;
0000a4 e003 B |L2.174|
|L2.166|
;;;361 } else {
;;;362 yOffP = yOff/2;
0000a6 eb0071d0 ADD r1,r0,r0,LSR #31
0000aa 1049 ASRS r1,r1,#1
;;;363 yOffM = (yOff-1) /2;
0000ac 1e40 SUBS r0,r0,#1
|L2.174|
;;;364 }
;;;365 Poly[0].x = x0+xOffP;
0000ae 18a7 ADDS r7,r4,r2
0000b0 f8ad7000 STRH r7,[sp,#0]
;;;366 Poly[0].y = y0+yOffP;
0000b4 186f ADDS r7,r5,r1
0000b6 f8ad7002 STRH r7,[sp,#2]
;;;367 Poly[1].x = x0-xOffM;
0000ba 1ae7 SUBS r7,r4,r3
0000bc eb0070d0 ADD r0,r0,r0,LSR #31 ;363
0000c0 1040 ASRS r0,r0,#1 ;363
0000c2 f8ad7004 STRH r7,[sp,#4]
;;;368 Poly[1].y = y0-yOffM;
0000c6 1a2f SUBS r7,r5,r0
;;;369 Poly[2].x = x1-xOffM;
0000c8 1af3 SUBS r3,r6,r3
0000ca f8ad3008 STRH r3,[sp,#8]
;;;370 Poly[2].y = y1-yOffM;
0000ce eba80000 SUB r0,r8,r0
0000d2 f8ad000a STRH r0,[sp,#0xa]
;;;371 Poly[3].x = x1+xOffP;
0000d6 18b0 ADDS r0,r6,r2
0000d8 f8ad000c STRH r0,[sp,#0xc]
;;;372 Poly[3].y = y1+yOffP;
0000dc eb080001 ADD r0,r8,r1
0000e0 f8ad000e STRH r0,[sp,#0xe]
;;;373 GL_FillPolygon(&Poly[0], 4, 0,0);
0000e4 2300 MOVS r3,#0
0000e6 f8ad7006 STRH r7,[sp,#6] ;368
0000ea 461a MOV r2,r3
0000ec 2104 MOVS r1,#4
0000ee 4668 MOV r0,sp
0000f0 f7fffffe BL GL_FillPolygon
;;;374 _DrawLineEnd(x0,y0);
0000f4 4629 MOV r1,r5
0000f6 4620 MOV r0,r4
0000f8 f7fffffe BL _DrawLineEnd
;;;375 _DrawLineEnd(x1,y1);
0000fc 4641 MOV r1,r8
0000fe 4630 MOV r0,r6
000100 f7fffffe BL _DrawLineEnd
|L2.260|
;;;376 }
;;;377 }
;;;378 }
000104 e8bd87ff POP {r0-r10,pc}
;;;379
ENDP
|L2.264|
DCD GUI_Context
AREA ||i.GL_DrawLine1||, CODE, READONLY, ALIGN=2
GL_DrawLine1 PROC
;;;588 */
;;;589 void GL_DrawLine1(int x0, int y0, int x1, int y1) {
000000 e92d4ff8 PUSH {r3-r11,lr}
;;;590 int xdiff = x1-x0;
000004 1a14 SUBS r4,r2,r0
000006 4605 MOV r5,r0 ;589
;;;591 int ydiff = y1-y0;
000008 1a5f SUBS r7,r3,r1
00000a 4688 MOV r8,r1 ;589
00000c 4691 MOV r9,r2 ;589
00000e 469b MOV r11,r3 ;589
;;;592 int xdiffby2;
;;;593 int i;
;;;594 char Swapped =0;
000010 f04f0a00 MOV r10,#0
;;;595 /* check if no line */
;;;596 if (!(xdiff|ydiff)) {
000014 ea540007 ORRS r0,r4,r7
000018 d105 BNE |L3.38|
;;;597 GL_DrawPoint(x0,y0);
00001a 4641 MOV r1,r8
00001c 4628 MOV r0,r5
00001e e8bd4ff8 POP {r3-r11,lr}
000022 f7ffbffe B.W GL_DrawPoint
|L3.38|
;;;598 return;
;;;599 }
;;;600 #if 0
;;;601 /* check if horizontal line */
;;;602 if (!xdiff) {
;;;603 GL_DrawVLine(x0,y0,y1);
;;;604 return;
;;;605 }
;;;606 /* check if vertical line */
;;;607 if (!ydiff) {
;;;608 GL_DrawHLine(y0,x0,x1);
;;;609 return;
;;;610 }
;;;611 #endif
;;;612 /* check if we swap x and y for calculation */
;;;613 if (Abs(xdiff) < Abs(ydiff)) {
000026 4620 MOV r0,r4
000028 f7fffffe BL Abs
00002c 4606 MOV r6,r0
00002e 4638 MOV r0,r7
000030 f7fffffe BL Abs
000034 4286 CMP r6,r0
000036 da0a BGE |L3.78|
000038 4620 MOV r0,r4
00003a 463c MOV r4,r7
00003c 4607 MOV r7,r0
00003e 4628 MOV r0,r5
000040 4645 MOV r5,r8
000042 4680 MOV r8,r0
000044 4648 MOV r0,r9
000046 46d9 MOV r9,r11
000048 4683 MOV r11,r0
;;;614 _SwapInt(&xdiff,&ydiff);
;;;615 _SwapInt(&x0,&y0);
;;;616 _SwapInt(&x1,&y1);
;;;617 Swapped =1;
00004a f04f0a01 MOV r10,#1
|L3.78|
;;;618 }
;;;619 /* make sure line direction is positive */
;;;620 if (xdiff!=Abs(xdiff)) {
00004e 1e20 SUBS r0,r4,#0
000050 dc00 BGT |L3.84|
000052 4260 RSBS r0,r4,#0
|L3.84|
000054 42a0 CMP r0,r4
000056 d003 BEQ |L3.96|
;;;621 xdiff = -xdiff;
000058 4264 RSBS r4,r4,#0
;;;622 ydiff = -ydiff;
00005a 427f RSBS r7,r7,#0
00005c 464d MOV r5,r9
00005e 46d8 MOV r8,r11
|L3.96|
;;;623 _SwapInt(&x0,&x1);
;;;624 _SwapInt(&y0,&y1);
;;;625 }
;;;626 xdiffby2 = xdiff/2;
000060 eb0470d4 ADD r0,r4,r4,LSR #31
000064 ea4f0960 ASR r9,r0,#1
;;;627 if (ydiff<0)
000068 2f00 CMP r7,#0
00006a da01 BGE |L3.112|
;;;628 xdiffby2 = -xdiffby2;
00006c f1c90900 RSB r9,r9,#0
|L3.112|
;;;629 /* Draw pixel by pixel solid*/
;;;630 if (GUI_Context.LineStyle == GUI_LS_SOLID) {
000070 f8dfb07c LDR r11,|L3.240|
;;;631 for (i=0; i<=xdiff; i++) {
000074 2600 MOVS r6,#0
000076 f89b0016 LDRB r0,[r11,#0x16] ;630 ; GUI_Context
00007a b9d0 CBNZ r0,|L3.178|
00007c e015 B |L3.170|
;;;632 I32 l = ((I32)ydiff)*i+xdiffby2;
00007e bf00 NOP
|L3.128|
000080 fb079006 MLA r0,r7,r6,r9
;;;633 int y = (ABS(l)<32767) ? (y0 + ((int)l)/xdiff) : (y0 + l/xdiff);
000084 fb90f0f4 SDIV r0,r0,r4
000088 4440 ADD r0,r0,r8
;;;634 if (!Swapped)
00008a f1ba0f00 CMP r10,#0
00008e d106 BNE |L3.158|
;;;635 LCD_HL_DrawPixel(x0+i, y);
000090 f8db1058 LDR r1,[r11,#0x58] ; GUI_Context
000094 19ab ADDS r3,r5,r6
000096 684a LDR r2,[r1,#4]
000098 4601 MOV r1,r0
00009a 4618 MOV r0,r3
00009c e003 B |L3.166|
|L3.158|
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -