📄 guidev_copyfromlcd.txt
字号:
; generated by ARM C/C++ Compiler with , RVCT4.0 [Build 524] for uVision
; commandline ArmCC [--split_sections --debug -c --asm --interleave -o.\Obj\guidev_copyfromlcd.o --depend=.\Obj\guidev_copyfromlcd.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\MemDev\GUIDEV_CopyFromLCD.c]
THUMB
AREA ||i.GUI_MEMDEV_CopyFromLCD||, CODE, READONLY, ALIGN=2
GUI_MEMDEV_CopyFromLCD PROC
;;;47 */
;;;48 void GUI_MEMDEV_CopyFromLCD(GUI_MEMDEV_Handle hMem) {
000000 e92d4ff8 PUSH {r3-r11,lr}
;;;49 /* Make sure memory handle is valid */
;;;50 if (!hMem) {
;;;51 hMem = GUI_Context.hDevData;
000004 4f3c LDR r7,|L1.248|
000006 0004 MOVS r4,r0 ;48
000008 d103 BNE |L1.18|
00000a f9b7404c LDRSH r4,[r7,#0x4c] ; GUI_Context
;;;52 }
;;;53 if (!hMem) {
00000e 2c00 CMP r4,#0
000010 d06f BEQ |L1.242|
|L1.18|
;;;54 return;
;;;55 }
;;;56 {
;;;57 GUI_MEMDEV* pDevData = (GUI_MEMDEV*) GUI_ALLOC_h2p(hMem); /* Convert to pointer */
000012 4620 MOV r0,r4
000014 f7fffffe BL GUI_ALLOC_h2p
000018 4605 MOV r5,r0
;;;58 LCD_RECT r;
;;;59 int y;
;;;60 int XMax;
;;;61 GUI_USAGE* pUsage = 0;
;;;62 GUI_MEMDEV_Handle hMemOld = GUI_Context.hDevData;
00001a f9b7004c LDRSH r0,[r7,#0x4c] ; GUI_Context
;;;63 GUI_MEMDEV_Select(hMem);
00001e 9000 STR r0,[sp,#0]
000020 f04f0900 MOV r9,#0 ;61
000024 4620 MOV r0,r4
000026 f7fffffe BL GUI_MEMDEV_Select
;;;64 if (pDevData->hUsage)
00002a f9b50018 LDRSH r0,[r5,#0x18]
00002e b110 CBZ r0,|L1.54|
;;;65 pUsage = GUI_USAGE_H2P(pDevData->hUsage);
000030 f7fffffe BL GUI_ALLOC_h2p
000034 4681 MOV r9,r0
|L1.54|
;;;66 /* Get bounding rectangle */
;;;67 r.y0 = pDevData->y0;
;;;68 r.x0 = pDevData->x0;
000036 f9b50000 LDRSH r0,[r5,#0]
;;;69 r.x1 = pDevData->x0 + pDevData->XSize - 1;
00003a 88aa LDRH r2,[r5,#4]
00003c f9b51002 LDRSH r1,[r5,#2] ;67
000040 4402 ADD r2,r2,r0
000042 1e52 SUBS r2,r2,#1
000044 b217 SXTH r7,r2
;;;70 r.y1 = pDevData->y0 + pDevData->YSize - 1;
000046 88ea LDRH r2,[r5,#6]
000048 f361461f BFI r6,r1,#16,#16 ;68
00004c 440a ADD r2,r2,r1
00004e 1e52 SUBS r2,r2,#1
000050 b215 SXTH r5,r2
000052 f367040f BFI r4,r7,#0,#16 ;69
000056 2200 MOVS r2,#0 ;48
000058 f360060f BFI r6,r0,#0,#16 ;69
00005c f365441f BFI r4,r5,#16,#16
;;;71 /* Make sure bounds are within LCD area so we can call driver directly */
;;;72 LCD_LIMIT(r.x0, <, 0);
000060 2800 CMP r0,#0
000062 da01 BGE |L1.104|
000064 f362060f BFI r6,r2,#0,#16
|L1.104|
;;;73 LCD_LIMIT(r.y0, <, 0);
000068 2900 CMP r1,#0
00006a da01 BGE |L1.112|
00006c f362461f BFI r6,r2,#16,#16
|L1.112|
;;;74 LCD_LIMIT(r.x1, >, LCD_GET_XSIZE() - 1);
000070 f7fffffe BL LCD_GetXSize
000074 1e40 SUBS r0,r0,#1
000076 42b8 CMP r0,r7
000078 da04 BGE |L1.132|
00007a f7fffffe BL LCD_GetXSize
00007e 1e40 SUBS r0,r0,#1
000080 f360040f BFI r4,r0,#0,#16
|L1.132|
;;;75 LCD_LIMIT(r.y1, >, LCD_GET_YSIZE() - 1);
000084 f7fffffe BL LCD_GetYSize
000088 1e40 SUBS r0,r0,#1
00008a 42a8 CMP r0,r5
00008c da04 BGE |L1.152|
00008e f7fffffe BL LCD_GetYSize
000092 1e40 SUBS r0,r0,#1
000094 f360441f BFI r4,r0,#16,#16
|L1.152|
000098 fa0ffa84 SXTH r10,r4
00009c ea4f4826 ASR r8,r6,#16
0000a0 ea4f4b24 ASR r11,r4,#16
;;;76 XMax = r.x1;
;;;77 for (y = r.y0; y <= r.y1; y++) {
0000a4 e01e B |L1.228|
|L1.166|
0000a6 b235 SXTH r5,r6
;;;78 int x = r.x0;
;;;79 LCD_PIXELINDEX* pData = (LCD_PIXELINDEX*)GUI_MEMDEV__XY2PTR(x,y);
0000a8 4641 MOV r1,r8
0000aa 4628 MOV r0,r5
0000ac f7fffffe BL GUI_MEMDEV__XY2PTR
0000b0 4604 MOV r4,r0
;;;80 if (pUsage)
0000b2 f1b90f00 CMP r9,#0
0000b6 d011 BEQ |L1.220|
;;;81 GUI_USAGE_AddHLine(pUsage, x, y, r.x1 - r.x0 + 1);
0000b8 f8d90008 LDR r0,[r9,#8]
0000bc ebaa0305 SUB r3,r10,r5
0000c0 6847 LDR r7,[r0,#4]
0000c2 1c5b ADDS r3,r3,#1
0000c4 4642 MOV r2,r8
0000c6 4629 MOV r1,r5
0000c8 4648 MOV r0,r9
0000ca 47b8 BLX r7
0000cc e006 B |L1.220|
|L1.206|
;;;82 for (; x <= XMax; x++) {
;;;83 *pData++ = LCD_L0_GetPixelIndex(x, y);
0000ce 4641 MOV r1,r8
0000d0 4628 MOV r0,r5
0000d2 f7fffffe BL LCD_L0_GetPixelIndex
0000d6 f8240b02 STRH r0,[r4],#2
0000da 1c6d ADDS r5,r5,#1 ;82
|L1.220|
0000dc 4555 CMP r5,r10 ;82
0000de ddf6 BLE |L1.206|
0000e0 f1080801 ADD r8,r8,#1 ;77
|L1.228|
0000e4 45c3 CMP r11,r8 ;77
0000e6 dade BGE |L1.166|
;;;84 }
;;;85 }
;;;86 GUI_MEMDEV_Select(hMemOld);
0000e8 9800 LDR r0,[sp,#0]
0000ea e8bd4ff8 POP {r3-r11,lr}
0000ee f7ffbffe B.W GUI_MEMDEV_Select
|L1.242|
;;;87 }
;;;88 }
0000f2 e8bd8ff8 POP {r3-r11,pc}
;;;89
ENDP
0000f6 0000 DCW 0x0000
|L1.248|
DCD GUI_Context
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -