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

📄 os_mem.txt

📁 一个电力系统谐波检测的程序
💻 TXT
📖 第 1 页 / 共 2 页
字号:
000164  ef000003          SVC      0x3  ; formerly SWI   ;143
000168  e3a00071          MOV      r0,#0x71              ;144
00016c  e5c60000          STRB     r0,[r6,#0]            ;144
000170  e3a00000          MOV      r0,#0                 ;145
000174  eaffffe9          B        |L1.288|              ;145
                          ENDP

                  OSMemPut PROC
;;;166    INT8U  OSMemPut (OS_MEM  *pmem, void *pblk)
;;;167    {
000178  e92d4070          PUSH     {r4-r6,lr}
00017c  e1a05000          MOV      r5,r0
000180  e1a04001          MOV      r4,r1
;;;168    #if OS_CRITICAL_METHOD == 3                      /* Allocate storage for CPU status register           */
;;;169        OS_CPU_SR  cpu_sr;
;;;170    #endif    
;;;171        
;;;172        
;;;173    #if OS_ARG_CHK_EN > 0
;;;174        if (pmem == (OS_MEM *)0) {                   /* Must point to a valid memory partition             */
000184  e3550000          CMP      r5,#0
000188  1a000002          BNE      |L1.408|
;;;175            return (OS_MEM_INVALID_PMEM);
00018c  e3a00074          MOV      r0,#0x74
                  |L1.400|
000190  e8bd4070          POP      {r4-r6,lr}
;;;176        }
;;;177        if (pblk == (void *)0) {                     /* Must release a valid block                         */
;;;178            return (OS_MEM_INVALID_PBLK);
;;;179        }
;;;180    #endif
;;;181        OS_ENTER_CRITICAL();
;;;182        if (pmem->OSMemNFree >= pmem->OSMemNBlks) {  /* Make sure all blocks not already returned          */
;;;183            OS_EXIT_CRITICAL();
;;;184            return (OS_MEM_FULL);
;;;185        }
;;;186        *(void **)pblk      = pmem->OSMemFreeList;   /* Insert released block into free block list         */
;;;187        pmem->OSMemFreeList = pblk;
;;;188        pmem->OSMemNFree++;                          /* One more memory block in this partition            */
;;;189        OS_EXIT_CRITICAL();
;;;190        return (OS_NO_ERR);                          /* Notify caller that memory block was released       */
;;;191    }
000194  e12fff1e          BX       lr
                  |L1.408|
000198  e3540000          CMP      r4,#0                 ;177
00019c  1a000001          BNE      |L1.424|              ;177
0001a0  e3a00073          MOV      r0,#0x73              ;178
0001a4  eafffff9          B        |L1.400|              ;178
                  |L1.424|
0001a8  ef000002          SVC      0x2  ; formerly SWI   ;181
0001ac  e5950010          LDR      r0,[r5,#0x10]         ;182
0001b0  e595100c          LDR      r1,[r5,#0xc]          ;182
0001b4  e1500001          CMP      r0,r1                 ;182
0001b8  3a000002          BCC      |L1.456|              ;182
0001bc  ef000003          SVC      0x3  ; formerly SWI   ;183
0001c0  e3a00072          MOV      r0,#0x72              ;184
0001c4  eafffff1          B        |L1.400|              ;184
                  |L1.456|
0001c8  e5950004          LDR      r0,[r5,#4]            ;186
0001cc  e5840000          STR      r0,[r4,#0]            ;186
0001d0  e5854004          STR      r4,[r5,#4]            ;187
0001d4  e5950010          LDR      r0,[r5,#0x10]         ;188
0001d8  e2800001          ADD      r0,r0,#1              ;188
0001dc  e5850010          STR      r0,[r5,#0x10]         ;188
0001e0  ef000003          SVC      0x3  ; formerly SWI   ;189
0001e4  e3a00000          MOV      r0,#0                 ;190
0001e8  eaffffe8          B        |L1.400|              ;190
                          ENDP

                  OSMemQuery PROC
;;;212    INT8U  OSMemQuery (OS_MEM *pmem, OS_MEM_DATA *pdata)
;;;213    {
0001ec  e92d4070          PUSH     {r4-r6,lr}
0001f0  e1a04000          MOV      r4,r0
0001f4  e1a05001          MOV      r5,r1
;;;214    #if OS_CRITICAL_METHOD == 3                      /* Allocate storage for CPU status register           */
;;;215        OS_CPU_SR  cpu_sr;
;;;216    #endif    
;;;217        
;;;218        
;;;219    #if OS_ARG_CHK_EN > 0
;;;220        if (pmem == (OS_MEM *)0) {                   /* Must point to a valid memory partition             */
0001f8  e3540000          CMP      r4,#0
0001fc  1a000002          BNE      |L1.524|
;;;221            return (OS_MEM_INVALID_PMEM);
000200  e3a00074          MOV      r0,#0x74
                  |L1.516|
000204  e8bd4070          POP      {r4-r6,lr}
;;;222        }
;;;223        if (pdata == (OS_MEM_DATA *)0) {             /* Must release a valid storage area for the data     */
;;;224            return (OS_MEM_INVALID_PDATA);
;;;225        }
;;;226    #endif
;;;227        OS_ENTER_CRITICAL();
;;;228        pdata->OSAddr     = pmem->OSMemAddr;
;;;229        pdata->OSFreeList = pmem->OSMemFreeList;
;;;230        pdata->OSBlkSize  = pmem->OSMemBlkSize;
;;;231        pdata->OSNBlks    = pmem->OSMemNBlks;
;;;232        pdata->OSNFree    = pmem->OSMemNFree;
;;;233        OS_EXIT_CRITICAL();
;;;234        pdata->OSNUsed    = pdata->OSNBlks - pdata->OSNFree;
;;;235        return (OS_NO_ERR);
;;;236    }
000208  e12fff1e          BX       lr
                  |L1.524|
00020c  e3550000          CMP      r5,#0                 ;223
000210  1a000001          BNE      |L1.540|              ;223
000214  e3a00075          MOV      r0,#0x75              ;224
000218  eafffff9          B        |L1.516|              ;224
                  |L1.540|
00021c  ef000002          SVC      0x2  ; formerly SWI   ;227
000220  e5940000          LDR      r0,[r4,#0]            ;228
000224  e5850000          STR      r0,[r5,#0]            ;228
000228  e5940004          LDR      r0,[r4,#4]            ;229
00022c  e5850004          STR      r0,[r5,#4]            ;229
000230  e5940008          LDR      r0,[r4,#8]            ;230
000234  e5850008          STR      r0,[r5,#8]            ;230
000238  e594000c          LDR      r0,[r4,#0xc]          ;231
00023c  e585000c          STR      r0,[r5,#0xc]          ;231
000240  e5940010          LDR      r0,[r4,#0x10]         ;232
000244  e5850010          STR      r0,[r5,#0x10]         ;232
000248  ef000003          SVC      0x3  ; formerly SWI   ;233
00024c  e285100c          ADD      r1,r5,#0xc            ;234
000250  e8910003          LDM      r1,{r0,r1}            ;234
000254  e0400001          SUB      r0,r0,r1              ;234
000258  e5850014          STR      r0,[r5,#0x14]         ;234
00025c  e3a00000          MOV      r0,#0                 ;235
000260  eaffffe7          B        |L1.516|              ;235
                          ENDP

                  OS_MemInit PROC
;;;269    
;;;270        pmem = (OS_MEM *)&OSMemTbl[0];                    /* Point to memory control block (MCB)           */
000264  e59f106c          LDR      r1,|L1.728|
;;;271        for (i = 0; i < (OS_MAX_MEM_PART - 1); i++) {     /* Init. list of free memory partitions          */
000268  e3a00000          MOV      r0,#0
00026c  ea00000c          B        |L1.676|
;;;272            pmem->OSMemFreeList = (void *)&OSMemTbl[i+1]; /* Chain list of free partitions                 */
                  |L1.624|
000270  e2802001          ADD      r2,r0,#1
000274  e0822102          ADD      r2,r2,r2,LSL #2
000278  e59f3058          LDR      r3,|L1.728|
00027c  e0832102          ADD      r2,r3,r2,LSL #2
000280  e5812004          STR      r2,[r1,#4]
;;;273            pmem->OSMemAddr     = (void *)0;              /* Store start address of memory partition       */
000284  e3a02000          MOV      r2,#0
000288  e5812000          STR      r2,[r1,#0]
;;;274            pmem->OSMemNFree    = 0;                      /* No free blocks                                */
00028c  e5812010          STR      r2,[r1,#0x10]
;;;275            pmem->OSMemNBlks    = 0;                      /* No blocks                                     */
000290  e581200c          STR      r2,[r1,#0xc]
;;;276            pmem->OSMemBlkSize  = 0;                      /* Zero size                                     */
000294  e5812008          STR      r2,[r1,#8]
;;;277            pmem++;
000298  e2811014          ADD      r1,r1,#0x14
00029c  e2802001          ADD      r2,r0,#1              ;271
0002a0  e3c20801          BIC      r0,r2,#0x10000        ;271
                  |L1.676|
0002a4  e3500004          CMP      r0,#4                 ;271
0002a8  bafffff0          BLT      |L1.624|              ;271
;;;278        }
;;;279        pmem->OSMemFreeList = (void *)0;                  /* Initialize last node                          */
0002ac  e3a02000          MOV      r2,#0
0002b0  e5812004          STR      r2,[r1,#4]
;;;280        pmem->OSMemAddr     = (void *)0;                  /* Store start address of memory partition       */
0002b4  e5812000          STR      r2,[r1,#0]
;;;281        pmem->OSMemNFree    = 0;                          /* No free blocks                                */
0002b8  e5812010          STR      r2,[r1,#0x10]
;;;282        pmem->OSMemNBlks    = 0;                          /* No blocks                                     */
0002bc  e581200c          STR      r2,[r1,#0xc]
;;;283        pmem->OSMemBlkSize  = 0;                          /* Zero size                                     */
0002c0  e5812008          STR      r2,[r1,#8]
;;;284    
;;;285        OSMemFreeList       = (OS_MEM *)&OSMemTbl[0];     /* Point to beginning of free list               */
0002c4  e59f200c          LDR      r2,|L1.728|
0002c8  e59f3004          LDR      r3,|L1.724|
0002cc  e5832000          STR      r2,[r3,#0]  ; OSMemFreeList
;;;286    #endif
;;;287    }
0002d0  e12fff1e          BX       lr
                  |L1.724|
0002d4  00000000          DCD      OSMemFreeList
                  |L1.728|
0002d8  00000000          DCD      OSMemTbl
                          ENDP


⌨️ 快捷键说明

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