📄 osal_memory.lst
字号:
407 * Best worst case time on TrasmitApp was achieved at a 0-15% miss rate
408 * during steady state Tx load, 0% during idle and steady state Rx load.
409 */
410 if ( (size <= OSALMEM_SMALL_BLKSZ) && (hdr > ff2) )
411 {
412 proSmallBlkMiss++;
413 }
414 #endif
415 }
416
417 HAL_EXIT_CRITICAL_SECTION( intState ); // Re-enable interrupts.
\ ??osal_mem_alloc_8:
\ 000101 EC MOV A,R4
\ 000102 A2E0 MOV C,0xE0 /* A */.0
\ 000104 92AF MOV 0xa8.7,C
418
419 return (void *)hdr;
\ 000106 7F06 MOV R7,#0x6
\ 000108 02.... LJMP ?BANKED_LEAVE_XDATA
420 }
421
422 /*********************************************************************
423 * @fn osal_mem_free
424 *
425 * @brief Implementation of the de-allocator functionality.
426 *
427 * @param ptr - pointer to the memory to free.
428 *
429 * @return void
430 */
\ In segment BANKED_CODE, align 1, keep-with-next
431 void osal_mem_free( void *ptr )
\ osal_mem_free:
432 {
\ 000000 74F7 MOV A,#-0x9
\ 000002 12.... LCALL ?BANKED_ENTER_XDATA
\ 000005 ; Saved register size: 9
\ 000005 ; Auto size: 0
\ 000005 EA MOV A,R2
\ 000006 FE MOV R6,A
\ 000007 EB MOV A,R3
\ 000008 FF MOV R7,A
433 osalMemHdr_t *currHdr;
434 halIntState_t intState;
435
436 #if ( OSALMEM_GUARD )
437 // Try to protect against premature use by HAL / OSAL.
438 if ( ready != OSALMEM_READY )
\ 000009 90.... MOV DPTR,#??ready
\ 00000C E0 MOVX A,@DPTR
\ 00000D 64E2 XRL A,#0xe2
\ 00000F 6008 JZ ??osal_mem_free_0
439 {
440 osal_mem_init();
\ 000011 ; Setup parameters for call to function osal_mem_init
\ 000011 90.... MOV DPTR,#(osal_mem_init & 0xffff)
\ 000014 74.. MOV A,#((osal_mem_init >> 16) & 0xff)
\ 000016 12.... LCALL ?BCALL ; Banked call to: DPTR()
441 }
442 #endif
443
444 HAL_ENTER_CRITICAL_SECTION( intState ); // Hold off interrupts.
\ ??osal_mem_free_0:
\ 000019 A2AF MOV C,0xa8.7
\ 00001B E4 CLR A
\ 00001C 92E0 MOV 0xE0 /* A */.0,C
\ 00001E FC MOV R4,A
\ 00001F C2AF CLR 0xa8.7
445
446 OSALMEM_ASSERT( ptr );
447
448 currHdr = (osalMemHdr_t *)ptr - 1;
\ 000021 EE MOV A,R6
\ 000022 24FE ADD A,#-0x2
\ 000024 F8 MOV R0,A
\ 000025 EF MOV A,R7
\ 000026 34FF ADDC A,#-0x1
\ 000028 F9 MOV R1,A
449
450 // Has this block already been freed?
451 OSALMEM_ASSERT( *currHdr & OSALMEM_IN_USE );
452
453 *currHdr &= ~OSALMEM_IN_USE;
\ 000029 8882 MOV DPL,R0
\ 00002B 8983 MOV DPH,R1
\ 00002D E0 MOVX A,@DPTR
\ 00002E F0 MOVX @DPTR,A
\ 00002F A3 INC DPTR
\ 000030 E0 MOVX A,@DPTR
\ 000031 547F ANL A,#0x7f
\ 000033 F0 MOVX @DPTR,A
454
455 #if ( OSALMEM_PROFILER )
456 {
457 uint16 size = *currHdr;
458 byte idx;
459
460 for ( idx = 0; idx < OSALMEM_PROMAX; idx++ )
461 {
462 if ( size <= proCnt[idx] )
463 {
464 break;
465 }
466 }
467
468 proCur[idx]--;
469 }
470 #endif
471
472 #if ( OSALMEM_METRICS )
473 memAlo -= *currHdr;
474 blkFree++;
475 #endif
476
477 if ( ff1 > currHdr )
\ 000034 90.... MOV DPTR,#??ff1
\ 000037 E0 MOVX A,@DPTR
\ 000038 FA MOV R2,A
\ 000039 A3 INC DPTR
\ 00003A E0 MOVX A,@DPTR
\ 00003B FB MOV R3,A
\ 00003C C3 CLR C
\ 00003D E8 MOV A,R0
\ 00003E 9A SUBB A,R2
\ 00003F E9 MOV A,R1
\ 000040 9B SUBB A,R3
\ 000041 5008 JNC ??osal_mem_free_1
478 {
479 ff1 = currHdr;
\ 000043 90.... MOV DPTR,#??ff1
\ 000046 E8 MOV A,R0
\ 000047 F0 MOVX @DPTR,A
\ 000048 A3 INC DPTR
\ 000049 E9 MOV A,R1
\ 00004A F0 MOVX @DPTR,A
480 }
481
482 #if ( OSALMEM_PROFILER )
483 osal_memset( (byte *)currHdr+HDRSZ, OSALMEM_REIN, (*currHdr - HDRSZ) );
484 #endif
485
486 HAL_EXIT_CRITICAL_SECTION( intState ); // Re-enable interrupts.
\ ??osal_mem_free_1:
\ 00004B EC MOV A,R4
\ 00004C A2E0 MOV C,0xE0 /* A */.0
\ 00004E 92AF MOV 0xa8.7,C
487 }
\ 000050 7F01 MOV R7,#0x1
\ 000052 02.... LJMP ?BANKED_LEAVE_XDATA
\ In segment XDATA_ID, align 1, keep-with-next
\ `?<Initializer for theHeap>`:
\ 000000 .... DW ??_theHeap
\ In segment SFR_AN, at 0xa8
\ union <unnamed> volatile __sfr _A_IEN0
\ _A_IEN0:
\ 000000 DS 1
488
489 #if ( OSALMEM_METRICS )
490 /*********************************************************************
491 * @fn osal_heap_block_max
492 *
493 * @brief Return the maximum number of blocks ever allocated at once.
494 *
495 * @param none
496 *
497 * @return Maximum number of blocks ever allocated at once.
498 */
499 uint16 osal_heap_block_max( void )
500 {
501 return blkMax;
502 }
503
504 /*********************************************************************
505 * @fn osal_heap_block_cnt
506 *
507 * @brief Return the current number of blocks now allocated.
508 *
509 * @param none
510 *
511 * @return Current number of blocks now allocated.
512 */
513 uint16 osal_heap_block_cnt( void )
514 {
515 return blkCnt;
516 }
517
518 /*********************************************************************
519 * @fn osal_heap_block_free
520 *
521 * @brief Return the current number of free blocks.
522 *
523 * @param none
524 *
525 * @return Current number of free blocks.
526 */
527 uint16 osal_heap_block_free( void )
528 {
529 return blkFree;
530 }
531
532 /*********************************************************************
533 * @fn osal_heap_mem_used
534 *
535 * @brief Return the current number of bytes allocated.
536 *
537 * @param none
538 *
539 * @return Current number of bytes allocated.
540 */
541 uint16 osal_heap_mem_used( void )
542 {
543 return memAlo;
544 }
545 #endif
546
547 #if defined (ZTOOL_P1) || defined (ZTOOL_P2)
548 /*********************************************************************
549 * @fn osal_heap_high_water
550 *
551 * @brief Return the highest byte ever allocated in the heap.
552 *
553 * @param none
554 *
555 * @return Highest number of bytes ever used by the stack.
556 */
557 uint16 osal_heap_high_water( void )
558 {
559 #if ( OSALMEM_METRICS )
560 return memMax;
561 #else
562 return MAXMEMHEAP;
563 #endif
564 }
565 #endif
566
567 /*********************************************************************
568 *********************************************************************/
Maximum stack usage in bytes:
Function ISTACK PSTACK XSTACK
-------- ------ ------ ------
osal_mem_alloc 2 0 14
-> osal_mem_init 0 0 28
osal_mem_free 0 0 9
-> osal_mem_init 0 0 18
osal_mem_init 2 0 14
-> osal_mem_alloc 4 0 0
osal_mem_kick 2 0 0
Segment part sizes:
Function/Label Bytes
-------------- -----
ready 1
ff1 2
ff2 2
_theHeap 4096
theHeap 2
osal_mem_init 104
?Subroutine2 7
?Subroutine0 12
?Subroutine1 11
osal_mem_kick 21
osal_mem_alloc 267
osal_mem_free 85
?<Initializer for theHeap> 2
_A_IEN0 1
507 bytes in segment BANKED_CODE
1 byte in segment SFR_AN
2 bytes in segment XDATA_I
2 bytes in segment XDATA_ID
4 101 bytes in segment XDATA_Z
509 bytes of CODE memory
0 bytes of DATA memory (+ 1 byte shared)
4 103 bytes of XDATA memory
Errors: none
Warnings: none
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -