📄 os_mem.lst
字号:
\ OSMemQuery:
\ 00000000 70B5 PUSH {R4-R6,LR}
\ 00000002 0400 MOVS R4,R0
\ 00000004 0D00 MOVS R5,R1
387 #if OS_CRITICAL_METHOD == 3u /* Allocate storage for CPU status register */
388 OS_CPU_SR cpu_sr = 0u;
\ 00000006 0026 MOVS R6,#+0
389 #endif
390
391
392
393 #if OS_ARG_CHK_EN > 0u
394 if (pmem == (OS_MEM *)0) { /* Must point to a valid memory partition */
395 return (OS_ERR_MEM_INVALID_PMEM);
396 }
397 if (p_mem_data == (OS_MEM_DATA *)0) { /* Must release a valid storage area for the data */
398 return (OS_ERR_MEM_INVALID_PDATA);
399 }
400 #endif
401 OS_ENTER_CRITICAL();
\ 00000008 ........ BL OS_CPU_SR_Save
\ 0000000C 0600 MOVS R6,R0
402 p_mem_data->OSAddr = pmem->OSMemAddr;
\ 0000000E 2068 LDR R0,[R4, #+0]
\ 00000010 2860 STR R0,[R5, #+0]
403 p_mem_data->OSFreeList = pmem->OSMemFreeList;
\ 00000012 6068 LDR R0,[R4, #+4]
\ 00000014 6860 STR R0,[R5, #+4]
404 p_mem_data->OSBlkSize = pmem->OSMemBlkSize;
\ 00000016 A068 LDR R0,[R4, #+8]
\ 00000018 A860 STR R0,[R5, #+8]
405 p_mem_data->OSNBlks = pmem->OSMemNBlks;
\ 0000001A E068 LDR R0,[R4, #+12]
\ 0000001C E860 STR R0,[R5, #+12]
406 p_mem_data->OSNFree = pmem->OSMemNFree;
\ 0000001E 2069 LDR R0,[R4, #+16]
\ 00000020 2861 STR R0,[R5, #+16]
407 OS_EXIT_CRITICAL();
\ 00000022 3000 MOVS R0,R6
\ 00000024 ........ BL OS_CPU_SR_Restore
408 p_mem_data->OSNUsed = p_mem_data->OSNBlks - p_mem_data->OSNFree;
\ 00000028 E868 LDR R0,[R5, #+12]
\ 0000002A 2969 LDR R1,[R5, #+16]
\ 0000002C 401A SUBS R0,R0,R1
\ 0000002E 6861 STR R0,[R5, #+20]
409 return (OS_ERR_NONE);
\ 00000030 0020 MOVS R0,#+0
\ 00000032 70BD POP {R4-R6,PC} ;; return
410 }
411 #endif /* OS_MEM_QUERY_EN */
412 /*$PAGE*/
413 /*
414 *********************************************************************************************************
415 * INITIALIZE MEMORY PARTITION MANAGER
416 *
417 * Description : This function is called by uC/OS-II to initialize the memory partition manager. Your
418 * application MUST NOT call this function.
419 *
420 * Arguments : none
421 *
422 * Returns : none
423 *
424 * Note(s) : This function is INTERNAL to uC/OS-II and your application should not call it.
425 *********************************************************************************************************
426 */
427
\ In section .text, align 2, keep-with-next
428 void OS_MemInit (void)
429 {
\ OS_MemInit:
\ 00000000 38B5 PUSH {R3-R5,LR}
430 #if OS_MAX_MEM_PART == 1u
431 OS_MemClr((INT8U *)&OSMemTbl[0], sizeof(OSMemTbl)); /* Clear the memory partition table */
432 OSMemFreeList = (OS_MEM *)&OSMemTbl[0]; /* Point to beginning of free list */
433 #if OS_MEM_NAME_EN > 0u
434 OSMemFreeList->OSMemName = (INT8U *)"?"; /* Unknown name */
435 #endif
436 #endif
437
438 #if OS_MAX_MEM_PART >= 2u
439 OS_MEM *pmem;
440 INT16U i;
441
442
443 OS_MemClr((INT8U *)&OSMemTbl[0], sizeof(OSMemTbl)); /* Clear the memory partition table */
\ 00000002 7821 MOVS R1,#+120
\ 00000004 .... LDR.N R0,??DataTable4_3
\ 00000006 ........ BL OS_MemClr
444 for (i = 0u; i < (OS_MAX_MEM_PART - 1u); i++) { /* Init. list of free memory partitions */
\ 0000000A 0020 MOVS R0,#+0
\ 0000000C 0500 MOVS R5,R0
\ ??OS_MemInit_0:
\ 0000000E ADB2 UXTH R5,R5 ;; ZeroExt R5,R5,#+16,#+16
\ 00000010 042D CMP R5,#+4
\ 00000012 10D2 BCS.N ??OS_MemInit_1
445 pmem = &OSMemTbl[i]; /* Point to memory control block (MCB) */
\ 00000014 ADB2 UXTH R5,R5 ;; ZeroExt R5,R5,#+16,#+16
\ 00000016 1820 MOVS R0,#+24
\ 00000018 .... LDR.N R1,??DataTable4_3
\ 0000001A 00FB0510 MLA R0,R0,R5,R1
\ 0000001E 0400 MOVS R4,R0
446 pmem->OSMemFreeList = (void *)&OSMemTbl[i + 1u]; /* Chain list of free partitions */
\ 00000020 ADB2 UXTH R5,R5 ;; ZeroExt R5,R5,#+16,#+16
\ 00000022 1820 MOVS R0,#+24
\ 00000024 .... LDR.N R1,??DataTable4_3
\ 00000026 00FB0510 MLA R0,R0,R5,R1
\ 0000002A 1830 ADDS R0,R0,#+24
\ 0000002C 6060 STR R0,[R4, #+4]
447 #if OS_MEM_NAME_EN > 0u
448 pmem->OSMemName = (INT8U *)(void *)"?";
\ 0000002E .... ADR.N R0,??DataTable4 ;; "\?"
\ 00000030 6061 STR R0,[R4, #+20]
449 #endif
450 }
\ 00000032 6D1C ADDS R5,R5,#+1
\ 00000034 EBE7 B.N ??OS_MemInit_0
451 pmem = &OSMemTbl[i];
\ ??OS_MemInit_1:
\ 00000036 ADB2 UXTH R5,R5 ;; ZeroExt R5,R5,#+16,#+16
\ 00000038 1820 MOVS R0,#+24
\ 0000003A .... LDR.N R1,??DataTable4_3
\ 0000003C 00FB0510 MLA R0,R0,R5,R1
\ 00000040 0400 MOVS R4,R0
452 pmem->OSMemFreeList = (void *)0; /* Initialize last node */
\ 00000042 0020 MOVS R0,#+0
\ 00000044 6060 STR R0,[R4, #+4]
453 #if OS_MEM_NAME_EN > 0u
454 pmem->OSMemName = (INT8U *)(void *)"?";
\ 00000046 .... ADR.N R0,??DataTable4 ;; "\?"
\ 00000048 6061 STR R0,[R4, #+20]
455 #endif
456
457 OSMemFreeList = &OSMemTbl[0]; /* Point to beginning of free list */
\ 0000004A .... LDR.N R0,??DataTable4_1
\ 0000004C .... LDR.N R1,??DataTable4_3
\ 0000004E 0160 STR R1,[R0, #+0]
458 #endif
459 }
\ 00000050 31BD POP {R0,R4,R5,PC} ;; return
\ In section .text, align 4, keep-with-next
\ ??DataTable4:
\ 00000000 3F000000 DC8 "\?",0x0,0x0
\ In section .text, align 4, keep-with-next
\ ??DataTable4_1:
\ 00000000 ........ DC32 OSMemFreeList
\ In section .text, align 4, keep-with-next
\ ??DataTable4_2:
\ 00000000 ........ DC32 OSIntNesting
\ In section .text, align 4, keep-with-next
\ ??DataTable4_3:
\ 00000000 ........ DC32 OSMemTbl
\ In section .rodata, align 2, keep-with-next
\ `?<Constant "?">`:
\ 00000000 ; Initializer data, 2 bytes
\ 00000000 3F00 DC8 63, 0
460 #endif /* OS_MEM_EN */
Maximum stack usage in bytes:
Function .cstack
-------- -------
OSMemCreate 48
OSMemGet 24
OSMemNameGet 24
OSMemNameSet 24
OSMemPut 16
OSMemQuery 16
OS_MemInit 16
Section sizes:
Function/Label Bytes
-------------- -----
OSMemCreate 128
OSMemGet 62
OSMemNameGet 66
OSMemNameSet 44
OSMemPut 54
OSMemQuery 52
OS_MemInit 82
??DataTable4 4
??DataTable4_1 4
??DataTable4_2 4
??DataTable4_3 4
?<Constant "?"> 2
2 bytes in section .rodata
504 bytes in section .text
504 bytes of CODE memory
2 bytes of CONST memory
Errors: none
Warnings: none
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -