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

📄 guialloc.txt

📁 STM32F103ZET6+UCOSII+UCGUI源码
💻 TXT
📖 第 1 页 / 共 2 页
字号:
                  |L9.68|
000044  f9363030          LDRSH    r3,[r6,r0,LSL #3]
000048  f9b22002          LDRSH    r2,[r2,#2]
00004c  f9367031          LDRSH    r7,[r6,r1,LSL #3]
000050  441a              ADD      r2,r2,r3
000052  1aba              SUBS     r2,r7,r2
000054  42a2              CMP      r2,r4
000056  da10              BGE      |L9.122|
000058  4608              MOV      r0,r1
                  |L9.90|
00005a  eb0602c0          ADD      r2,r6,r0,LSL #3
00005e  8891              LDRH     r1,[r2,#4]
000060  2900              CMP      r1,#0
000062  d1ef              BNE      |L9.68|
000064  eb0602c0          ADD      r2,r6,r0,LSL #3
000068  f9361030          LDRSH    r1,[r6,r0,LSL #3]
00006c  f9b22002          LDRSH    r2,[r2,#2]
000070  4411              ADD      r1,r1,r2
000072  f5c15120          RSB      r1,r1,#0x2800
000076  42a1              CMP      r1,r4
000078  db01              BLT      |L9.126|
                  |L9.122|
00007a  b200              SXTH     r0,r0
00007c  e001              B        |L9.130|
                  |L9.126|
00007e  f04f30ff          MOV      r0,#0xffffffff
                  |L9.130|
;;;276        return 0;
;;;277      /* Locate or Create hole of sufficient size */
;;;278      hMemIns = _FindHole(size);
;;;279      #if GUI_ALLOC_AUTDEFRAG
;;;280        if (hMemIns == -1) {
000082  1c41              ADDS     r1,r0,#1
000084  d107              BNE      |L9.150|
;;;281          hMemIns = _CreateHole(size);
000086  4620              MOV      r0,r4
000088  f7fffffe          BL       _CreateHole
;;;282        }
;;;283      #endif
;;;284      /* Occupy hole */
;;;285      if (hMemIns==-1) {
00008c  1c41              ADDS     r1,r0,#1
00008e  d102              BNE      |L9.150|
                  |L9.144|
;;;286        GUI_DEBUG_ERROROUT1("GUI_ALLOC_Alloc: Could not allocate %d bytes",size);
;;;287        return 0;
000090  2000              MOVS     r0,#0
                  |L9.146|
;;;288    	}
;;;289      {
;;;290        GUI_ALLOC_DATATYPE Off = aBlock[hMemIns].Off + aBlock[hMemIns].Size;
;;;291        int Next = aBlock[hMemIns].Next;
;;;292        aBlock[hMemNew].Size  = size;
;;;293        aBlock[hMemNew].Off   = Off;
;;;294        if ((aBlock[hMemNew].Next  = Next) >0) {
;;;295          aBlock[Next].Prev = hMemNew;  
;;;296        }
;;;297        aBlock[hMemNew].Prev  = hMemIns;
;;;298        aBlock[hMemIns].Next  = hMemNew;
;;;299      }
;;;300      /* Keep track of number of blocks and av. memory */
;;;301      GUI_ALLOC.NumUsedBlocks++;
;;;302      GUI_ALLOC.NumFreeBlocks--;
;;;303      if (GUI_ALLOC.NumFreeBlocksMin > GUI_ALLOC.NumFreeBlocks) {
;;;304        GUI_ALLOC.NumFreeBlocksMin = GUI_ALLOC.NumFreeBlocks;
;;;305      }
;;;306      GUI_ALLOC.NumUsedBytes += size;
;;;307      GUI_ALLOC.NumFreeBytes -= size;
;;;308      if (GUI_ALLOC.NumFreeBytesMin > GUI_ALLOC.NumFreeBytes) {
;;;309        GUI_ALLOC.NumFreeBytesMin = GUI_ALLOC.NumFreeBytes;
;;;310      }
;;;311      return hMemNew;
;;;312    }
000092  e8bd81f0          POP      {r4-r8,pc}
                  |L9.150|
000096  eb0607c0          ADD      r7,r6,r0,LSL #3       ;290
00009a  f8361030          LDRH     r1,[r6,r0,LSL #3]     ;290
00009e  887b              LDRH     r3,[r7,#2]            ;290
0000a0  88ba              LDRH     r2,[r7,#4]            ;291
0000a2  440b              ADD      r3,r3,r1              ;290
0000a4  eb0601c5          ADD      r1,r6,r5,LSL #3       ;292
0000a8  804c              STRH     r4,[r1,#2]            ;292
0000aa  f8263035          STRH     r3,[r6,r5,LSL #3]     ;293
0000ae  808a              STRH     r2,[r1,#4]            ;294
0000b0  b112              CBZ      r2,|L9.184|
0000b2  eb0602c2          ADD      r2,r6,r2,LSL #3       ;295
0000b6  80d5              STRH     r5,[r2,#6]            ;295
                  |L9.184|
0000b8  80c8              STRH     r0,[r1,#6]            ;297
0000ba  80bd              STRH     r5,[r7,#4]            ;298
0000bc  f8d80000          LDR      r0,[r8,#0]            ;301  ; GUI_ALLOC
0000c0  4641              MOV      r1,r8                 ;301
0000c2  1c40              ADDS     r0,r0,#1              ;301
0000c4  f8c80000          STR      r0,[r8,#0]            ;302  ; GUI_ALLOC
0000c8  f8d80004          LDR      r0,[r8,#4]            ;302  ; GUI_ALLOC
0000cc  1e40              SUBS     r0,r0,#1              ;302
0000ce  f8c80004          STR      r0,[r8,#4]            ;303  ; GUI_ALLOC
0000d2  f8d82008          LDR      r2,[r8,#8]            ;303  ; GUI_ALLOC
0000d6  4282              CMP      r2,r0                 ;303
0000d8  dd00              BLE      |L9.220|
0000da  6088              STR      r0,[r1,#8]            ;304  ; GUI_ALLOC
                  |L9.220|
0000dc  8988              LDRH     r0,[r1,#0xc]          ;306  ; GUI_ALLOC
0000de  4420              ADD      r0,r0,r4              ;306
0000e0  8188              STRH     r0,[r1,#0xc]          ;306
0000e2  89c8              LDRH     r0,[r1,#0xe]          ;307  ; GUI_ALLOC
0000e4  1b00              SUBS     r0,r0,r4              ;307
0000e6  b200              SXTH     r0,r0                 ;307
0000e8  81c8              STRH     r0,[r1,#0xe]          ;307
0000ea  f9b12010          LDRSH    r2,[r1,#0x10]         ;308  ; GUI_ALLOC
0000ee  4282              CMP      r2,r0                 ;308
0000f0  dd00              BLE      |L9.244|
0000f2  8208              STRH     r0,[r1,#0x10]         ;309
                  |L9.244|
0000f4  4628              MOV      r0,r5                 ;311
0000f6  e7cc              B        |L9.146|
;;;313    
                          ENDP

                  |L9.248|
                          DCD      ||.bss||+0x3210

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

                  _CheckInit PROC
;;;254    */
;;;255    static void _CheckInit(void) {
000000  4803              LDR      r0,|L10.16|
;;;256      if (!IsInitialized) {
000002  7800              LDRB     r0,[r0,#0]  ; IsInitialized
000004  2800              CMP      r0,#0
000006  d101              BNE      |L10.12|
;;;257        GUI_ALLOC_Init();
000008  f7ffbffe          B.W      GUI_ALLOC_Init
                  |L10.12|
;;;258      }
;;;259    }
00000c  4770              BX       lr
;;;260    
                          ENDP

00000e  0000              DCW      0x0000
                  |L10.16|
                          DCD      ||.data||

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

                  _CreateHole PROC
;;;229    */
;;;230    static GUI_HMEM _CreateHole(GUI_ALLOC_DATATYPE Size) {
000000  e92d41f0          PUSH     {r4-r8,lr}
000004  4680              MOV      r8,r0
;;;231      int i, iNext;
;;;232      int r = -1;
000006  f04f37ff          MOV      r7,#0xffffffff
;;;233      for (i=0; (iNext =aBlock[i].Next) !=0; i= iNext) {
00000a  2000              MOVS     r0,#0
;;;234        GUI_ALLOC_DATATYPE NumFreeBytes = aBlock[iNext].Off- (aBlock[i].Off+aBlock[i].Size);
00000c  4e17              LDR      r6,|L11.108|
00000e  e019              B        |L11.68|
                  |L11.16|
000010  f8362030          LDRH     r2,[r6,r0,LSL #3]
000014  8849              LDRH     r1,[r1,#2]
000016  f9360034          LDRSH    r0,[r6,r4,LSL #3]
00001a  4411              ADD      r1,r1,r2
00001c  1a41              SUBS     r1,r0,r1
00001e  b20d              SXTH     r5,r1
;;;235        if (NumFreeBytes < Size) {
000020  4545              CMP      r5,r8
000022  da0e              BGE      |L11.66|
;;;236          GUI_ALLOC_DATATYPE NumBytesBeforeBlock = aBlock[iNext].Off - (aBlock[i].Off+aBlock[i].Size);
;;;237          if (NumBytesBeforeBlock) {
000024  b16d              CBZ      r5,|L11.66|
;;;238            U8* pData = &GUI_Heap.abHeap[aBlock[iNext].Off];
000026  4912              LDR      r1,|L11.112|
000028  4401              ADD      r1,r1,r0
;;;239            memmove(pData-NumBytesBeforeBlock, pData, aBlock[iNext].Size);
00002a  eb0600c4          ADD      r0,r6,r4,LSL #3
00002e  f9b02002          LDRSH    r2,[r0,#2]
000032  1b48              SUBS     r0,r1,r5
000034  f7fffffe          BL       __aeabi_memmove
;;;240            aBlock[iNext].Off -=NumBytesBeforeBlock;
000038  f8360034          LDRH     r0,[r6,r4,LSL #3]
00003c  1b40              SUBS     r0,r0,r5
00003e  f8260034          STRH     r0,[r6,r4,LSL #3]
                  |L11.66|
000042  4620              MOV      r0,r4                 ;233
                  |L11.68|
000044  eb0601c0          ADD      r1,r6,r0,LSL #3       ;233
000048  888c              LDRH     r4,[r1,#4]            ;233
00004a  2c00              CMP      r4,#0                 ;233
00004c  d1e0              BNE      |L11.16|
;;;241          }
;;;242        }
;;;243      }
;;;244      /* Check last block */
;;;245      if (GUI_ALLOC_SIZE - (aBlock[i].Off+aBlock[i].Size) >= Size) {
00004e  eb0601c0          ADD      r1,r6,r0,LSL #3
000052  f9362030          LDRSH    r2,[r6,r0,LSL #3]
000056  f9b13002          LDRSH    r3,[r1,#2]
00005a  441a              ADD      r2,r2,r3
00005c  f5c25220          RSB      r2,r2,#0x2800
000060  4542              CMP      r2,r8
000062  db00              BLT      |L11.102|
;;;246        r = i;
000064  4607              MOV      r7,r0
                  |L11.102|
;;;247      }
;;;248      return r;
000066  b238              SXTH     r0,r7
;;;249    }
000068  e8bd81f0          POP      {r4-r8,pc}
;;;250    
                          ENDP

                  |L11.108|
                          DCD      ||.bss||+0x2800
                  |L11.112|
                          DCD      ||.bss||

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

                  _Free PROC
;;;151    */
;;;152    static void _Free(GUI_HMEM hMem) {
000000  4a10              LDR      r2,|L12.68|
000002  b510              PUSH     {r4,lr}
;;;153      GUI_ALLOC_DATATYPE Size;
;;;154      GUI_DEBUG_LOG1("\nGUI_ALLOC_Free(%d)", hMem);
;;;155      /* Do some error checking ... */
;;;156      #if GUI_DEBUG_LEVEL>0
;;;157        /* Block not allocated ? */
;;;158        if (aBlock[hMem].Size == 0) {
000004  eb0200c0          ADD      r0,r2,r0,LSL #3
000008  f9b01002          LDRSH    r1,[r0,#2]
00000c  2900              CMP      r1,#0
00000e  d018              BEQ      |L12.66|
;;;159          GUI_DEBUG_ERROROUT("GUI_ALLOC_Free(): Invalid hMem");
;;;160          return;
;;;161        }
;;;162      #endif
;;;163      Size = aBlock[hMem].Size;
;;;164      #ifdef WIN32
;;;165        GUI_MEMSET(&GUI_Heap.abHeap[aBlock[hMem].Off], 0xcc, Size);
;;;166      #endif
;;;167      GUI_ALLOC.NumFreeBytes += Size;
000010  f5026321          ADD      r3,r2,#0xa10
000014  89dc              LDRH     r4,[r3,#0xe]  ; GUI_ALLOC
000016  440c              ADD      r4,r4,r1
000018  81dc              STRH     r4,[r3,#0xe]
;;;168      GUI_ALLOC.NumUsedBytes -= Size;
00001a  899c              LDRH     r4,[r3,#0xc]  ; GUI_ALLOC
00001c  1a61              SUBS     r1,r4,r1
00001e  8199              STRH     r1,[r3,#0xc]
;;;169      aBlock[hMem].Size = 0;
000020  2100              MOVS     r1,#0
000022  8041              STRH     r1,[r0,#2]
;;;170      {
;;;171        int Next = aBlock[hMem].Next;
000024  8881              LDRH     r1,[r0,#4]
;;;172        int Prev = aBlock[hMem].Prev;
000026  88c0              LDRH     r0,[r0,#6]
;;;173        aBlock[Prev].Next = Next;
000028  eb0204c0          ADD      r4,r2,r0,LSL #3
00002c  80a1              STRH     r1,[r4,#4]
;;;174        if (Next) {
00002e  b111              CBZ      r1,|L12.54|
;;;175          aBlock[Next].Prev = Prev;
000030  eb0201c1          ADD      r1,r2,r1,LSL #3
000034  80c8              STRH     r0,[r1,#6]
                  |L12.54|
;;;176        }
;;;177      }  
;;;178      GUI_ALLOC.NumFreeBlocks++;
000036  6858              LDR      r0,[r3,#4]  ; GUI_ALLOC
000038  1c40              ADDS     r0,r0,#1
;;;179      GUI_ALLOC.NumUsedBlocks--;
00003a  6058              STR      r0,[r3,#4]  ; GUI_ALLOC
00003c  6818              LDR      r0,[r3,#0]  ; GUI_ALLOC
00003e  1e40              SUBS     r0,r0,#1
;;;180    }
000040  6018              STR      r0,[r3,#0]  ; GUI_ALLOC
                  |L12.66|
000042  bd10              POP      {r4,pc}
;;;181    
                          ENDP

                  |L12.68|
                          DCD      ||.bss||+0x2800

                          AREA ||.bss||, DATA, NOINIT, ALIGN=2

                  GUI_Heap
                          %        10240
                  aBlock
                          %        2576
                  GUI_ALLOC
                          %        20

                          AREA ||.data||, DATA, ALIGN=0

                  IsInitialized
000000  00                DCB      0x00

⌨️ 快捷键说明

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