📄 gui_array.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_array.o --depend=.\Obj\gui_array.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\Widget\GUI_ARRAY.c]
THUMB
AREA ||i.GUI_ARRAY_AddItem||, CODE, READONLY, ALIGN=1
GUI_ARRAY_AddItem PROC
;;;55 */
;;;56 int GUI_ARRAY_AddItem(GUI_ARRAY* pThis, const void *pNew, int Len) {
000000 e92d41f0 PUSH {r4-r8,lr}
000004 4604 MOV r4,r0
;;;57 WM_HMEM hNewItem = 0;
000006 2500 MOVS r5,#0
000008 4608 MOV r0,r1 ;56
;;;58 WM_HMEM hNewBuffer;
;;;59 WM_HMEM *pNewBuffer;
;;;60 int r = 0;
00000a 46a8 MOV r8,r5
;;;61
;;;62 GUI_ARRAY_CHECK(pThis); /* Sanity checks at higher debug levels only */
;;;63
;;;64 WM_LOCK();
;;;65 /* Alloc memory for new item */
;;;66 if (Len) {
00000c b13a CBZ r2,|L1.30|
;;;67 if ((hNewItem = GUI_ALLOC_AllocInit(pNew, Len)) == 0) {
00000e b211 SXTH r1,r2
000010 f7fffffe BL GUI_ALLOC_AllocInit
000014 0005 MOVS r5,r0
000016 d102 BNE |L1.30|
|L1.24|
;;;68 GUI_DEBUG_ERROROUT("GUI_ARRAY_AddItem failed to alloc buffer");
;;;69 r = 1; /* Error */
000018 f04f0801 MOV r8,#1
00001c e015 B |L1.74|
|L1.30|
;;;70 }
;;;71 }
;;;72 /* Put handle of new item into the array */
;;;73 if (r == 0) {
;;;74 int NumItems;
;;;75 NumItems = pThis->NumItems;
00001e 8827 LDRH r7,[r4,#0]
;;;76 /* Add the handle to new item to the buffer */
;;;77 hNewBuffer = GUI_ALLOC_Realloc(pThis->haHandle, (NumItems + 1) * sizeof(WM_HMEM));
000020 f9b40002 LDRSH r0,[r4,#2]
000024 0079 LSLS r1,r7,#1
000026 1c89 ADDS r1,r1,#2
000028 f7fffffe BL GUI_ALLOC_Realloc
00002c 0006 MOVS r6,r0
;;;78 if (hNewBuffer == 0) {
00002e d103 BNE |L1.56|
;;;79 GUI_DEBUG_ERROROUT("GUI_ARRAY_AddItem failed to alloc buffer");
;;;80 GUI_ALLOC_Free(hNewItem);
000030 4628 MOV r0,r5
000032 f7fffffe BL GUI_ALLOC_Free
;;;81 r = 1; /* Error */
000036 e7ef B |L1.24|
|L1.56|
;;;82 } else {
;;;83 pNewBuffer = (WM_HMEM*) GUI_ALLOC_h2p(hNewBuffer);
000038 4630 MOV r0,r6
00003a f7fffffe BL GUI_ALLOC_h2p
;;;84 *(pNewBuffer + NumItems) = hNewItem;
00003e f8205017 STRH r5,[r0,r7,LSL #1]
;;;85 pThis->haHandle = hNewBuffer;
000042 8066 STRH r6,[r4,#2]
;;;86 pThis->NumItems++;
000044 8820 LDRH r0,[r4,#0]
000046 1c40 ADDS r0,r0,#1
000048 8020 STRH r0,[r4,#0]
|L1.74|
;;;87 }
;;;88 }
;;;89 WM_UNLOCK();
;;;90 return r;
00004a 4640 MOV r0,r8
;;;91 }
00004c e8bd81f0 POP {r4-r8,pc}
;;;92
ENDP
AREA ||i.GUI_ARRAY_Delete||, CODE, READONLY, ALIGN=2
GUI_ARRAY_Delete PROC
;;;103 */
;;;104 void GUI_ARRAY_Delete(GUI_ARRAY* pThis) {
000000 b570 PUSH {r4-r6,lr}
000002 4605 MOV r5,r0
;;;105 int i;
;;;106 WM_HMEM ha;
;;;107 WM_HMEM* pa;
;;;108
;;;109 GUI_ARRAY_CHECK(pThis); /* Sanity checks at higher debug levels only */
;;;110
;;;111 ha = pThis->haHandle;
000004 f9b00002 LDRSH r0,[r0,#2]
;;;112 if (ha) {
000008 2800 CMP r0,#0
00000a d012 BEQ |L2.50|
;;;113 pa = (WM_HMEM*) GUI_ALLOC_h2p(ha);
00000c f7fffffe BL GUI_ALLOC_h2p
000010 4606 MOV r6,r0
;;;114 /* Free the attached items, one at a time */
;;;115 for (i = 0; i < pThis->NumItems; i++) {
000012 2400 MOVS r4,#0
000014 e005 B |L2.34|
;;;116 GUI_ALLOC_FreePtr(pa+i);
000016 bf00 NOP
|L2.24|
000018 eb060044 ADD r0,r6,r4,LSL #1
00001c f7fffffe BL GUI_ALLOC_FreePtr
000020 1c64 ADDS r4,r4,#1 ;115
|L2.34|
000022 8828 LDRH r0,[r5,#0] ;115
000024 42a0 CMP r0,r4 ;115
000026 dcf7 BGT |L2.24|
;;;117 }
;;;118 /* Free the handle buffer */
;;;119 GUI_ALLOC_FreePtr(&pThis->haHandle);
000028 1ca8 ADDS r0,r5,#2
00002a f7fffffe BL GUI_ALLOC_FreePtr
;;;120 pThis->NumItems = 0; /* For safety, in case the array is used after it has been deleted */
00002e 2000 MOVS r0,#0
000030 8028 STRH r0,[r5,#0]
|L2.50|
;;;121 }
;;;122 #if GUI_DEBUG_LEVEL >= GUI_DEBUG_LEVEL_CHECK_ALL
;;;123 pThis->InitState = GUI_ARRAY_STATE_DELETED;
;;;124 #endif
;;;125 }
000032 bd70 POP {r4-r6,pc}
;;;126
ENDP
AREA ||i.GUI_ARRAY_GetNumItems||, CODE, READONLY, ALIGN=1
GUI_ARRAY_GetNumItems PROC
;;;34 */
;;;35 unsigned int GUI_ARRAY_GetNumItems(const GUI_ARRAY* pThis) {
000000 8800 LDRH r0,[r0,#0]
;;;36 GUI_ARRAY_CHECK(pThis); /* Sanity checks at higher debug levels only */
;;;37
;;;38 return pThis->NumItems;
;;;39 }
000002 4770 BX lr
;;;40
ENDP
AREA ||i.GUI_ARRAY_GethItem||, CODE, READONLY, ALIGN=1
GUI_ARRAY_GethItem PROC
;;;240 */
;;;241 WM_HMEM GUI_ARRAY_GethItem(const GUI_ARRAY* pThis, unsigned int Index) {
000000 b510 PUSH {r4,lr}
000002 4602 MOV r2,r0
000004 460c MOV r4,r1
;;;242 WM_HMEM h = 0;
;;;243
;;;244 GUI_ARRAY_CHECK(pThis); /* Sanity checks at higher debug levels only */
;;;245
;;;246 if (Index < (unsigned)pThis->NumItems) {
000006 8811 LDRH r1,[r2,#0]
000008 2000 MOVS r0,#0 ;242
00000a 42a1 CMP r1,r4
00000c d908 BLS |L4.32|
;;;247 WM_HMEM ha;
;;;248 WM_HMEM* pa;
;;;249 ha = pThis->haHandle;
00000e f9b21002 LDRSH r1,[r2,#2]
;;;250 if (ha) {
000012 2900 CMP r1,#0
000014 d004 BEQ |L4.32|
;;;251 pa = (WM_HMEM*) GUI_ALLOC_h2p(ha);
000016 4608 MOV r0,r1
000018 f7fffffe BL GUI_ALLOC_h2p
;;;252 h = *(pa + Index);
00001c f9300014 LDRSH r0,[r0,r4,LSL #1]
|L4.32|
;;;253 }
;;;254 }
;;;255 return h;
;;;256 }
000020 bd10 POP {r4,pc}
;;;257
ENDP
AREA ||i.GUI_ARRAY_GetpItem||, CODE, READONLY, ALIGN=1
GUI_ARRAY_GetpItem PROC
;;;272 */
;;;273 void* GUI_ARRAY_GetpItem(const GUI_ARRAY* pThis, unsigned int Index) {
000000 b510 PUSH {r4,lr}
;;;274 void* p = NULL;
000002 2400 MOVS r4,#0
;;;275 WM_HMEM h;
;;;276
;;;277 GUI_ARRAY_CHECK(pThis); /* Sanity checks at higher debug levels only */
;;;278
;;;279 h = GUI_ARRAY_GethItem(pThis, Index);
000004 f7fffffe BL GUI_ARRAY_GethItem
;;;280 if (h) {
000008 b110 CBZ r0,|L5.16|
;;;281 p = WM_H2P(h);
00000a f7fffffe BL GUI_ALLOC_h2p
00000e 4604 MOV r4,r0
|L5.16|
;;;282 }
;;;283 return p;
000010 4620 MOV r0,r4
;;;284 }
000012 bd10 POP {r4,pc}
;;;285
ENDP
AREA ||i.GUI_ARRAY_SetItem||, CODE, READONLY, ALIGN=1
GUI_ARRAY_SetItem PROC
;;;184 */
;;;185 WM_HMEM GUI_ARRAY_SetItem(GUI_ARRAY* pThis, unsigned int Index, const void* pData, int Len) {
000000 e92d41f0 PUSH {r4-r8,lr}
000004 460d MOV r5,r1
;;;186 WM_HMEM hItem = 0;
;;;187
;;;188 GUI_ARRAY_CHECK(pThis); /* Sanity checks at higher debug levels only */
;;;189
;;;190 if (Index < (unsigned)pThis->NumItems) {
000006 8801 LDRH r1,[r0,#0]
000008 2400 MOVS r4,#0 ;186
00000a 4617 MOV r7,r2 ;185
00000c 461e MOV r6,r3 ;185
00000e 42a9 CMP r1,r5
000010 d920 BLS |L6.84|
;;;191 WM_HMEM ha;
;;;192 ha = pThis->haHandle;
000012 f9b00002 LDRSH r0,[r0,#2]
;;;193 if (ha) {
000016 b1e8 CBZ r0,|L6.84|
;;;194 WM_HMEM* pa;
;;;195 pa = (WM_HMEM*) GUI_ALLOC_h2p(ha);
000018 f7fffffe BL GUI_ALLOC_h2p
;;;196 pa += Index;
00001c eb000545 ADD r5,r0,r5,LSL #1
;;;197 hItem = *pa;
000020 f9b54000 LDRSH r4,[r5,#0]
;;;198 /*
;;;199 * If a buffer is already available, a new buffer is only needed when the
;;;200 * new item has a different size.
;;;201 */
;;;202 if (hItem) {
000024 b124 CBZ r4,|L6.48|
;;;203 if (GUI_ALLOC_GetSize(hItem) != Len) {
000026 4620 MOV r0,r4
000028 f7fffffe BL GUI_ALLOC_GetSize
00002c 42b0 CMP r0,r6
00002e d008 BEQ |L6.66|
|L6.48|
;;;204 hItem = 0;
;;;205 }
;;;206 }
;;;207 /*
;;;208 * Allocate a new buffer and free the old one (if needed).
;;;209 */
;;;210 if (!hItem) {
;;;211 hItem = GUI_ALLOC_AllocZero(Len);
000030 b230 SXTH r0,r6
000032 f7fffffe BL GUI_ALLOC_AllocZero
000036 0004 MOVS r4,r0
;;;212 if (hItem) {
000038 d003 BEQ |L6.66|
;;;213 GUI_ALLOC_FreePtr(pa);
00003a 4628 MOV r0,r5
00003c f7fffffe BL GUI_ALLOC_FreePtr
;;;214 *pa = hItem;
000040 802c STRH r4,[r5,#0]
|L6.66|
;;;215 }
;;;216 }
;;;217 /*
;;;218 * Set the item (if needed)
;;;219 */
;;;220 if (pData && hItem) {
000042 b13f CBZ r7,|L6.84|
000044 b134 CBZ r4,|L6.84|
;;;221 char* pItem = (char*) GUI_ALLOC_h2p(hItem);
000046 4620 MOV r0,r4
000048 f7fffffe BL GUI_ALLOC_h2p
;;;222 memcpy(pItem, pData, Len);
00004c 4632 MOV r2,r6
00004e 4639 MOV r1,r7
000050 f7fffffe BL __aeabi_memcpy
|L6.84|
;;;223 }
;;;224 }
;;;225 }
;;;226 return hItem;
000054 4620 MOV r0,r4
;;;227 }
000056 e8bd81f0 POP {r4-r8,pc}
;;;228
ENDP
AREA ||i.GUI_ARRAY_SethItem||, CODE, READONLY, ALIGN=1
GUI_ARRAY_SethItem PROC
;;;145 */
;;;146 int GUI_ARRAY_SethItem(GUI_ARRAY* pThis, unsigned int Index, WM_HMEM hItem) {
000000 b570 PUSH {r4-r6,lr}
000002 4615 MOV r5,r2
000004 460c MOV r4,r1
;;;147 WM_HMEM ha;
;;;148 WM_HMEM* pa;
;;;149 int r = 1;
;;;150
;;;151 GUI_ARRAY_CHECK(pThis); /* Sanity checks at higher debug levels only */
;;;152
;;;153 if (Index < (unsigned)pThis->NumItems) {
000006 8802 LDRH r2,[r0,#0]
000008 2101 MOVS r1,#1 ;149
00000a 42a2 CMP r2,r4
00000c d90b BLS |L7.38|
;;;154 ha = pThis->haHandle;
00000e f9b00002 LDRSH r0,[r0,#2]
;;;155 if (ha) {
000012 b140 CBZ r0,|L7.38|
;;;156 pa = (WM_HMEM*) GUI_ALLOC_h2p(ha);
000014 f7fffffe BL GUI_ALLOC_h2p
;;;157 pa += Index;
000018 eb000444 ADD r4,r0,r4,LSL #1
;;;158 GUI_ALLOC_FreePtr(pa);
00001c 4620 MOV r0,r4
00001e f7fffffe BL GUI_ALLOC_FreePtr
;;;159 *pa = hItem;
000022 8025 STRH r5,[r4,#0]
;;;160 r = 0;
000024 2100 MOVS r1,#0
|L7.38|
;;;161 }
;;;162 }
;;;163 return r;
000026 4608 MOV r0,r1
;;;164 }
000028 bd70 POP {r4-r6,pc}
;;;165
ENDP
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -