📄 osal_memory.s51
字号:
// 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:
MOV A,R4
MOV C,0xE0 /* A */.0
MOV 0xa8.7,C
// 418
// 419 return (void *)hdr;
MOV R7,#0x6
LJMP ?BANKED_LEAVE_XDATA
CFI EndBlock cfiBlock6
// 420 }
RSEG BANKED_CODE:CODE:NOROOT(0)
?Subroutine1:
CFI Block cfiCond7 Using cfiCommon0
CFI NoFunction
CFI Conditional ??CrossCallReturnLabel_4
CFI R6 load(1, XDATA, add(CFA_XSP16, literal(-14)))
CFI VB load(1, XDATA, add(CFA_XSP16, literal(-13)))
CFI V0 load(1, XDATA, add(CFA_XSP16, literal(-12)))
CFI V1 load(1, XDATA, add(CFA_XSP16, literal(-11)))
CFI V2 load(1, XDATA, add(CFA_XSP16, literal(-10)))
CFI V3 load(1, XDATA, add(CFA_XSP16, literal(-9)))
CFI V4 load(1, XDATA, add(CFA_XSP16, literal(-8)))
CFI V5 load(1, XDATA, add(CFA_XSP16, literal(-7)))
CFI R7 load(1, XDATA, add(CFA_XSP16, literal(-6)))
CFI ?RET_LOW load(1, XDATA, add(CFA_XSP16, literal(-5)))
CFI ?RET_HIGH load(1, XDATA, add(CFA_XSP16, literal(-4)))
CFI ?BRET_EXT load(1, XDATA, add(CFA_XSP16, literal(-3)))
CFI DPL0 load(1, XDATA, add(CFA_XSP16, literal(-2)))
CFI DPH0 load(1, XDATA, add(CFA_XSP16, literal(-1)))
CFI CFA_SP SP+0
CFI CFA_XSP16 add(XSP16, 14)
CFI Block cfiCond8 Using cfiCommon0
CFI (cfiCond8) NoFunction
CFI (cfiCond8) Conditional ??CrossCallReturnLabel_2
CFI (cfiCond8) R6 load(1, XDATA, add(CFA_XSP16, literal(-14)))
CFI (cfiCond8) VB load(1, XDATA, add(CFA_XSP16, literal(-13)))
CFI (cfiCond8) V0 load(1, XDATA, add(CFA_XSP16, literal(-12)))
CFI (cfiCond8) V1 load(1, XDATA, add(CFA_XSP16, literal(-11)))
CFI (cfiCond8) V2 load(1, XDATA, add(CFA_XSP16, literal(-10)))
CFI (cfiCond8) V3 load(1, XDATA, add(CFA_XSP16, literal(-9)))
CFI (cfiCond8) V4 load(1, XDATA, add(CFA_XSP16, literal(-8)))
CFI (cfiCond8) V5 load(1, XDATA, add(CFA_XSP16, literal(-7)))
CFI (cfiCond8) R7 load(1, XDATA, add(CFA_XSP16, literal(-6)))
CFI (cfiCond8) ?RET_LOW load(1, XDATA, add(CFA_XSP16, literal(-5)))
CFI (cfiCond8) ?RET_HIGH load(1, XDATA, add(CFA_XSP16, literal(-4)))
CFI (cfiCond8) ?BRET_EXT load(1, XDATA, add(CFA_XSP16, literal(-3)))
CFI (cfiCond8) DPL0 load(1, XDATA, add(CFA_XSP16, literal(-2)))
CFI (cfiCond8) DPH0 load(1, XDATA, add(CFA_XSP16, literal(-1)))
CFI (cfiCond8) CFA_SP SP+0
CFI (cfiCond8) CFA_XSP16 add(XSP16, 14)
CFI Block cfiCond9 Using cfiCommon0
CFI (cfiCond9) NoFunction
CFI (cfiCond9) Conditional ??CrossCallReturnLabel_3
CFI (cfiCond9) R6 load(1, XDATA, add(CFA_XSP16, literal(-14)))
CFI (cfiCond9) VB load(1, XDATA, add(CFA_XSP16, literal(-13)))
CFI (cfiCond9) V0 load(1, XDATA, add(CFA_XSP16, literal(-12)))
CFI (cfiCond9) V1 load(1, XDATA, add(CFA_XSP16, literal(-11)))
CFI (cfiCond9) V2 load(1, XDATA, add(CFA_XSP16, literal(-10)))
CFI (cfiCond9) V3 load(1, XDATA, add(CFA_XSP16, literal(-9)))
CFI (cfiCond9) V4 load(1, XDATA, add(CFA_XSP16, literal(-8)))
CFI (cfiCond9) V5 load(1, XDATA, add(CFA_XSP16, literal(-7)))
CFI (cfiCond9) R7 load(1, XDATA, add(CFA_XSP16, literal(-6)))
CFI (cfiCond9) ?RET_LOW load(1, XDATA, add(CFA_XSP16, literal(-5)))
CFI (cfiCond9) ?RET_HIGH load(1, XDATA, add(CFA_XSP16, literal(-4)))
CFI (cfiCond9) ?BRET_EXT load(1, XDATA, add(CFA_XSP16, literal(-3)))
CFI (cfiCond9) DPL0 load(1, XDATA, add(CFA_XSP16, literal(-2)))
CFI (cfiCond9) DPH0 load(1, XDATA, add(CFA_XSP16, literal(-1)))
CFI (cfiCond9) CFA_SP SP+0
CFI (cfiCond9) CFA_XSP16 add(XSP16, 14)
CFI Block cfiPicker10 Using cfiCommon1
CFI (cfiPicker10) NoFunction
CFI (cfiPicker10) Picker
MOV R3,A
MOV DPL,R2
MOV DPH,R3
CFI Block cfiCond11 Using cfiCommon0
CFI (cfiCond11) NoFunction
CFI (cfiCond11) Conditional ??CrossCallReturnLabel_5, ??CrossCallReturnLabel_1
CFI (cfiCond11) DPL0 Frame(CFA_SP, 4)
CFI (cfiCond11) DPH0 Frame(CFA_SP, 5)
CFI (cfiCond11) CFA_SP SP+-5
CFI Block cfiCond12 Using cfiCommon0
CFI (cfiCond12) NoFunction
CFI (cfiCond12) Conditional ??CrossCallReturnLabel_5, ??CrossCallReturnLabel_0
CFI (cfiCond12) DPL0 Frame(CFA_SP, 4)
CFI (cfiCond12) DPH0 Frame(CFA_SP, 5)
CFI (cfiCond12) CFA_SP SP+-5
??Subroutine1_0:
MOVX A,@DPTR
MOV R0,A
INC DPTR
MOVX A,@DPTR
MOV R1,A
RET
CFI EndBlock cfiCond7
CFI EndBlock cfiCond8
CFI EndBlock cfiCond9
CFI EndBlock cfiPicker10
CFI EndBlock cfiCond11
CFI EndBlock cfiCond12
// 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 */
RSEG BANKED_CODE:CODE:NOROOT(0)
// 431 void osal_mem_free( void *ptr )
osal_mem_free:
CFI Block cfiBlock13 Using cfiCommon0
CFI Function osal_mem_free
// 432 {
FUNCALL osal_mem_free, osal_mem_init
LOCFRAME XSTACK, 9, STACK
ARGFRAME XSTACK, 9, STACK
MOV A,#-0x9
LCALL ?BANKED_ENTER_XDATA
CFI DPH0 load(1, XDATA, add(CFA_XSP16, literal(-1)))
CFI DPL0 load(1, XDATA, add(CFA_XSP16, literal(-2)))
CFI ?BRET_EXT load(1, XDATA, add(CFA_XSP16, literal(-3)))
CFI ?RET_HIGH load(1, XDATA, add(CFA_XSP16, literal(-4)))
CFI ?RET_LOW load(1, XDATA, add(CFA_XSP16, literal(-5)))
CFI R7 load(1, XDATA, add(CFA_XSP16, literal(-6)))
CFI V0 load(1, XDATA, add(CFA_XSP16, literal(-7)))
CFI VB load(1, XDATA, add(CFA_XSP16, literal(-8)))
CFI R6 load(1, XDATA, add(CFA_XSP16, literal(-9)))
CFI CFA_SP SP+0
CFI CFA_XSP16 add(XSP16, 9)
; Saved register size: 9
; Auto size: 0
MOV A,R2
MOV R6,A
MOV A,R3
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 )
MOV DPTR,#??ready
MOVX A,@DPTR
XRL A,#0xe2
JZ ??osal_mem_free_0
// 439 {
// 440 osal_mem_init();
; Setup parameters for call to function osal_mem_init
MOV DPTR,#(osal_mem_init & 0xffff)
MOV A,#((osal_mem_init >> 16) & 0xff)
LCALL ?BCALL ; Banked call to: DPTR()
// 441 }
// 442 #endif
// 443
// 444 HAL_ENTER_CRITICAL_SECTION( intState ); // Hold off interrupts.
??osal_mem_free_0:
MOV C,0xa8.7
CLR A
MOV 0xE0 /* A */.0,C
MOV R4,A
CLR 0xa8.7
// 445
// 446 OSALMEM_ASSERT( ptr );
// 447
// 448 currHdr = (osalMemHdr_t *)ptr - 1;
MOV A,R6
ADD A,#-0x2
MOV R0,A
MOV A,R7
ADDC A,#-0x1
MOV R1,A
// 449
// 450 // Has this block already been freed?
// 451 OSALMEM_ASSERT( *currHdr & OSALMEM_IN_USE );
// 452
// 453 *currHdr &= ~OSALMEM_IN_USE;
MOV DPL,R0
MOV DPH,R1
MOVX A,@DPTR
MOVX @DPTR,A
INC DPTR
MOVX A,@DPTR
ANL A,#0x7f
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 )
MOV DPTR,#??ff1
MOVX A,@DPTR
MOV R2,A
INC DPTR
MOVX A,@DPTR
MOV R3,A
CLR C
MOV A,R0
SUBB A,R2
MOV A,R1
SUBB A,R3
JNC ??osal_mem_free_1
// 478 {
// 479 ff1 = currHdr;
MOV DPTR,#??ff1
MOV A,R0
MOVX @DPTR,A
INC DPTR
MOV A,R1
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:
MOV A,R4
MOV C,0xE0 /* A */.0
MOV 0xa8.7,C
// 487 }
MOV R7,#0x1
LJMP ?BANKED_LEAVE_XDATA
CFI EndBlock cfiBlock13
RSEG XDATA_ID:CODE:NOROOT(0)
`?<Initializer for theHeap>`:
DW ??_theHeap
ASEGN SFR_AN:DATA:NOROOT,0a8H
// union <unnamed> volatile __sfr _A_IEN0
_A_IEN0:
DS 1
END
// 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 *********************************************************************/
//
// 507 bytes in segment BANKED_CODE
// 1 byte in segment SFR_AN
// 2 bytes in segment XDATA_I
// 2 bytes in segment XDATA_ID
// 1 669 bytes in segment XDATA_Z
//
// 509 bytes of CODE memory
// 0 bytes of DATA memory (+ 1 byte shared)
// 1 671 bytes of XDATA memory
//
//Errors: none
//Warnings: none
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -