📄 os_mem.txt
字号:
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 + -