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

📄 gui2dlib.txt

📁 STM32F103ZET6+UCOSII+UCGUI源码
💻 TXT
📖 第 1 页 / 共 3 页
字号:
; 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 + -