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

📄 po_kernel.lst

📁 at91sam7x256 FREERTOS sd卡的读写程序
💻 LST
📖 第 1 页 / 共 3 页
字号:
    350          
    351            if( len > _NbOctetsFifo )
   \                     ??po_rngBufGet_0:
   \   00000022   B342               CMP         R3,R6
   \   00000024   00DA               BGE         ??po_rngBufGet_2
    352            {
    353              len = _NbOctetsFifo;
   \   00000026   1E1C               MOV         R6,R3
    354            }
    355            _ret = len;
   \                     ??po_rngBufGet_2:
   \   00000028   371C               MOV         R7,R6
   \   0000002A   06E0               B           ??po_rngBufGet_3
    356          
    357            while( len-- > 0)
    358            {
    359              *buffer++= *_current++;
   \                     ??po_rngBufGet_4:
   \   0000002C   0B78               LDRB        R3,[R1, #+0]
   \   0000002E   2B70               STRB        R3,[R5, #+0]
   \   00000030   491C               ADD         R1,R1,#+1
   \   00000032   6D1C               ADD         R5,R5,#+1
    360          
    361              if(_current >= _last)
   \   00000034   9142               CMP         R1,R2
   \   00000036   00D3               BCC         ??po_rngBufGet_3
    362              {
    363                _current = _first;
   \   00000038   011C               MOV         R1,R0
    364              }
    365            }
   \                     ??po_rngBufGet_3:
   \   0000003A   331C               MOV         R3,R6
   \   0000003C   761E               SUB         R6,R6,#+1
   \   0000003E   012B               CMP         R3,#+1
   \   00000040   F4DA               BGE         ??po_rngBufGet_4
    366            pRingId->current = _current;
   \   00000042   A160               STR         R1,[R4, #+8]
    367            pRingId->NbOctetsLibres += _ret;
   \   00000044   2069               LDR         R0,[R4, #+16]
   \   00000046   C019               ADD         R0,R0,R7
   \   00000048   2061               STR         R0,[R4, #+16]
    368            po_unlock();
   \   0000004A   ........           _BLF        po_unlock,??po_unlock??rT
    369          
    370            return( _ret );
   \   0000004E   381C               MOV         R0,R7
   \                     ??po_rngBufGet_1:
   \   00000050                      REQUIRE ?Subroutine15
   \   00000050                      ;; // Fall through to label ?Subroutine15
    371          }
    372          
    373          /******************************************************************
    374          *
    375          * SUB-ROUTINE  po_rngCreate
    376          *
    377          *------------------------------------------------------------------
    378          *
    379          * purpose : create FIFO
    380          *
    381          * input parameters : len FIFO size
    382          *
    383          * output parameters :
    384          *
    385          * global data :
    386          *
    387          ******************************************************************/

   \                                 In segment CODE, align 4, keep-with-next
    388          RING_ID po_rngCreate( int len )
    389          {
   \                     po_rngCreate:
   \   00000000   30B5               PUSH        {R4,R5,LR}
   \   00000002   86B0               SUB         SP,#+24
   \   00000004   041C               MOV         R4,R0
   \   00000006   0D1C               MOV         R5,R1
    390            RING_ID _ringId;
    391            char *  _buff;
    392          
    393            _buff = po_malloc(len);
   \   00000008   081C               MOV         R0,R1
   \   0000000A   ........           _BLF        __data_malloc,??__data_malloc??rT
    394            if( NULL == _buff )
   \   0000000E   0028               CMP         R0,#+0
   \   00000010   07D1               BNE         ??po_rngCreate_0
    395            {
    396              TRACE_ERROR( "rng malloc PB\n\r" );
    397              TRACE_INFO("malloc %d fault!",len) ;
   \   00000012   2A1C               MOV         R2,R5
   \   00000014   ....               LDR         R1,??Subroutine14_0  ;; `?<Constant "malloc %d fault!">`
   \   00000016   ....               LDR         R0,??Subroutine14_0+0x4  ;; _Stdout
   \   00000018   ........           _BLF        fprintf,??fprintf??rT
    398              _ringId.status = -1;
   \   0000001C   0020               MOV         R0,#+0
   \   0000001E   C043               MVN         R0,R0              ;; #-1
   \   00000020   06E0               B           ??po_rngCreate_1
    399            }
    400            else
    401            {
    402              _ringId.free    = _buff;
   \                     ??po_rngCreate_0:
   \   00000022   0190               STR         R0,[SP, #+4]
    403              _ringId.first   = _buff;
   \   00000024   0090               STR         R0,[SP, #+0]
    404              _ringId.current = _ringId.first;
   \   00000026   0290               STR         R0,[SP, #+8]
    405              _ringId.last    = _ringId.first + len;
   \   00000028   4019               ADD         R0,R0,R5
   \   0000002A   0390               STR         R0,[SP, #+12]
    406              _ringId.NbOctetsLibres = len;
   \   0000002C   0495               STR         R5,[SP, #+16]
    407              _ringId.status  = 1;
   \   0000002E   0120               MOV         R0,#+1
   \                     ??po_rngCreate_1:
   \   00000030   0590               STR         R0,[SP, #+20]
    408            }
    409            return( _ringId );
   \   00000032   6846               MOV         R0,SP
   \   00000034   1822               MOV         R2,#+24
   \                     ??po_rngCreate_2:
   \   00000036   121F               SUB         R2,R2,#+4
   \   00000038   8158               LDR         R1,[R0, R2]
   \   0000003A   A150               STR         R1,[R4, R2]
   \   0000003C   FBD1               BNE         ??po_rngCreate_2
   \   0000003E   201C               MOV         R0,R4
   \   00000040   06B0               ADD         SP,#+24
   \   00000042   C046               NOP         
   \   00000044                      REQUIRE ?Subroutine14
   \   00000044                      ;; // Fall through to label ?Subroutine14
    410          }
    411          
    412          /******************************************************************
    413          *
    414          * SUB-ROUTINE  po_rngDelete
    415          *
    416          *------------------------------------------------------------------
    417          *
    418          * purpose : delete FIFO
    419          *
    420          * input parameters : ringId
    421          *
    422          * output parameters :
    423          *
    424          * global data :
    425          *
    426          ******************************************************************/

   \                                 In segment CODE, align 4, keep-with-next
    427          int po_rngDelete( RING_ID * ringId )
    428          {
   \                     po_rngDelete:
   \   00000000   30B5               PUSH        {R4,R5,LR}
   \   00000002   041C               MOV         R4,R0
    429            int _ret = -1;
   \   00000004   0025               MOV         R5,#+0
   \   00000006   ED43               MVN         R5,R5              ;; #-1
    430          
    431            if(ringId->status == 1)
   \   00000008   4069               LDR         R0,[R0, #+20]
   \   0000000A   0128               CMP         R0,#+1
   \   0000000C   09D1               BNE         ??po_rngDelete_0
    432            {
    433              po_free(ringId->first);
   \   0000000E   2068               LDR         R0,[R4, #+0]
   \   00000010   ........           _BLF        __data_free,??__data_free??rT
    434              ringId->first = ringId->last = ringId->current= NULL;
   \   00000014   0020               MOV         R0,#+0
   \   00000016   A060               STR         R0,[R4, #+8]
   \   00000018   E060               STR         R0,[R4, #+12]
   \   0000001A   2060               STR         R0,[R4, #+0]
    435              ringId->NbOctetsLibres = 0;
   \   0000001C   2061               STR         R0,[R4, #+16]
    436              ringId->status = -1;
   \   0000001E   6561               STR         R5,[R4, #+20]
    437              _ret = 0;
   \   00000020   0025               MOV         R5,#+0
    438            }
    439            return( _ret );
   \                     ??po_rngDelete_0:
   \   00000022   281C               MOV         R0,R5
   \   00000024   ....               B           ?Subroutine14
    440          }
    441          
    442          /******************************************************************
    443          *
    444          * SUB-ROUTINE po_strcmp
    445          *
    446          *------------------------------------------------------------------
    447          *
    448          * purpose : compare two string buffers, return 0 if equals
    449          *
    450          * input parameters : s1
    451          *                    s2
    452          *
    453          * output parameters :
    454          *
    455          * global data :
    456          *
    457          ******************************************************************/

   \                                 In segment CODE, align 4, keep-with-next
    458          int po_strcmp( const char* s1, const char* s2 )
    459          {
   \                     po_strcmp:
   \   00000000   30B4               PUSH        {R4,R5}
   \   00000002   021C               MOV         R2,R0
    460            return( strcmp(s1,s2) );
   \   00000004   0025               MOV         R5,#+0
   \                     ??po_strcmp_0:
   \   00000006   4C5D               LDRB        R4,[R1, R5]
   \   00000008   535D               LDRB        R3,[R2, R5]
   \   0000000A   6D1C               ADD         R5,R5,#+1
   \   0000000C   A342               CMP         R3,R4
   \   0000000E   03D1               BNE         ??po_strcmp_1
   \   00000010   002B               CMP         R3,#+0
   \   00000012   F8D1               BNE         ??po_strcmp_0
   \   00000014   0020               MOV         R0,#+0
   \   00000016   00E0               B           ??po_strcmp_2
   \                     ??po_strcmp_1:
   \   00000018   181B               SUB         R0,R3,R4
   \                     ??po_strcmp_2:
   \   0000001A   30BC               POP         {R4,R5}
   \   0000001C   7047               BX          LR                 ;; return
    461          }

   \                                 In segment CODE_I, align 4, keep-with-next
   \                     ??DataTable1:
   \   00000000   ........           DC32        CPT_LOCK

   \                                 In segment DATA_C, align 4, align-sorted
   \                     `?<Constant "malloc %d fault!">`:
   \   00000000   6D616C6C6F63       DC8 "malloc %d fault!"
   \              202564206661
   \              756C742100  
   \   00000011   000000             DC8 0, 0, 0
    462          

   Maximum stack usage in bytes:

     Function      CSTACK
     --------      ------
     po_free           4
     po_lock           8
     po_malloc         4
     po_memcpy         4
     po_rngBufGet     20
     po_rngBufPut     20
     po_rngCreate     36
     po_rngDelete     12
     po_rngFlush       8
     po_rngIsEmpty    12
     po_rngNBytes      8
     po_strcmp         8
     po_unlock         4


   Segment part sizes:

     Function/Label                 Bytes
     --------------                 -----
     CPT_LOCK                          4
     po_unlock                        20
     po_lock                          22
     ?Subroutine13                     6
     po_malloc                        10
     po_free                          10
     po_memcpy                        22
     po_rngNBytes                     30
     po_rngFlush                      28
     po_rngIsEmpty                    32
     ?Subroutine14                    16
     po_rngBufPut                     74
     ?Subroutine15                     6
     po_rngBufGet                     80
     po_rngCreate                     68
     po_rngDelete                     38
     po_strcmp                        30
     ??DataTable1                      4
     ?<Constant "malloc %d fault!">   20
      Others                         192

 
 514 bytes in segment CODE
 150 bytes in segment CODE_I
  20 bytes in segment DATA_C
   4 bytes in segment DATA_Z
  24 bytes in segment INITTAB
 
 496 bytes of CODE  memory (+ 192 bytes shared)
  20 bytes of CONST memory
   4 bytes of DATA  memory

Errors: none
Warnings: none

⌨️ 快捷键说明

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