📄 os_mem.lst
字号:
\ ??OSMemPut_1:
\ 00000070 3080BDE8 POP {R4,R5,PC} ;; return
335 }
336 /*$PAGE*/
337 /*
338 *********************************************************************************************************
339 * QUERY MEMORY PARTITION
340 *
341 * Description : This function is used to determine the number of free memory blocks and the number of
342 * used memory blocks from a memory partition.
343 *
344 * Arguments : pmem is a pointer to the memory partition control block
345 *
346 * p_mem_data is a pointer to a structure that will contain information about the memory
347 * partition.
348 *
349 * Returns : OS_ERR_NONE if no errors were found.
350 * OS_ERR_MEM_INVALID_PMEM if you passed a NULL pointer for 'pmem'
351 * OS_ERR_MEM_INVALID_PDATA if you passed a NULL pointer to the data recipient.
352 *********************************************************************************************************
353 */
354
355 #if OS_MEM_QUERY_EN > 0
\ In segment CODE, align 4, keep-with-next
356 INT8U OSMemQuery (OS_MEM *pmem, OS_MEM_DATA *p_mem_data)
357 {
\ OSMemQuery:
\ 00000000 30402DE9 PUSH {R4,R5,LR}
\ 00000004 0050B0E1 MOVS R5,R0
\ 00000008 0140B0E1 MOVS R4,R1
358 #if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */
359 OS_CPU_SR cpu_sr = 0;
\ 0000000C 0000A0E3 MOV R0,#+0
360 #endif
361
362
363
364 #if OS_ARG_CHK_EN > 0
365 if (pmem == (OS_MEM *)0) { /* Must point to a valid memory partition */
\ 00000010 000055E3 CMP R5,#+0
\ 00000014 0100001A BNE ??OSMemQuery_0
366 return (OS_ERR_MEM_INVALID_PMEM);
\ 00000018 6000A0E3 MOV R0,#+96
\ 0000001C 140000EA B ??OSMemQuery_1
367 }
368 if (p_mem_data == (OS_MEM_DATA *)0) { /* Must release a valid storage area for the data */
\ ??OSMemQuery_0:
\ 00000020 000054E3 CMP R4,#+0
\ 00000024 0100001A BNE ??OSMemQuery_2
369 return (OS_ERR_MEM_INVALID_PDATA);
\ 00000028 6100A0E3 MOV R0,#+97
\ 0000002C 100000EA B ??OSMemQuery_1
370 }
371 #endif
372 OS_ENTER_CRITICAL();
\ ??OSMemQuery_2:
\ 00000030 ........ _BLF OS_CPU_SR_Save,??OS_CPU_SR_Save??rA
373 p_mem_data->OSAddr = pmem->OSMemAddr;
\ 00000034 001095E5 LDR R1,[R5, #+0]
\ 00000038 001084E5 STR R1,[R4, #+0]
374 p_mem_data->OSFreeList = pmem->OSMemFreeList;
\ 0000003C 041095E5 LDR R1,[R5, #+4]
\ 00000040 041084E5 STR R1,[R4, #+4]
375 p_mem_data->OSBlkSize = pmem->OSMemBlkSize;
\ 00000044 081095E5 LDR R1,[R5, #+8]
\ 00000048 081084E5 STR R1,[R4, #+8]
376 p_mem_data->OSNBlks = pmem->OSMemNBlks;
\ 0000004C 0C1095E5 LDR R1,[R5, #+12]
\ 00000050 0C1084E5 STR R1,[R4, #+12]
377 p_mem_data->OSNFree = pmem->OSMemNFree;
\ 00000054 101095E5 LDR R1,[R5, #+16]
\ 00000058 101084E5 STR R1,[R4, #+16]
378 OS_EXIT_CRITICAL();
\ 0000005C ........ _BLF OS_CPU_SR_Restore,??OS_CPU_SR_Restore??rA
379 p_mem_data->OSNUsed = p_mem_data->OSNBlks - p_mem_data->OSNFree;
\ 00000060 0C0094E5 LDR R0,[R4, #+12]
\ 00000064 101094E5 LDR R1,[R4, #+16]
\ 00000068 010050E0 SUBS R0,R0,R1
\ 0000006C 140084E5 STR R0,[R4, #+20]
380 return (OS_ERR_NONE);
\ 00000070 0000A0E3 MOV R0,#+0
\ ??OSMemQuery_1:
\ 00000074 3080BDE8 POP {R4,R5,PC} ;; return
381 }
382 #endif /* OS_MEM_QUERY_EN */
383 /*$PAGE*/
384 /*
385 *********************************************************************************************************
386 * INITIALIZE MEMORY PARTITION MANAGER
387 *
388 * Description : This function is called by uC/OS-II to initialize the memory partition manager. Your
389 * application MUST NOT call this function.
390 *
391 * Arguments : none
392 *
393 * Returns : none
394 *
395 * Note(s) : This function is INTERNAL to uC/OS-II and your application should not call it.
396 *********************************************************************************************************
397 */
398
\ In segment CODE, align 4, keep-with-next
399 void OS_MemInit (void)
400 {
\ OS_MemInit:
\ 00000000 00402DE9 PUSH {LR}
401 #if OS_MAX_MEM_PART == 1
402 OS_MemClr((INT8U *)&OSMemTbl[0], sizeof(OSMemTbl)); /* Clear the memory partition table */
403 OSMemFreeList = (OS_MEM *)&OSMemTbl[0]; /* Point to beginning of free list */
404 #if OS_MEM_NAME_SIZE > 1
405 OSMemFreeList->OSMemName[0] = '?'; /* Unknown name */
406 OSMemFreeList->OSMemName[1] = OS_ASCII_NUL;
407 #endif
408 #endif
409
410 #if OS_MAX_MEM_PART >= 2
411 OS_MEM *pmem;
412 INT16U i;
413
414
415 OS_MemClr((INT8U *)&OSMemTbl[0], sizeof(OSMemTbl)); /* Clear the memory partition table */
\ 00000004 B410A0E3 MOV R1,#+180
\ 00000008 7C009FE5 LDR R0,??OS_MemInit_0 ;; OSMemTbl
\ 0000000C ........ _BLF OS_MemClr,??OS_MemClr??rA
416 pmem = &OSMemTbl[0]; /* Point to memory control block (MCB) */
\ 00000010 74009FE5 LDR R0,??OS_MemInit_0 ;; OSMemTbl
417 for (i = 0; i < (OS_MAX_MEM_PART - 1); i++) { /* Init. list of free memory partitions */
\ 00000014 0010A0E3 MOV R1,#+0
\ 00000018 0D0000EA B ??OS_MemInit_1
418 pmem->OSMemFreeList = (void *)&OSMemTbl[i+1]; /* Chain list of free partitions */
\ ??OS_MemInit_2:
\ 0000001C 0120B0E1 MOVS R2,R1
\ 00000020 0228A0E1 MOV R2,R2, LSL #+16
\ 00000024 2228B0E1 MOVS R2,R2, LSR #+16
\ 00000028 2430A0E3 MOV R3,#+36
\ 0000002C 58C09FE5 LDR R12,??OS_MemInit_0 ;; OSMemTbl
\ 00000030 93C222E0 MLA R2,R3,R2,R12
\ 00000034 242092E2 ADDS R2,R2,#+36
\ 00000038 042080E5 STR R2,[R0, #+4]
419 #if OS_MEM_NAME_SIZE > 1
420 pmem->OSMemName[0] = '?'; /* Unknown name */
\ 0000003C 3F20A0E3 MOV R2,#+63
\ 00000040 1420C0E5 STRB R2,[R0, #+20]
421 pmem->OSMemName[1] = OS_ASCII_NUL;
\ 00000044 0020A0E3 MOV R2,#+0
\ 00000048 1520C0E5 STRB R2,[R0, #+21]
422 #endif
423 pmem++;
\ 0000004C 240090E2 ADDS R0,R0,#+36
424 }
\ 00000050 011091E2 ADDS R1,R1,#+1
\ ??OS_MemInit_1:
\ 00000054 0118A0E1 MOV R1,R1, LSL #+16
\ 00000058 2118B0E1 MOVS R1,R1, LSR #+16
\ 0000005C 040051E3 CMP R1,#+4
\ 00000060 EDFFFF3A BCC ??OS_MemInit_2
425 pmem->OSMemFreeList = (void *)0; /* Initialize last node */
\ 00000064 0010A0E3 MOV R1,#+0
\ 00000068 041080E5 STR R1,[R0, #+4]
426 #if OS_MEM_NAME_SIZE > 1
427 pmem->OSMemName[0] = '?'; /* Unknown name */
\ 0000006C 3F10A0E3 MOV R1,#+63
\ 00000070 1410C0E5 STRB R1,[R0, #+20]
428 pmem->OSMemName[1] = OS_ASCII_NUL;
\ 00000074 0010A0E3 MOV R1,#+0
\ 00000078 1510C0E5 STRB R1,[R0, #+21]
429 #endif
430
431 OSMemFreeList = &OSMemTbl[0]; /* Point to beginning of free list */
\ 0000007C ........ LDR R0,??DataTable4 ;; OSMemFreeList
\ 00000080 04109FE5 LDR R1,??OS_MemInit_0 ;; OSMemTbl
\ 00000084 001080E5 STR R1,[R0, #+0]
432 #endif
433 }
\ 00000088 0080BDE8 POP {PC} ;; return
\ ??OS_MemInit_0:
\ 0000008C ........ DC32 OSMemTbl
\ In segment CODE, align 4, keep-with-next
\ ??DataTable4:
\ 00000000 ........ DC32 OSMemFreeList
434 #endif /* OS_MEM_EN */
Maximum stack usage in bytes:
Function CSTACK
-------- ------
OSMemCreate 24
OSMemGet 16
OSMemNameGet 20
OSMemNameSet 20
OSMemPut 12
OSMemQuery 12
OS_MemInit 4
Segment part sizes:
Function/Label Bytes
-------------- -----
OSMemCreate 328
OSMemGet 136
OSMemNameGet 156
OSMemNameSet 172
OSMemPut 116
OSMemQuery 120
OS_MemInit 144
??DataTable4 4
Others 60
1 236 bytes in segment CODE
1 176 bytes of CODE memory (+ 60 bytes shared)
Errors: none
Warnings: none
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -