⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 osal_memory.lst

📁 cc2430应用实例
💻 LST
📖 第 1 页 / 共 4 页
字号:
    272                size += (sizeof( halDataAlign_t ) - mod);
    273              }
    274            }
    275          
    276            HAL_ENTER_CRITICAL_SECTION( intState );  // Hold off interrupts.
   \   000028   A2AF         MOV     C,0xa8.7
   \   00002A   E4           CLR     A
   \   00002B   92E0         MOV     0xE0 /* A   */.0,C
   \   00002D   FC           MOV     R4,A
   \   00002E   C2AF         CLR     0xa8.7
    277          
    278            // Smaller allocations are first attempted in the small-block bucket.
    279            if ( size <= OSALMEM_SMALL_BLKSZ )
   \   000030   C3           CLR     C
   \   000031   E5..         MOV     A,?V0 + 0
   \   000033   9411         SUBB    A,#0x11
   \   000035   E5..         MOV     A,?V0 + 1
   \   000037   9400         SUBB    A,#0x0
   \   000039   5005         JNC     ??osal_mem_alloc_1
    280            {
    281              hdr = ff1;
   \   00003B   90....       MOV     DPTR,#??ff1
   \   00003E   8003         SJMP    ??osal_mem_alloc_2
    282            }
    283            else
    284            {
    285              hdr = ff2;
   \                     ??osal_mem_alloc_1:
   \   000040   90....       MOV     DPTR,#??ff2
   \                     ??osal_mem_alloc_2:
   \   000043   E0           MOVX    A,@DPTR
   \   000044   FA           MOV     R2,A
   \   000045   A3           INC     DPTR
   \   000046   E0           MOVX    A,@DPTR
   \   000047   12....       LCALL   ?Subroutine1 & 0xFFFF
    286            }
    287            tmp = *hdr;
    288          
    289            do
    290            {
    291              if ( tmp & OSALMEM_IN_USE )
   \                     ??CrossCallReturnLabel_2:
   \   00004A   7480         MOV     A,#-0x80
   \   00004C   59           ANL     A,R1
   \   00004D   F5..         MOV     ?V0 + 5,A
   \   00004F   E4           CLR     A
   \   000050   7002         JNZ     ??osal_mem_alloc_3
   \   000052   E5..         MOV     A,?V0 + 5
   \                     ??osal_mem_alloc_3:
   \   000054   6009         JZ      ??osal_mem_alloc_4
    292              {
    293                tmp ^= OSALMEM_IN_USE;
   \   000056   7480         MOV     A,#-0x80
   \   000058   69           XRL     A,R1
   \   000059   F9           MOV     R1,A
    294                coal = 0;
   \   00005A   75..00       MOV     ?V0 + 2,#0x0
   \   00005D   8077         SJMP    ??osal_mem_alloc_5
    295              }
    296              else
    297              {
    298                if ( coal != 0 )
   \                     ??osal_mem_alloc_4:
   \   00005F   E5..         MOV     A,?V0 + 2
   \   000061   6063         JZ      ??osal_mem_alloc_6
    299                {
    300          #if ( OSALMEM_METRICS )
    301                  blkCnt--;
    302                  blkFree--;
    303          #endif
    304          
    305                  *prev += *hdr;
   \   000063   8A82         MOV     DPL,R2
   \   000065   8B83         MOV     DPH,R3
   \   000067   E0           MOVX    A,@DPTR
   \   000068   F5..         MOV     ?V0 + 4,A
   \   00006A   A3           INC     DPTR
   \   00006B   E0           MOVX    A,@DPTR
   \   00006C   F5..         MOV     ?V0 + 5,A
   \   00006E   8E82         MOV     DPL,R6
   \   000070   8F83         MOV     DPH,R7
   \   000072   E0           MOVX    A,@DPTR
   \   000073   25..         ADD     A,?V0 + 4
   \   000075   F0           MOVX    @DPTR,A
   \   000076   A3           INC     DPTR
   \   000077   E0           MOVX    A,@DPTR
   \   000078   35..         ADDC    A,?V0 + 5
   \   00007A   F0           MOVX    @DPTR,A
    306          
    307                  if ( *prev >= size )
   \   00007B   8E82         MOV     DPL,R6
   \   00007D   8F83         MOV     DPH,R7
   \   00007F   C3           CLR     C
   \   000080   E0           MOVX    A,@DPTR
   \   000081   95..         SUBB    A,?V0 + 0
   \   000083   A3           INC     DPTR
   \   000084   E0           MOVX    A,@DPTR
   \   000085   95..         SUBB    A,?V0 + 1
   \   000087   404D         JC      ??osal_mem_alloc_5
    308                  {
    309                    hdr = prev;
   \   000089   EE           MOV     A,R6
   \   00008A   FA           MOV     R2,A
   \   00008B   EF           MOV     A,R7
   \   00008C   12....       LCALL   ?Subroutine1 & 0xFFFF
    310                    tmp = *hdr;
    311                    break;
    312                  }
    313                }
    314                else
    315                {
    316                  if ( tmp >= size )
    317                  {
    318                    break;
    319                  }
    320          
    321                  coal = 1;
    322                  prev = hdr;
    323                }
    324              }
    325          
    326              hdr = (osalMemHdr_t *)((byte *)hdr + tmp);
    327          
    328              tmp = *hdr;
    329              if ( tmp == 0 )
    330              {
    331                hdr = NULL;
    332                break;
    333              }
    334          
    335          
    336            } while ( 1 );
    337          
    338            if ( hdr != NULL )
   \                     ??CrossCallReturnLabel_3:
   \   00008F   EA           MOV     A,R2
   \   000090   7001         JNZ     ??osal_mem_alloc_7
   \   000092   EB           MOV     A,R3
   \                     ??osal_mem_alloc_7:
   \   000093   606C         JZ      ??osal_mem_alloc_8
    339            {
    340              tmp -= size;
   \   000095   C3           CLR     C
   \   000096   E8           MOV     A,R0
   \   000097   95..         SUBB    A,?V0 + 0
   \   000099   F8           MOV     R0,A
   \   00009A   E9           MOV     A,R1
   \   00009B   95..         SUBB    A,?V0 + 1
   \   00009D   F9           MOV     R1,A
    341          
    342              // Determine whether the threshold for splitting is met.
    343              if ( tmp >= OSALMEM_MIN_BLKSZ )
   \   00009E   C3           CLR     C
   \   00009F   E8           MOV     A,R0
   \   0000A0   9404         SUBB    A,#0x4
   \   0000A2   E9           MOV     A,R1
   \   0000A3   9400         SUBB    A,#0x0
   \   0000A5   4046         JC      ??osal_mem_alloc_9
    344              {
    345                // Split the block before allocating it.
    346                osalMemHdr_t *next = (osalMemHdr_t *)((byte *)hdr + size);
    347                *next = tmp;
   \   0000A7   EA           MOV     A,R2
   \   0000A8   25..         ADD     A,?V0 + 0
   \   0000AA   F582         MOV     DPL,A
   \   0000AC   EB           MOV     A,R3
   \   0000AD   35..         ADDC    A,?V0 + 1
   \   0000AF   F583         MOV     DPH,A
   \   0000B1   E8           MOV     A,R0
   \   0000B2   F0           MOVX    @DPTR,A
   \   0000B3   A3           INC     DPTR
   \   0000B4   E9           MOV     A,R1
   \   0000B5   F0           MOVX    @DPTR,A
    348                *hdr = (size | OSALMEM_IN_USE);
   \   0000B6   7480         MOV     A,#-0x80
   \   0000B8   45..         ORL     A,?V0 + 1
   \   0000BA   F9           MOV     R1,A
   \   0000BB   8A82         MOV     DPL,R2
   \   0000BD   8B83         MOV     DPH,R3
   \   0000BF   E5..         MOV     A,?V0 + 0
   \   0000C1   F0           MOVX    @DPTR,A
   \   0000C2   A3           INC     DPTR
   \   0000C3   E9           MOV     A,R1
   \   0000C4   8031         SJMP    ??osal_mem_alloc_10
    349          
    350          #if ( OSALMEM_METRICS )
    351                blkCnt++;
    352                if ( blkMax < blkCnt )
    353                {
    354                  blkMax = blkCnt;
    355                }
    356                memAlo += size;
    357          #endif
    358              }
   \                     ??osal_mem_alloc_6:
   \   0000C6   C3           CLR     C
   \   0000C7   E8           MOV     A,R0
   \   0000C8   95..         SUBB    A,?V0 + 0
   \   0000CA   E9           MOV     A,R1
   \   0000CB   95..         SUBB    A,?V0 + 1
   \   0000CD   50C0         JNC     ??CrossCallReturnLabel_3
   \   0000CF   75..01       MOV     ?V0 + 2,#0x1
   \   0000D2   EA           MOV     A,R2
   \   0000D3   FE           MOV     R6,A
   \   0000D4   EB           MOV     A,R3
   \   0000D5   FF           MOV     R7,A
   \                     ??osal_mem_alloc_5:
   \   0000D6   EA           MOV     A,R2
   \   0000D7   28           ADD     A,R0
   \   0000D8   FA           MOV     R2,A
   \   0000D9   EB           MOV     A,R3
   \   0000DA   39           ADDC    A,R1
   \   0000DB   12....       LCALL   ?Subroutine1 & 0xFFFF
   \                     ??CrossCallReturnLabel_4:
   \   0000DE   E8           MOV     A,R0
   \   0000DF   7001         JNZ     ??osal_mem_alloc_11
   \   0000E1   E9           MOV     A,R1
   \                     ??osal_mem_alloc_11:
   \   0000E2   6003         JZ      $+5
   \   0000E4   02....       LJMP    ??CrossCallReturnLabel_2 & 0xFFFF
   \   0000E7   7A00         MOV     R2,#0x0
   \   0000E9   7B00         MOV     R3,#0x0
   \   0000EB   8014         SJMP    ??osal_mem_alloc_8
    359              else
    360              {
    361          #if ( OSALMEM_METRICS )
    362                memAlo += *hdr;
    363                blkFree--;
    364          #endif
    365          
    366                *hdr |= OSALMEM_IN_USE;
   \                     ??osal_mem_alloc_9:
   \   0000ED   8A82         MOV     DPL,R2
   \   0000EF   8B83         MOV     DPH,R3
   \   0000F1   E0           MOVX    A,@DPTR
   \   0000F2   F0           MOVX    @DPTR,A
   \   0000F3   A3           INC     DPTR
   \   0000F4   E0           MOVX    A,@DPTR
   \   0000F5   4480         ORL     A,#0x80
   \                     ??osal_mem_alloc_10:
   \   0000F7   F0           MOVX    @DPTR,A
    367              }
    368          
    369          #if ( OSALMEM_METRICS )
    370              if ( memMax < memAlo )
    371              {
    372                memMax = memAlo;
    373              }
    374          #endif
    375          
    376          #if ( OSALMEM_PROFILER )
    377            {
    378              byte idx;
    379              size = *hdr ^ OSALMEM_IN_USE;
    380          
    381              for ( idx = 0; idx < OSALMEM_PROMAX; idx++ )
    382              {
    383                if ( size <= proCnt[idx] )
    384                {
    385                  break;
    386                }
    387              }
    388              proCur[idx]++;
    389              if ( proMax[idx] < proCur[idx] )
    390              {
    391                proMax[idx] = proCur[idx];
    392              }
    393              proTot[idx]++;
    394            }
    395          #endif
    396          
    397              hdr++;
   \   0000F8   EA           MOV     A,R2
   \   0000F9   2402         ADD     A,#0x2
   \   0000FB   0A           INC     R2
   \   0000FC   0A           INC     R2
   \   0000FD   EB           MOV     A,R3
   \   0000FE   3400         ADDC    A,#0x0
   \   000100   FB           MOV     R3,A
    398          
    399          #if ( OSALMEM_PROFILER )
    400              osal_memset( (byte *)hdr, OSALMEM_ALOC, (size - HDRSZ) );
    401          
    402              /* A small-block could not be allocated in the small-block bucket.
    403               * When this occurs significantly frequently, increase the size of the
    404               * bucket in order to restore better worst case run times. Set the first
    405               * profiling bucket size in proCnt[] to the small-block bucket size and
    406               * divide proSmallBlkMiss by the corresponding proTot[] size to get % miss.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -