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

📄 gui_bmp_serialize.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_bmp_serialize.o --depend=.\Obj\gui_bmp_serialize.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_BMP_Serialize.c]
                          THUMB

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

                  GUI_BMP_Serialize PROC
;;;128    */
;;;129    void GUI_BMP_Serialize(GUI_CALLBACK_VOID_U8_P * pfSerialize, void * p) {
000000  b57c              PUSH     {r2-r6,lr}
000002  4605              MOV      r5,r0
000004  460e              MOV      r6,r1
;;;130      GUI_BMP_SerializeEx(pfSerialize, 0, 0, LCD_GetXSize(), LCD_GetYSize(), p);
000006  f7fffffe          BL       LCD_GetYSize
00000a  4604              MOV      r4,r0
00000c  f7fffffe          BL       LCD_GetXSize
000010  e9cd4600          STRD     r4,r6,[sp,#0]
000014  4603              MOV      r3,r0
000016  2200              MOVS     r2,#0
000018  4611              MOV      r1,r2
00001a  4628              MOV      r0,r5
00001c  f7fffffe          BL       GUI_BMP_SerializeEx
;;;131    }
000020  bd7c              POP      {r2-r6,pc}
;;;132    
                          ENDP


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

                  GUI_BMP_SerializeEx PROC
;;;67     */
;;;68     void GUI_BMP_SerializeEx(GUI_CALLBACK_VOID_U8_P * pfSerialize, int x0, int y0, int xSize, int ySize, void * p) {
000000  e92d5ffc          PUSH     {r2-r12,lr}
000004  4607              MOV      r7,r0
000006  4688              MOV      r8,r1
000008  4691              MOV      r9,r2
00000a  469a              MOV      r10,r3
;;;69       int x, y, i;
;;;70       U32 BitmapOffset, FileSize;
;;;71       int BPP          = LCD_GetBitsPerPixel();
00000c  9d0c              LDR      r5,[sp,#0x30]
00000e  f7fffffe          BL       LCD_GetBitsPerPixel
000012  4606              MOV      r6,r0
;;;72       int BytesPerLine = ((BPP > 8) ? (2 * xSize + 2) : (xSize + 3)) & ~3;
000014  f10a0103          ADD      r1,r10,#3
000018  2808              CMP      r0,#8
00001a  dd03              BLE      |L2.36|
00001c  ea4f014a          LSL      r1,r10,#1
000020  f1010102          ADD      r1,r1,#2
                  |L2.36|
000024  f0210003          BIC      r0,r1,#3
;;;73       int NumColors    = (BPP > 8) ? 0 : (1 << BPP);
000028  9000              STR      r0,[sp,#0]
00002a  f04f0000          MOV      r0,#0
00002e  dc03              BGT      |L2.56|
000030  f04f0001          MOV      r0,#1
000034  fa00f006          LSL      r0,r0,r6
                  |L2.56|
;;;74       /* Write BITMAPFILEHEADER */
;;;75       BitmapOffset   = SIZEOF_BITMAPFILEHEADER
000038  2136              MOVS     r1,#0x36
00003a  eb010480          ADD      r4,r1,r0,LSL #2
00003e  4683              MOV      r11,r0                ;73
;;;76                      + SIZEOF_BITMAPINFOHEADER
;;;77                      + NumColors * 4;
;;;78       FileSize       = BitmapOffset
000040  9800              LDR      r0,[sp,#0]
;;;79                      + ySize * BytesPerLine;
;;;80       _SendU16(pfSerialize, DIB_HEADER_MARKER, p);       /* bfType */
000042  f6445142          MOV      r1,#0x4d42
000046  fb054000          MLA      r0,r5,r0,r4           ;78
00004a  9001              STR      r0,[sp,#4]
00004c  4638              MOV      r0,r7
00004e  9a0d              LDR      r2,[sp,#0x34]
000050  f7fffffe          BL       _SendU16
;;;81       _SendU32(pfSerialize, FileSize, p);                /* bfSize */
000054  4638              MOV      r0,r7
000056  9a0d              LDR      r2,[sp,#0x34]
000058  9901              LDR      r1,[sp,#4]
00005a  f7fffffe          BL       _SendU32
;;;82       _SendU32(pfSerialize, 0, p);                       /* bfReserved1, bfReserved2 */
00005e  2100              MOVS     r1,#0
000060  4638              MOV      r0,r7
000062  9a0d              LDR      r2,[sp,#0x34]
000064  f7fffffe          BL       _SendU32
;;;83       _SendU32(pfSerialize, BitmapOffset, p);            /* bfOffBits */
000068  4621              MOV      r1,r4
00006a  4638              MOV      r0,r7
00006c  9a0d              LDR      r2,[sp,#0x34]
00006e  f7fffffe          BL       _SendU32
;;;84       /* Write BITMAPINFOHEADER */
;;;85       _SendU32(pfSerialize, SIZEOF_BITMAPINFOHEADER, p); /* biSize */
000072  2128              MOVS     r1,#0x28
000074  4638              MOV      r0,r7
000076  9a0d              LDR      r2,[sp,#0x34]
000078  f7fffffe          BL       _SendU32
;;;86       _SendU32(pfSerialize, xSize, p);                   /* biWidth */
00007c  4651              MOV      r1,r10
00007e  4638              MOV      r0,r7
000080  9a0d              LDR      r2,[sp,#0x34]
000082  f7fffffe          BL       _SendU32
;;;87       _SendU32(pfSerialize, ySize, p);                   /* biHeighth */
000086  4629              MOV      r1,r5
000088  4638              MOV      r0,r7
00008a  9a0d              LDR      r2,[sp,#0x34]
00008c  f7fffffe          BL       _SendU32
;;;88       _SendU16(pfSerialize, 1, p);                       /* biPlanes */
000090  2101              MOVS     r1,#1
000092  4638              MOV      r0,r7
000094  9a0d              LDR      r2,[sp,#0x34]
000096  f7fffffe          BL       _SendU16
;;;89       _SendU16(pfSerialize, (BPP  <= 8) ? 8 : 16, p);    /* biBitCount */
00009a  2108              MOVS     r1,#8
00009c  2e08              CMP      r6,#8
00009e  dd00              BLE      |L2.162|
0000a0  2110              MOVS     r1,#0x10
                  |L2.162|
0000a2  4638              MOV      r0,r7
0000a4  9a0d              LDR      r2,[sp,#0x34]
0000a6  f7fffffe          BL       _SendU16
;;;90       _SendU32(pfSerialize, 0, p);                       /* biCompression */
0000aa  2100              MOVS     r1,#0
0000ac  4638              MOV      r0,r7
0000ae  9a0d              LDR      r2,[sp,#0x34]
0000b0  f7fffffe          BL       _SendU32
;;;91       _SendU32(pfSerialize, 0, p);                       /* biSizeImage */
0000b4  2100              MOVS     r1,#0
0000b6  4638              MOV      r0,r7
0000b8  9a0d              LDR      r2,[sp,#0x34]
0000ba  f7fffffe          BL       _SendU32
;;;92       _SendU32(pfSerialize, 0, p);                       /* biXPelsPerMeter */
0000be  2100              MOVS     r1,#0
0000c0  4638              MOV      r0,r7
0000c2  9a0d              LDR      r2,[sp,#0x34]
0000c4  f7fffffe          BL       _SendU32
;;;93       _SendU32(pfSerialize, 0, p);                       /* biYPelsPerMeter */
0000c8  2100              MOVS     r1,#0
0000ca  4638              MOV      r0,r7
0000cc  9a0d              LDR      r2,[sp,#0x34]
0000ce  f7fffffe          BL       _SendU32
;;;94       _SendU32(pfSerialize, NumColors, p);               /* biClrUsed */
0000d2  4659              MOV      r1,r11
0000d4  4638              MOV      r0,r7
0000d6  9a0d              LDR      r2,[sp,#0x34]
0000d8  f7fffffe          BL       _SendU32
;;;95       _SendU32(pfSerialize, 0, p);                       /* biClrImportant */
0000dc  2100              MOVS     r1,#0
0000de  4638              MOV      r0,r7
0000e0  9a0d              LDR      r2,[sp,#0x34]
0000e2  f7fffffe          BL       _SendU32
;;;96       /* Write palette */
;;;97       for (i = 0; i < NumColors; i++) {
0000e6  2400              MOVS     r4,#0
0000e8  e00f              B        |L2.266|
                  |L2.234|
;;;98         U32 Color;
;;;99         Color = GUI_Index2Color(i);
0000ea  4620              MOV      r0,r4
0000ec  f7fffffe          BL       GUI_Index2Color
;;;100        Color = ((Color >> 16) & 255) | (Color & 0xff00) | ((Color & 0xff) << 16);
0000f0  f400417f          AND      r1,r0,#0xff00
0000f4  f3c04207          UBFX     r2,r0,#16,#8
0000f8  4311              ORRS     r1,r1,r2
0000fa  b2c0              UXTB     r0,r0
0000fc  ea414100          ORR      r1,r1,r0,LSL #16
;;;101        _SendU32(pfSerialize, Color, p);
000100  4638              MOV      r0,r7
000102  9a0d              LDR      r2,[sp,#0x34]
000104  f7fffffe          BL       _SendU32
000108  1c64              ADDS     r4,r4,#1              ;97
                  |L2.266|
00010a  455c              CMP      r4,r11                ;97
00010c  dbed              BLT      |L2.234|
                  |L2.270|
;;;102      }
;;;103      /* Write pixels */
;;;104      for (y = ySize - 1; y >= 0; y--) {
00010e  1e6d              SUBS     r5,r5,#1
000110  d43a              BMI      |L2.392|
;;;105        for (x = 0; x < xSize; x++) {
000112  2400              MOVS     r4,#0
000114  e02b              B        |L2.366|
                  |L2.278|
;;;106          if (BPP <= 8) {
000116  2e08              CMP      r6,#8
;;;107            pfSerialize(LCD_GetPixelIndex(x0 + x, y0 + y), p);
000118  eb090105          ADD      r1,r9,r5
00011c  eb080004          ADD      r0,r8,r4
000120  dc05              BGT      |L2.302|
000122  f7fffffe          BL       LCD_GetPixelIndex
000126  b2c0              UXTB     r0,r0
000128  990d              LDR      r1,[sp,#0x34]
00012a  47b8              BLX      r7
00012c  e01e              B        |L2.364|
                  |L2.302|
;;;108          } else {
;;;109            U16 Color16;
;;;110            U32 Color = LCD_GetPixelColor(x0 + x, y0 + y);
00012e  f7fffffe          BL       LCD_GetPixelColor
;;;111            int b = ((Color >> 16) * 31 + 127) / 255;
000132  0c01              LSRS     r1,r0,#16
000134  ebc11141          RSB      r1,r1,r1,LSL #5
000138  317f              ADDS     r1,r1,#0x7f
00013a  22ff              MOVS     r2,#0xff
00013c  fbb1f3f2          UDIV     r3,r1,r2
;;;112            int g = (((Color >> 8) & 255) * 31 + 127) / 255;
000140  f3c02107          UBFX     r1,r0,#8,#8
;;;113            int r = ((Color & 255) * 31 + 127) / 255;
000144  b2c0              UXTB     r0,r0
000146  ebc01040          RSB      r0,r0,r0,LSL #5
00014a  ebc11141          RSB      r1,r1,r1,LSL #5       ;112
00014e  307f              ADDS     r0,r0,#0x7f
000150  317f              ADDS     r1,r1,#0x7f           ;112
000152  fbb0f0f2          UDIV     r0,r0,r2
000156  fbb1f1f2          UDIV     r1,r1,r2              ;112
;;;114            Color16 = (r << 10) | (g << 5) | b;       /* 16 bpp Bitmaps in windows are 555: rrrrrgggggbbbbb */
00015a  0280              LSLS     r0,r0,#10
00015c  ea401041          ORR      r0,r0,r1,LSL #5
000160  4318              ORRS     r0,r0,r3
000162  b281              UXTH     r1,r0
;;;115            _SendU16(pfSerialize, Color16, p);
000164  4638              MOV      r0,r7
000166  9a0d              LDR      r2,[sp,#0x34]
000168  f7fffffe          BL       _SendU16
                  |L2.364|
00016c  1c64              ADDS     r4,r4,#1              ;105
                  |L2.366|
00016e  4554              CMP      r4,r10                ;105
000170  dbd1              BLT      |L2.278|
;;;116          }
;;;117        }
;;;118        /* Align pointer to next U32 */
;;;119        for (i = BytesPerLine & 3; i > 0; i--) {
000172  9800              LDR      r0,[sp,#0]
000174  f0000403          AND      r4,r0,#3
000178  e003              B        |L2.386|
                  |L2.378|
;;;120          pfSerialize(0, p);
00017a  2000              MOVS     r0,#0
00017c  990d              LDR      r1,[sp,#0x34]
00017e  47b8              BLX      r7
000180  1e64              SUBS     r4,r4,#1              ;119
                  |L2.386|
000182  2c00              CMP      r4,#0                 ;119
000184  dcf9              BGT      |L2.378|
000186  e7c2              B        |L2.270|
                  |L2.392|
;;;121        }
;;;122      }
;;;123    }
000188  e8bd9ffc          POP      {r2-r12,pc}
;;;124    
                          ENDP


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

                  _SendU16 PROC
;;;43     */
;;;44     static void _SendU16(GUI_CALLBACK_VOID_U8_P * pfSerialize, U16 Data, void * p) {
000000  b570              PUSH     {r4-r6,lr}
000002  460d              MOV      r5,r1
000004  4604              MOV      r4,r0
000006  4616              MOV      r6,r2
;;;45       (*pfSerialize)((U8)Data, p);
000008  4611              MOV      r1,r2
00000a  b2e8              UXTB     r0,r5
00000c  47a0              BLX      r4
;;;46       (*pfSerialize)(Data >> 8, p);
00000e  0a28              LSRS     r0,r5,#8
000010  4631              MOV      r1,r6
000012  46a4              MOV      r12,r4
000014  e8bd4070          POP      {r4-r6,lr}
000018  4760              BX       r12
;;;47     }
;;;48     
                          ENDP


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

                  _SendU32 PROC
;;;52     */
;;;53     static void _SendU32(GUI_CALLBACK_VOID_U8_P * pfSerialize, U32 Data, void * p) {
000000  b570              PUSH     {r4-r6,lr}
000002  460c              MOV      r4,r1
000004  4605              MOV      r5,r0
000006  4616              MOV      r6,r2
;;;54       _SendU16(pfSerialize, (U16)Data, p);
000008  b289              UXTH     r1,r1
00000a  f7fffffe          BL       _SendU16
;;;55       _SendU16(pfSerialize, Data >> 16, p);
00000e  0c21              LSRS     r1,r4,#16
000010  4632              MOV      r2,r6
000012  4628              MOV      r0,r5
000014  e8bd4070          POP      {r4-r6,lr}
000018  f7ffbffe          B.W      _SendU16
;;;56     }
;;;57     
                          ENDP

⌨️ 快捷键说明

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