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

📄 guialloc.txt

📁 STM32F103ZET6+UCOSII+UCGUI源码
💻 TXT
📖 第 1 页 / 共 2 页
字号:
; generated by ARM C/C++ Compiler with , RVCT4.0 [Build 524] for uVision
; commandline ArmCC [--split_sections --debug -c --asm --interleave -o.\Obj\guialloc.o --depend=.\Obj\guialloc.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\GUIAlloc.c]
                          THUMB

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

                  GUI_ALLOC_AllocNoInit PROC
;;;339    */
;;;340    GUI_HMEM GUI_ALLOC_AllocNoInit(GUI_ALLOC_DATATYPE Size) {
000000  2800              CMP      r0,#0
;;;341      GUI_HMEM hMem;
;;;342      if (Size == 0) {
000002  d001              BEQ      |L1.8|
;;;343        return (GUI_HMEM)0;
;;;344      }
;;;345      GUI_LOCK();
;;;346      GUI_DEBUG_LOG2("\nGUI_ALLOC_AllocNoInit... requesting %d, %d avail", Size, GUI_ALLOC.NumFreeBytes);
;;;347      hMem = _Alloc(Size);
000004  f7ffbffe          B.W      _Alloc
                  |L1.8|
;;;348      GUI_DEBUG_LOG1("\nGUI_ALLOC_AllocNoInit : Handle", hMem);
;;;349      GUI_UNLOCK();
;;;350      return hMem;
;;;351    }
000008  4770              BX       lr
;;;352    
                          ENDP


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

                  GUI_ALLOC_Free PROC
;;;524    */
;;;525    void GUI_ALLOC_Free(GUI_HMEM hMem) {
000000  2800              CMP      r0,#0
;;;526      if (hMem == GUI_HMEM_NULL) { /* Note: This is not an error, it is permitted */
000002  d001              BEQ      |L2.8|
;;;527        return;
;;;528      }
;;;529      GUI_LOCK();
;;;530      GUI_DEBUG_LOG1("\nGUI_ALLOC_Free(%d)", hMem);
;;;531      _Free(hMem);
000004  f7ffbffe          B.W      _Free
                  |L2.8|
;;;532      GUI_UNLOCK();
;;;533    }
000008  4770              BX       lr
;;;534    
                          ENDP


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

                  GUI_ALLOC_FreePtr PROC
;;;539    */
;;;540    void GUI_ALLOC_FreePtr(GUI_HMEM *ph) {
000000  b510              PUSH     {r4,lr}
000002  4604              MOV      r4,r0
;;;541      GUI_LOCK();
;;;542      GUI_ALLOC_Free(*ph);
000004  f9b00000          LDRSH    r0,[r0,#0]
000008  f7fffffe          BL       GUI_ALLOC_Free
;;;543      *ph =0;
00000c  2000              MOVS     r0,#0
00000e  8020              STRH     r0,[r4,#0]
;;;544      GUI_UNLOCK();
;;;545    }
000010  bd10              POP      {r4,pc}
;;;546    
                          ENDP


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

                  GUI_ALLOC_GetMaxSize PROC
;;;387    */
;;;388    GUI_ALLOC_DATATYPE GUI_ALLOC_GetMaxSize(void) {
000000  b570              PUSH     {r4-r6,lr}
;;;389      GUI_ALLOC_DATATYPE r = 0;
000002  2400              MOVS     r4,#0
;;;390      GUI_ALLOC_DATATYPE NumFreeBytes;
;;;391      int i, iNext;
;;;392    
;;;393      GUI_LOCK();
;;;394      _CheckInit();
000004  f7fffffe          BL       _CheckInit
;;;395      for (i=0; (iNext =aBlock[i].Next) !=0; i= iNext) {
000008  2000              MOVS     r0,#0
;;;396        NumFreeBytes = aBlock[iNext].Off- (aBlock[i].Off+aBlock[i].Size);
00000a  4b11              LDR      r3,|L4.80|
00000c  e00c              B        |L4.40|
00000e  bf00              NOP      
                  |L4.16|
000010  f8330030          LDRH     r0,[r3,r0,LSL #3]
000014  8852              LDRH     r2,[r2,#2]
000016  f8335031          LDRH     r5,[r3,r1,LSL #3]
00001a  4410              ADD      r0,r0,r2
00001c  1a28              SUBS     r0,r5,r0
00001e  b200              SXTH     r0,r0
;;;397        if (NumFreeBytes > r) {
000020  42a0              CMP      r0,r4
000022  dd00              BLE      |L4.38|
;;;398          r = NumFreeBytes;
000024  4604              MOV      r4,r0
                  |L4.38|
000026  4608              MOV      r0,r1                 ;395
                  |L4.40|
000028  eb0302c0          ADD      r2,r3,r0,LSL #3       ;395
00002c  8891              LDRH     r1,[r2,#4]            ;395
00002e  2900              CMP      r1,#0                 ;395
000030  d1ee              BNE      |L4.16|
;;;399        }
;;;400      }
;;;401      /* Check last block */
;;;402      NumFreeBytes = (GUI_ALLOC_SIZE - (aBlock[i].Off+aBlock[i].Size));
000032  f9331030          LDRSH    r1,[r3,r0,LSL #3]
000036  eb0300c0          ADD      r0,r3,r0,LSL #3
00003a  f9b00002          LDRSH    r0,[r0,#2]
00003e  4408              ADD      r0,r0,r1
000040  f5c05020          RSB      r0,r0,#0x2800
000044  b200              SXTH     r0,r0
;;;403      if (NumFreeBytes > r) {
000046  42a0              CMP      r0,r4
000048  dd00              BLE      |L4.76|
;;;404        r = NumFreeBytes;
00004a  4604              MOV      r4,r0
                  |L4.76|
;;;405      }
;;;406      GUI_UNLOCK();
;;;407      return r;
00004c  4620              MOV      r0,r4
;;;408    }
00004e  bd70              POP      {r4-r6,pc}
;;;409    
                          ENDP

                  |L4.80|
                          DCD      ||.bss||+0x2800

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

                  GUI_ALLOC_GetNumFreeBytes PROC
;;;375    */
;;;376    GUI_ALLOC_DATATYPE GUI_ALLOC_GetNumFreeBytes(void) {
000000  b510              PUSH     {r4,lr}
;;;377      _CheckInit();
000002  f7fffffe          BL       _CheckInit
;;;378      return GUI_ALLOC.NumFreeBytes;  
000006  4802              LDR      r0,|L5.16|
000008  f9b0000e          LDRSH    r0,[r0,#0xe]  ; GUI_ALLOC
;;;379    }
00000c  bd10              POP      {r4,pc}
;;;380    
                          ENDP

00000e  0000              DCW      0x0000
                  |L5.16|
                          DCD      ||.bss||+0x3210

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

                  GUI_ALLOC_GetSize PROC
;;;509    */
;;;510    GUI_ALLOC_DATATYPE GUI_ALLOC_GetSize(GUI_HMEM  hMem) {
000000  2800              CMP      r0,#0
;;;511      /* Do the error checking first */
;;;512      #if GUI_DEBUG_LEVEL>0
;;;513        if (!hMem) {
000002  d004              BEQ      |L6.14|
000004  4902              LDR      r1,|L6.16|
000006  eb0100c0          ADD      r0,r1,r0,LSL #3
00000a  f9b00002          LDRSH    r0,[r0,#2]
                  |L6.14|
;;;514          GUI_DEBUG_ERROROUT("\n"__FILE__ " GUI_ALLOC_h2p: illegal argument (0 handle)");
;;;515          return 0;
;;;516        }
;;;517      #endif
;;;518      return _GetSize(hMem);
;;;519    }
00000e  4770              BX       lr
;;;520    
                          ENDP

                  |L6.16|
                          DCD      ||.bss||+0x2800

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

                  GUI_ALLOC_Init PROC
;;;323    */
;;;324    void GUI_ALLOC_Init(void) {
000000  480a              LDR      r0,|L7.44|
;;;325      GUI_DEBUG_LOG("\nGUI_ALLOC_Init...");
;;;326      GUI_ALLOC.NumFreeBlocksMin = GUI_ALLOC.NumFreeBlocks = GUI_MAXBLOCKS-1;
000002  f2401141          MOV      r1,#0x141
000006  6041              STR      r1,[r0,#4]  ; GUI_ALLOC
;;;327      GUI_ALLOC.NumFreeBytesMin  = GUI_ALLOC.NumFreeBytes  = GUI_ALLOC_SIZE;
000008  6081              STR      r1,[r0,#8]  ; GUI_ALLOC
00000a  f44f5120          MOV      r1,#0x2800
00000e  81c1              STRH     r1,[r0,#0xe]
000010  8201              STRH     r1,[r0,#0x10]
;;;328      GUI_ALLOC.NumUsedBlocks = 0;
000012  2100              MOVS     r1,#0
;;;329      GUI_ALLOC.NumUsedBytes = 0;
000014  6001              STR      r1,[r0,#0]  ; GUI_ALLOC
000016  8181              STRH     r1,[r0,#0xc]
;;;330      aBlock[0].Size = (1<<GUI_BLOCK_ALIGN);  /* occupy minimum for a block */
000018  2204              MOVS     r2,#4
00001a  f5a06021          SUB      r0,r0,#0xa10
00001e  8042              STRH     r2,[r0,#2]
;;;331      aBlock[0].Off  = 0;
000020  8001              STRH     r1,[r0,#0]
;;;332      aBlock[0].Next = 0;
000022  8081              STRH     r1,[r0,#4]
;;;333      IsInitialized =1;
000024  4902              LDR      r1,|L7.48|
000026  2001              MOVS     r0,#1
000028  7008              STRB     r0,[r1,#0]
;;;334    }
00002a  4770              BX       lr
;;;335    
                          ENDP

                  |L7.44|
                          DCD      ||.bss||+0x3210
                  |L7.48|
                          DCD      ||.data||

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

                  GUI_ALLOC_h2p PROC
;;;356    */
;;;357    void* GUI_ALLOC_h2p(GUI_HMEM  hMem) {
000000  2800              CMP      r0,#0
;;;358      GUI_ASSERT_LOCK();
;;;359      #if GUI_DEBUG_LEVEL > 0
;;;360        if (!hMem) {
000002  d005              BEQ      |L8.16|
;;;361          GUI_DEBUG_ERROROUT("\n"__FILE__ " GUI_ALLOC_h2p: illegal argument (0 handle)");
;;;362          return 0;
;;;363        }
;;;364        if (aBlock[hMem].Size == 0) {
;;;365          GUI_DEBUG_ERROROUT("Dereferencing free block");
;;;366        }
;;;367    
;;;368      #endif
;;;369      return HMEM2PTR(hMem);
000004  4903              LDR      r1,|L8.20|
000006  f9310030          LDRSH    r0,[r1,r0,LSL #3]
00000a  f5a15120          SUB      r1,r1,#0x2800
00000e  4408              ADD      r0,r0,r1
                  |L8.16|
;;;370    }
000010  4770              BX       lr
;;;371    
                          ENDP

000012  0000              DCW      0x0000
                  |L8.20|
                          DCD      ||.bss||+0x2800

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

                  _Alloc PROC
;;;264    */
;;;265    static GUI_HMEM _Alloc(GUI_ALLOC_DATATYPE size) {
000000  e92d41f0          PUSH     {r4-r8,lr}
000004  4604              MOV      r4,r0
;;;266      GUI_HMEM hMemNew, hMemIns;
;;;267      _CheckInit();
000006  f7fffffe          BL       _CheckInit
;;;268      size = _Size2LegalSize(size);
00000a  1ce4              ADDS     r4,r4,#3
00000c  f0240003          BIC      r0,r4,#3
;;;269      /* Check if memory is available at all ...*/
;;;270      if (size > GUI_ALLOC.NumFreeBytes) {
000010  f8df80e4          LDR      r8,|L9.248|
000014  b204              SXTH     r4,r0                 ;268
000016  f9b8000e          LDRSH    r0,[r8,#0xe]  ; GUI_ALLOC
00001a  42a0              CMP      r0,r4
00001c  db38              BLT      |L9.144|
00001e  2001              MOVS     r0,#1
000020  f44f71a1          MOV      r1,#0x142
000024  f5a86621          SUB      r6,r8,#0xa10
                  |L9.40|
000028  eb0602c0          ADD      r2,r6,r0,LSL #3
00002c  8852              LDRH     r2,[r2,#2]
00002e  b90a              CBNZ     r2,|L9.52|
000030  b205              SXTH     r5,r0
000032  e003              B        |L9.60|
                  |L9.52|
000034  1c40              ADDS     r0,r0,#1
000036  4288              CMP      r0,r1
000038  dbf6              BLT      |L9.40|
00003a  2500              MOVS     r5,#0
                  |L9.60|
;;;271        GUI_DEBUG_WARN1("GUI_ALLOC_Alloc: Insufficient memory configured (Trying to alloc % bytes)", size);
;;;272        return 0;
;;;273      }
;;;274      /* Locate free handle */
;;;275      if ((hMemNew = _FindFreeHandle()) == 0)
00003c  b345              CBZ      r5,|L9.144|
00003e  2000              MOVS     r0,#0
000040  e00b              B        |L9.90|
000042  bf00              NOP      

⌨️ 快捷键说明

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