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

📄 gui_dispstringinrect.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\gui_dispstringinrect.o --depend=.\Obj\gui_dispstringinrect.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\GUI_DispStringInRect.c]
                          THUMB

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

                  GUI_DispStringInRect PROC
;;;144    */
;;;145    void GUI_DispStringInRect(const char GUI_UNI_PTR *s, GUI_RECT* pRect, int TextAlign) {
000000  f64773ff          MOV      r3,#0x7fff
;;;146      GUI_DispStringInRectMax(s, pRect, TextAlign, 0x7fff);
000004  f7ffbffe          B.W      GUI_DispStringInRectMax
;;;147    }
;;;148    
                          ENDP


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

                  GUI_DispStringInRectMax PROC
;;;106    #if (GUI_WINSUPPORT)
;;;107    void GUI_DispStringInRectMax(const char GUI_UNI_PTR *s, GUI_RECT* pRect, int TextAlign, int MaxLen) {
000000  e92d41fc          PUSH     {r2-r8,lr}
000004  0005              MOVS     r5,r0
000006  460e              MOV      r6,r1
000008  4617              MOV      r7,r2
00000a  4698              MOV      r8,r3
;;;108      if (s) {
00000c  d017              BEQ      |L2.62|
;;;109        const GUI_RECT *pOldClipRect = NULL;
00000e  2400              MOVS     r4,#0
;;;110        GUI_RECT r;
;;;111        GUI_LOCK();
;;;112        if (pRect) {
000010  b166              CBZ      r6,|L2.44|
;;;113          pOldClipRect = WM_SetUserClipRect(pRect);
000012  4630              MOV      r0,r6
000014  f7fffffe          BL       WM_SetUserClipRect
000018  0004              MOVS     r4,r0
;;;114          if (pOldClipRect) {
00001a  d007              BEQ      |L2.44|
;;;115            GUI__IntersectRects(&r, pRect, pOldClipRect);
00001c  4622              MOV      r2,r4
00001e  4631              MOV      r1,r6
000020  4668              MOV      r0,sp
000022  f7fffffe          BL       GUI__IntersectRects
;;;116            WM_SetUserClipRect(&r);
000026  4668              MOV      r0,sp
000028  f7fffffe          BL       WM_SetUserClipRect
                  |L2.44|
;;;117          }
;;;118        }
;;;119        GUI__DispStringInRect(s, pRect, TextAlign, MaxLen);
00002c  4643              MOV      r3,r8
00002e  463a              MOV      r2,r7
000030  4631              MOV      r1,r6
000032  4628              MOV      r0,r5
000034  f7fffffe          BL       GUI__DispStringInRect
;;;120        WM_SetUserClipRect(pOldClipRect);
000038  4620              MOV      r0,r4
00003a  f7fffffe          BL       WM_SetUserClipRect
                  |L2.62|
;;;121        GUI_UNLOCK();
;;;122      }
;;;123    }
00003e  e8bd81fc          POP      {r2-r8,pc}
;;;124    
                          ENDP


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

                  GUI__DispStringInRect PROC
;;;36     */
;;;37     void GUI__DispStringInRect(const char GUI_UNI_PTR *s, GUI_RECT* pRect, int TextAlign, int MaxNumChars) {
000000  e92d4fff          PUSH     {r0-r11,lr}
000004  b085              SUB      sp,sp,#0x14
;;;38       GUI_RECT r;
;;;39       GUI_RECT rLine;
;;;40       int y = 0;
000006  2400              MOVS     r4,#0
000008  460e              MOV      r6,r1                 ;37
00000a  4691              MOV      r9,r2                 ;37
00000c  469a              MOV      r10,r3                ;37
;;;41       const char GUI_UNI_PTR *sOrg =s;
;;;42       int FontYSize;
;;;43       int xLine = 0;
00000e  4625              MOV      r5,r4
;;;44       int LineLen;
;;;45       int NumCharsRem;           /* Number of remaining characters */
;;;46       FontYSize = GUI_GetFontSizeY();
000010  f8ddb014          LDR      r11,[sp,#0x14]
000014  f7fffffe          BL       GUI_GetFontSizeY
000018  4680              MOV      r8,r0
;;;47       if (pRect) {
00001a  b12e              CBZ      r6,|L3.40|
;;;48         r = *pRect;
00001c  2208              MOVS     r2,#8
00001e  4631              MOV      r1,r6
000020  a803              ADD      r0,sp,#0xc
000022  f7fffffe          BL       __aeabi_memcpy
000026  e002              B        |L3.46|
                  |L3.40|
;;;49       } else {
;;;50         GUI_GetClientRect(&r);
000028  a803              ADD      r0,sp,#0xc
00002a  f7fffffe          BL       GUI_GetClientRect
                  |L3.46|
;;;51       }
;;;52       /* handle vertical alignment */
;;;53       if ((TextAlign & GUI_TA_VERTICAL) == GUI_TA_TOP) {
00002e  f0190f0c          TST      r9,#0xc
000032  d102              BNE      |L3.58|
;;;54     		y = r.y0;
000034  f9bd400e          LDRSH    r4,[sp,#0xe]
000038  e029              B        |L3.142|
                  |L3.58|
;;;55       } else {
;;;56         int NumLines;
;;;57         /* Count the number of lines */
;;;58         for (NumCharsRem = MaxNumChars, NumLines = 1; NumCharsRem ;NumLines++) {
00003a  4657              MOV      r7,r10
00003c  2601              MOVS     r6,#1
00003e  e010              B        |L3.98|
                  |L3.64|
;;;59           LineLen = GUI__GetLineNumChars(s, NumCharsRem);
000040  4639              MOV      r1,r7
000042  9805              LDR      r0,[sp,#0x14]
000044  f7fffffe          BL       GUI__GetLineNumChars
;;;60           NumCharsRem -= LineLen;
000048  1a3f              SUBS     r7,r7,r0
;;;61           s += GUI_UC__NumChars2NumBytes(s, LineLen);
00004a  4601              MOV      r1,r0
00004c  9805              LDR      r0,[sp,#0x14]
00004e  f7fffffe          BL       GUI_UC__NumChars2NumBytes
000052  9905              LDR      r1,[sp,#0x14]
000054  4408              ADD      r0,r0,r1
;;;62           if (GUI__HandleEOLine(&s))
000056  9005              STR      r0,[sp,#0x14]
000058  a805              ADD      r0,sp,#0x14
00005a  f7fffffe          BL       GUI__HandleEOLine
00005e  b910              CBNZ     r0,|L3.102|
000060  1c76              ADDS     r6,r6,#1              ;58
                  |L3.98|
000062  2f00              CMP      r7,#0                 ;58
000064  d1ec              BNE      |L3.64|
                  |L3.102|
;;;63             break;
;;;64         }
;;;65         /* Do the vertical alignment */
;;;66         switch (TextAlign & GUI_TA_VERTICAL) {
000066  f009000c          AND      r0,r9,#0xc
00006a  2804              CMP      r0,#4
00006c  d013              BEQ      |L3.150|
00006e  2808              CMP      r0,#8
000070  d011              BEQ      |L3.150|
000072  280c              CMP      r0,#0xc
000074  d10b              BNE      |L3.142|
;;;67     	  case GUI_TA_BASELINE:
;;;68     	  case GUI_TA_BOTTOM:
;;;69     	  y = r.y1 -NumLines * FontYSize+1;
;;;70           break;
;;;71     	  case GUI_TA_VCENTER:
;;;72     		  y = r.y0+(r.y1-r.y0+1 -NumLines * FontYSize) /2;
000076  f9bd1012          LDRSH    r1,[sp,#0x12]
00007a  f9bd000e          LDRSH    r0,[sp,#0xe]
00007e  1a0a              SUBS     r2,r1,r0
000080  fb062118          MLS      r1,r6,r8,r2
000084  1c49              ADDS     r1,r1,#1
000086  eb0171d1          ADD      r1,r1,r1,LSR #31
00008a  eb000461          ADD      r4,r0,r1,ASR #1
                  |L3.142|
;;;73           break;
;;;74     	  }
;;;75       }
;;;76       /* Output string */
;;;77       for (NumCharsRem = MaxNumChars, s = sOrg; NumCharsRem;) {
00008e  4656              MOV      r6,r10
000090  f8cdb014          STR      r11,[sp,#0x14]
000094  e04c              B        |L3.304|
                  |L3.150|
000096  f9bd1012          LDRSH    r1,[sp,#0x12]         ;69
00009a  fb061418          MLS      r4,r6,r8,r1           ;69
00009e  1c64              ADDS     r4,r4,#1              ;69
0000a0  e7f5              B        |L3.142|
                  |L3.162|
;;;78         int xLineSize;
;;;79         LineLen = GUI__GetLineNumChars(s, NumCharsRem);
0000a2  4631              MOV      r1,r6
0000a4  9805              LDR      r0,[sp,#0x14]
0000a6  f7fffffe          BL       GUI__GetLineNumChars
0000aa  4607              MOV      r7,r0
;;;80         NumCharsRem -= LineLen;
0000ac  1a36              SUBS     r6,r6,r0
;;;81         xLineSize = GUI__GetLineDistX(s, LineLen);
0000ae  4601              MOV      r1,r0
0000b0  9805              LDR      r0,[sp,#0x14]
0000b2  f7fffffe          BL       GUI__GetLineDistX
;;;82         switch (TextAlign & GUI_TA_HORIZONTAL) {
0000b6  f0190103          ANDS     r1,r9,#3
0000ba  d00e              BEQ      |L3.218|
0000bc  2901              CMP      r1,#1
0000be  d00f              BEQ      |L3.224|
0000c0  2902              CMP      r1,#2
0000c2  d111              BNE      |L3.232|
;;;83         case GUI_TA_HCENTER:
;;;84           xLine = r.x0+(r.x1-r.x0-xLineSize)/2; break;
0000c4  f9bd1010          LDRSH    r1,[sp,#0x10]
0000c8  f9bd200c          LDRSH    r2,[sp,#0xc]
0000cc  1a89              SUBS     r1,r1,r2
0000ce  1a09              SUBS     r1,r1,r0
0000d0  eb0171d1          ADD      r1,r1,r1,LSR #31
0000d4  eb020561          ADD      r5,r2,r1,ASR #1
0000d8  e006              B        |L3.232|
                  |L3.218|
;;;85         case GUI_TA_LEFT:
;;;86           xLine = r.x0; break;
0000da  f9bd500c          LDRSH    r5,[sp,#0xc]
0000de  e003              B        |L3.232|
                  |L3.224|
;;;87         case GUI_TA_RIGHT:
;;;88           xLine = r.x1 -xLineSize + 1;
0000e0  f9bd1010          LDRSH    r1,[sp,#0x10]
0000e4  1a0d              SUBS     r5,r1,r0
0000e6  1c6d              ADDS     r5,r5,#1
                  |L3.232|
;;;89         }
;;;90         rLine.x0 = GUI_Context.DispPosX = xLine;
0000e8  4914              LDR      r1,|L3.316|
;;;91         rLine.x1 = rLine.x0 + xLineSize-1;
0000ea  1e40              SUBS     r0,r0,#1
0000ec  844d              STRH     r5,[r1,#0x22]         ;90
0000ee  4428              ADD      r0,r0,r5
0000f0  f8ad0008          STRH     r0,[sp,#8]
0000f4  f8ad5004          STRH     r5,[sp,#4]            ;90
;;;92         rLine.y0 = GUI_Context.DispPosY = y;
0000f8  848c              STRH     r4,[r1,#0x24]
;;;93         rLine.y1 = y + FontYSize-1;
0000fa  eb040008          ADD      r0,r4,r8
0000fe  1e40              SUBS     r0,r0,#1
000100  f8ad000a          STRH     r0,[sp,#0xa]
000104  f8ad4006          STRH     r4,[sp,#6]            ;92
;;;94         GUI__DispLine(s, LineLen, &rLine);
000108  aa01              ADD      r2,sp,#4
00010a  4639              MOV      r1,r7
00010c  9805              LDR      r0,[sp,#0x14]
00010e  f7fffffe          BL       GUI__DispLine
;;;95         s += GUI_UC__NumChars2NumBytes(s, LineLen);
000112  4639              MOV      r1,r7
000114  9805              LDR      r0,[sp,#0x14]
000116  f7fffffe          BL       GUI_UC__NumChars2NumBytes
00011a  9905              LDR      r1,[sp,#0x14]
00011c  4408              ADD      r0,r0,r1
;;;96         y += GUI_GetFontDistY();
00011e  9005              STR      r0,[sp,#0x14]
000120  f7fffffe          BL       GUI_GetFontDistY
000124  4404              ADD      r4,r4,r0
;;;97         if (GUI__HandleEOLine(&s))
000126  a805              ADD      r0,sp,#0x14
000128  f7fffffe          BL       GUI__HandleEOLine
00012c  2800              CMP      r0,#0
00012e  d101              BNE      |L3.308|
                  |L3.304|
000130  2e00              CMP      r6,#0                 ;77
000132  d1b6              BNE      |L3.162|
                  |L3.308|
;;;98           break;
;;;99       }
;;;100    }
000134  b009              ADD      sp,sp,#0x24
000136  e8bd8ff0          POP      {r4-r11,pc}
;;;101    
                          ENDP

00013a  0000              DCW      0x0000
                  |L3.316|
                          DCD      GUI_Context

⌨️ 快捷键说明

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