📄 os_mem.txt
字号:
000160 e1a00005 MOV r0,r5 ;143
000164 eaffffef B |L1.296| ;143
|L1.360|
000168 ef000003 SVC 0x3 ; formerly SWI ;145
00016c e3a00071 MOV r0,#0x71 ;146
000170 e5c60000 STRB r0,[r6,#0] ;146
000174 e3a00000 MOV r0,#0 ;147
000178 eaffffea B |L1.296| ;147
ENDP
OSMemPut PROC
;;;168 INT8U OSMemPut (OS_MEM *pmem, void *pblk)
;;;169 {
00017c e92d4070 PUSH {r4-r6,lr}
000180 e1a05000 MOV r5,r0
000184 e1a04001 MOV r4,r1
;;;170 #if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */
;;;171 OS_CPU_SR cpu_sr;
;;;172 #endif
;;;173
;;;174
;;;175 #if OS_ARG_CHK_EN > 0
;;;176 if (pmem == (OS_MEM *)0) { /* Must point to a valid memory partition */
000188 e3550000 CMP r5,#0
00018c 1a000001 BNE |L1.408|
;;;177 return (OS_MEM_INVALID_PMEM);
000190 e3a00074 MOV r0,#0x74
;;;178 }
;;;179 if (pblk == (void *)0) { /* Must release a valid block */
;;;180 return (OS_MEM_INVALID_PBLK);
;;;181 }
;;;182 #endif
;;;183 OS_ENTER_CRITICAL();
;;;184 if (pmem->OSMemNFree >= pmem->OSMemNBlks) { /* Make sure all blocks not already returned */
;;;185 OS_EXIT_CRITICAL();
;;;186 return (OS_MEM_FULL);
;;;187 }
;;;188 *(void **)pblk = pmem->OSMemFreeList; /* Insert released block into free block list */
;;;189 pmem->OSMemFreeList = pblk;
;;;190 pmem->OSMemNFree++; /* One more memory block in this partition */
;;;191 OS_EXIT_CRITICAL();
;;;192 return (OS_NO_ERR); /* Notify caller that memory block was released */
;;;193 }
|L1.404|
000194 e8bd8070 POP {r4-r6,pc}
|L1.408|
000198 e3540000 CMP r4,#0 ;179
00019c 1a000001 BNE |L1.424| ;179
0001a0 e3a00073 MOV r0,#0x73 ;180
0001a4 eafffffa B |L1.404| ;180
|L1.424|
0001a8 ef000002 SVC 0x2 ; formerly SWI ;183
0001ac e5950010 LDR r0,[r5,#0x10] ;184
0001b0 e595100c LDR r1,[r5,#0xc] ;184
0001b4 e1500001 CMP r0,r1 ;184
0001b8 3a000002 BCC |L1.456| ;184
0001bc ef000003 SVC 0x3 ; formerly SWI ;185
0001c0 e3a00072 MOV r0,#0x72 ;186
0001c4 eafffff2 B |L1.404| ;186
|L1.456|
0001c8 e5950004 LDR r0,[r5,#4] ;188
0001cc e5840000 STR r0,[r4,#0] ;188
0001d0 e5854004 STR r4,[r5,#4] ;189
0001d4 e5950010 LDR r0,[r5,#0x10] ;190
0001d8 e2800001 ADD r0,r0,#1 ;190
0001dc e5850010 STR r0,[r5,#0x10] ;190
0001e0 ef000003 SVC 0x3 ; formerly SWI ;191
0001e4 e3a00000 MOV r0,#0 ;192
0001e8 eaffffe9 B |L1.404| ;192
ENDP
OSMemQuery PROC
;;;214 INT8U OSMemQuery (OS_MEM *pmem, OS_MEM_DATA *pdata)
;;;215 {
0001ec e92d4070 PUSH {r4-r6,lr}
0001f0 e1a04000 MOV r4,r0
0001f4 e1a05001 MOV r5,r1
;;;216 #if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */
;;;217 OS_CPU_SR cpu_sr;
;;;218 #endif
;;;219
;;;220
;;;221 #if OS_ARG_CHK_EN > 0
;;;222 if (pmem == (OS_MEM *)0) { /* Must point to a valid memory partition */
0001f8 e3540000 CMP r4,#0
0001fc 1a000001 BNE |L1.520|
;;;223 return (OS_MEM_INVALID_PMEM);
000200 e3a00074 MOV r0,#0x74
;;;224 }
;;;225 if (pdata == (OS_MEM_DATA *)0) { /* Must release a valid storage area for the data */
;;;226 return (OS_MEM_INVALID_PDATA);
;;;227 }
;;;228 #endif
;;;229 OS_ENTER_CRITICAL();
;;;230 pdata->OSAddr = pmem->OSMemAddr;
;;;231 pdata->OSFreeList = pmem->OSMemFreeList;
;;;232 pdata->OSBlkSize = pmem->OSMemBlkSize;
;;;233 pdata->OSNBlks = pmem->OSMemNBlks;
;;;234 pdata->OSNFree = pmem->OSMemNFree;
;;;235 OS_EXIT_CRITICAL();
;;;236 pdata->OSNUsed = pdata->OSNBlks - pdata->OSNFree;
;;;237 return (OS_NO_ERR);
;;;238 }
|L1.516|
000204 e8bd8070 POP {r4-r6,pc}
|L1.520|
000208 e3550000 CMP r5,#0 ;225
00020c 1a000001 BNE |L1.536| ;225
000210 e3a00075 MOV r0,#0x75 ;226
000214 eafffffa B |L1.516| ;226
|L1.536|
000218 ef000002 SVC 0x2 ; formerly SWI ;229
00021c e5940000 LDR r0,[r4,#0] ;230
000220 e5850000 STR r0,[r5,#0] ;230
000224 e5940004 LDR r0,[r4,#4] ;231
000228 e5850004 STR r0,[r5,#4] ;231
00022c e5940008 LDR r0,[r4,#8] ;232
000230 e5850008 STR r0,[r5,#8] ;232
000234 e594000c LDR r0,[r4,#0xc] ;233
000238 e585000c STR r0,[r5,#0xc] ;233
00023c e5940010 LDR r0,[r4,#0x10] ;234
000240 e5850010 STR r0,[r5,#0x10] ;234
000244 ef000003 SVC 0x3 ; formerly SWI ;235
000248 e285100c ADD r1,r5,#0xc ;236
00024c e8910003 LDM r1,{r0,r1} ;236
000250 e0400001 SUB r0,r0,r1 ;236
000254 e5850014 STR r0,[r5,#0x14] ;236
000258 e3a00000 MOV r0,#0 ;237
00025c eaffffe8 B |L1.516| ;237
ENDP
OS_MemInit PROC
;;;271
;;;272 pmem = (OS_MEM *)&OSMemTbl[0]; /* Point to memory control block (MCB) */
000260 e59f106c LDR r1,|L1.724|
;;;273 for (i = 0; i < (OS_MAX_MEM_PART - 1); i++) { /* Init. list of free memory partitions */
000264 e3a00000 MOV r0,#0
000268 ea00000c B |L1.672|
;;;274 pmem->OSMemFreeList = (void *)&OSMemTbl[i+1]; /* Chain list of free partitions */
|L1.620|
00026c e2802001 ADD r2,r0,#1
000270 e0822102 ADD r2,r2,r2,LSL #2
000274 e59f3058 LDR r3,|L1.724|
000278 e0832102 ADD r2,r3,r2,LSL #2
00027c e5812004 STR r2,[r1,#4]
;;;275 pmem->OSMemAddr = (void *)0; /* Store start address of memory partition */
000280 e3a02000 MOV r2,#0
000284 e5812000 STR r2,[r1,#0]
;;;276 pmem->OSMemNFree = 0; /* No free blocks */
000288 e5812010 STR r2,[r1,#0x10]
;;;277 pmem->OSMemNBlks = 0; /* No blocks */
00028c e581200c STR r2,[r1,#0xc]
;;;278 pmem->OSMemBlkSize = 0; /* Zero size */
000290 e5812008 STR r2,[r1,#8]
;;;279 pmem++;
000294 e2811014 ADD r1,r1,#0x14
000298 e2802001 ADD r2,r0,#1 ;273
00029c e3c20801 BIC r0,r2,#0x10000 ;273
|L1.672|
0002a0 e3500004 CMP r0,#4 ;273
0002a4 bafffff0 BLT |L1.620| ;273
;;;280 }
;;;281 pmem->OSMemFreeList = (void *)0; /* Initialize last node */
0002a8 e3a02000 MOV r2,#0
0002ac e5812004 STR r2,[r1,#4]
;;;282 pmem->OSMemAddr = (void *)0; /* Store start address of memory partition */
0002b0 e5812000 STR r2,[r1,#0]
;;;283 pmem->OSMemNFree = 0; /* No free blocks */
0002b4 e5812010 STR r2,[r1,#0x10]
;;;284 pmem->OSMemNBlks = 0; /* No blocks */
0002b8 e581200c STR r2,[r1,#0xc]
;;;285 pmem->OSMemBlkSize = 0; /* Zero size */
0002bc e5812008 STR r2,[r1,#8]
;;;286
;;;287 OSMemFreeList = (OS_MEM *)&OSMemTbl[0]; /* Point to beginning of free list */
0002c0 e59f200c LDR r2,|L1.724|
0002c4 e59f3004 LDR r3,|L1.720|
0002c8 e5832000 STR r2,[r3,#0] ; OSMemFreeList
;;;288 #endif
;;;289 }
0002cc e12fff1e BX lr
|L1.720|
0002d0 00000000 DCD OSMemFreeList
|L1.724|
0002d4 00000000 DCD OSMemTbl
ENDP
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -