📄 os_mem.lst
字号:
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 30B5 PUSH {R4,R5,LR}
\ 00000002 0400 MOVS R4,R0
\ 00000004 0D00 MOVS R5,R1
358 #if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */
359 OS_CPU_SR cpu_sr = 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 */
\ 00000006 002C CMP R4,#+0
\ 00000008 01D1 BNE.N ??OSMemQuery_0
366 return (OS_ERR_MEM_INVALID_PMEM);
\ 0000000A 6020 MOVS R0,#+96
\ 0000000C 30BD POP {R4,R5,PC}
367 }
368 if (p_mem_data == (OS_MEM_DATA *)0) { /* Must release a valid storage area for the data */
\ ??OSMemQuery_0:
\ 0000000E 002D CMP R5,#+0
\ 00000010 01D1 BNE.N ??OSMemQuery_1
369 return (OS_ERR_MEM_INVALID_PDATA);
\ 00000012 6120 MOVS R0,#+97
\ 00000014 30BD POP {R4,R5,PC}
370 }
371 #endif
372 OS_ENTER_CRITICAL();
\ ??OSMemQuery_1:
\ 00000016 ........ _BLF OS_CPU_SR_Save,??OS_CPU_SR_Save??rT
373 p_mem_data->OSAddr = pmem->OSMemAddr;
\ 0000001A 2168 LDR R1,[R4, #+0]
\ 0000001C 2960 STR R1,[R5, #+0]
374 p_mem_data->OSFreeList = pmem->OSMemFreeList;
\ 0000001E 6168 LDR R1,[R4, #+4]
\ 00000020 6960 STR R1,[R5, #+4]
375 p_mem_data->OSBlkSize = pmem->OSMemBlkSize;
\ 00000022 A168 LDR R1,[R4, #+8]
\ 00000024 A960 STR R1,[R5, #+8]
376 p_mem_data->OSNBlks = pmem->OSMemNBlks;
\ 00000026 E168 LDR R1,[R4, #+12]
\ 00000028 E960 STR R1,[R5, #+12]
377 p_mem_data->OSNFree = pmem->OSMemNFree;
\ 0000002A 2169 LDR R1,[R4, #+16]
\ 0000002C 2961 STR R1,[R5, #+16]
378 OS_EXIT_CRITICAL();
\ 0000002E ........ _BLF OS_CPU_SR_Restore,??OS_CPU_SR_Restore??rT
379 p_mem_data->OSNUsed = p_mem_data->OSNBlks - p_mem_data->OSNFree;
\ 00000032 E868 LDR R0,[R5, #+12]
\ 00000034 2969 LDR R1,[R5, #+16]
\ 00000036 401A SUBS R0,R0,R1
\ 00000038 6861 STR R0,[R5, #+20]
380 return (OS_ERR_NONE);
\ 0000003A 0020 MOVS R0,#+0
\ 0000003C 30BD 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 70B5 PUSH {R4-R6,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 */
\ 00000002 0F4C LDR.N R4,??OS_MemInit_0 ;; OSMemTbl
\ 00000004 B421 MOVS R1,#+180
\ 00000006 2000 MOVS R0,R4
\ 00000008 ........ _BLF OS_MemClr,??OS_MemClr??rT
416 pmem = &OSMemTbl[0]; /* Point to memory control block (MCB) */
\ 0000000C 2000 MOVS R0,R4
417 for (i = 0; i < (OS_MAX_MEM_PART - 1); i++) { /* Init. list of free memory partitions */
\ 0000000E 0022 MOVS R2,#+0
\ 00000010 1100 MOVS R1,R2
\ 00000012 2426 MOVS R6,#+36
\ 00000014 09E0 B.N ??OS_MemInit_1
418 pmem->OSMemFreeList = (void *)&OSMemTbl[i+1]; /* Chain list of free partitions */
\ ??OS_MemInit_2:
\ 00000016 05FB0645 MLA R5,R5,R6,R4
\ 0000001A 2435 ADDS R5,R5,#+36
\ 0000001C 4560 STR R5,[R0, #+4]
419 #if OS_MEM_NAME_SIZE > 1
420 pmem->OSMemName[0] = '?'; /* Unknown name */
\ 0000001E 0375 STRB R3,[R0, #+20]
421 pmem->OSMemName[1] = OS_ASCII_NUL;
\ 00000020 1300 MOVS R3,R2
\ 00000022 4375 STRB R3,[R0, #+21]
422 #endif
423 pmem++;
\ 00000024 2430 ADDS R0,R0,#+36
424 }
\ 00000026 491C ADDS R1,R1,#+1
\ 00000028 89B2 UXTH R1,R1
\ ??OS_MemInit_1:
\ 0000002A 3F23 MOVS R3,#+63
\ 0000002C 0D00 MOVS R5,R1
\ 0000002E 042D CMP R5,#+4
\ 00000030 F1D3 BCC.N ??OS_MemInit_2
425 pmem->OSMemFreeList = (void *)0; /* Initialize last node */
\ 00000032 4260 STR R2,[R0, #+4]
426 #if OS_MEM_NAME_SIZE > 1
427 pmem->OSMemName[0] = '?'; /* Unknown name */
\ 00000034 0375 STRB R3,[R0, #+20]
428 pmem->OSMemName[1] = OS_ASCII_NUL;
\ 00000036 4275 STRB R2,[R0, #+21]
429 #endif
430
431 OSMemFreeList = &OSMemTbl[0]; /* Point to beginning of free list */
\ 00000038 .... LDR.N R0,??DataTable3 ;; OSMemFreeList
\ 0000003A 0460 STR R4,[R0, #+0]
432 #endif
433 }
\ 0000003C 70BD POP {R4-R6,PC} ;; return
\ 0000003E 00BF Nop
\ ??OS_MemInit_0:
\ 00000040 ........ DC32 OSMemTbl
\ In segment CODE, align 4, keep-with-next
\ ??DataTable2:
\ 00000000 ........ DC32 OSIntNesting
\ In segment CODE, align 4, keep-with-next
\ ??DataTable3:
\ 00000000 ........ DC32 OSMemFreeList
434 #endif /* OS_MEM_EN */
Maximum stack usage in bytes:
Function CSTACK
-------- ------
OSMemCreate 28
OSMemGet 16
OSMemNameGet 20
OSMemNameSet 20
OSMemPut 12
OSMemQuery 12
OS_MemInit 16
Segment part sizes:
Function/Label Bytes
-------------- -----
OSMemCreate 142
OSMemGet 70
OSMemNameGet 86
OSMemNameSet 94
OSMemPut 62
OSMemQuery 62
OS_MemInit 68
??DataTable2 4
??DataTable3 4
Others 40
632 bytes in segment CODE
592 bytes of CODE memory (+ 40 bytes shared)
Errors: none
Warnings: none
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -