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

📄 bfsa_internal.lst

📁 at91sam7x256 FREERTOS sd卡的读写程序
💻 LST
📖 第 1 页 / 共 5 页
字号:
   \   0000006C   391C               MOV         R1,R7
   \   0000006E   4143               MUL         R1,R0
   \   00000070   02B4               PUSH        {R1}
   \   00000072   9446               MOV         R12,R2
   \   00000074   ....               LDR         R1,??DataTable20   ;; FlashBaseAdd
   \   00000076   0968               LDR         R1,[R1, #+0]
   \   00000078   B21E               SUB         R2,R6,#+2
   \   0000007A   4243               MUL         R2,R0
   \   0000007C   288A               LDRH        R0,[R5, #+16]
   \   0000007E   1018               ADD         R0,R2,R0
   \   00000080   7843               MUL         R0,R7
   \   00000082   0818               ADD         R0,R1,R0
   \   00000084   6246               MOV         R2,R12
   \   00000086   02BC               POP         {R1}
   \   00000088   ........           _BLF        AT91F_Flash_Write_Address,??AT91F_Flash_Write_Address??rT
   \   0000008C   0028               CMP         R0,#+0
   \   0000008E   E4D1               BNE         ??findFreeCluster_4
   \   00000090   2878               LDRB        R0,[R5, #+0]
   \   00000092   0028               CMP         R0,#+0
   \   00000094   BFD1               BNE         ??findFreeCluster_1
   \   00000096   ....               LDR         R1,??DataTable21   ;; 0xff7
   \   00000098   BEE7               B           ??findFreeCluster_2
    405          }
    406          
    407          /*****************************************************************
    408          *
    409          *
    410          * S U B - R O U T I N E  : getNextCluster
    411          *
    412          *-----------------------------------------------------------------
    413          *
    414          * int getNextCluster(USHORT uCurrent)
    415          *
    416          * Object :
    417          *   This function returns the next cluster from the FAT for the
    418          *   current cluster.
    419          *
    420          * Argument:
    421          *       uCurrent        :[IN] current cluster.
    422          *
    423          * Return value :
    424          *       the next cluster if any,
    425          *       0 if there is no more cluster in chain
    426          *       on error :
    427          *                       BAD_ARGUMENT
    428          *
    429          *****************************************************************/

   \                                 In segment CODE, align 4, keep-with-next
    430          ULONG getNextCluster(USHORT uCurrent)
    431          {
   \                     getNextCluster:
   \   00000000   10B5               PUSH        {R4,LR}
    432            ULONG status = BFSA_SUCCESS;
    433          
    434            if (uCurrent > BFSA_media.MaxCluster)
   \   00000002   ....               LDR         R4,??DataTable22   ;; BFSA_media
   \   00000004   6169               LDR         R1,[R4, #+20]
   \   00000006   8142               CMP         R1,R0
   \   00000008   01D2               BCS         ??getNextCluster_0
    435            {
    436              status = BAD_ARGUMENT;
   \   0000000A   ....               LDR         R0,??DataTable23   ;; 0x80000400
   \   0000000C   1AE0               B           ??getNextCluster_1
    437            }
    438            else
    439            {
    440              status = readFatEntry(uCurrent);
   \                     ??getNextCluster_0:
   \   0000000E   ........           BL          readFatEntry
    441          
    442              if( ((BFSA_media.FATtype == BFSA_FAT16)&&(status == EOC16 || status == 0xFFF8 || status == BAD16))
    443                || ((BFSA_media.FATtype == BFSA_FAT12)&&(status == EOC12 || status == 0x0FF8 || status == BAD12)) )
   \   00000012   2178               LDRB        R1,[R4, #+0]
   \   00000014   0129               CMP         R1,#+1
   \   00000016   09D1               BNE         ??getNextCluster_2
   \   00000018   ....               LDR         R1,??DataTable24   ;; 0xffff
   \   0000001A   8842               CMP         R0,R1
   \   0000001C   11D0               BEQ         ??getNextCluster_3
   \   0000001E   C91F               SUB         R1,R1,#+7
   \   00000020   8842               CMP         R0,R1
   \   00000022   0ED0               BEQ         ??getNextCluster_3
   \   00000024   491E               SUB         R1,R1,#+1
   \   00000026   8842               CMP         R0,R1
   \   00000028   0CD1               BNE         ??getNextCluster_1
   \   0000002A   0AE0               B           ??getNextCluster_3
   \                     ??getNextCluster_2:
   \   0000002C   0029               CMP         R1,#+0
   \   0000002E   09D1               BNE         ??getNextCluster_1
   \   00000030   ....               LDR         R1,??DataTable25   ;; 0xfff
   \   00000032   8842               CMP         R0,R1
   \   00000034   05D0               BEQ         ??getNextCluster_3
   \   00000036   C91F               SUB         R1,R1,#+7
   \   00000038   8842               CMP         R0,R1
   \   0000003A   02D0               BEQ         ??getNextCluster_3
   \   0000003C   491E               SUB         R1,R1,#+1
   \   0000003E   8842               CMP         R0,R1
   \   00000040   00D1               BNE         ??getNextCluster_1
    444              {
    445                // No more Cluster in chain
    446                status = BFSA_SUCCESS;
   \                     ??getNextCluster_3:
   \   00000042   0020               MOV         R0,#+0
    447              }
    448            }
    449            return( status );
   \                     ??getNextCluster_1:
   \   00000044   ....               B           ?Subroutine15
    450          }
    451          
    452          
    453          /*****************************************************************
    454          *
    455          *
    456          * S U B - R O U T I N E  : isValidFileNameChar
    457          *
    458          *-----------------------------------------------------------------
    459          *
    460          * UCHAR isValidFileNameChar(char car)
    461          *
    462          * Object :
    463          *   This function returns TRUE if car is a valid character in a
    464          *   file name.
    465          *
    466          * Argument:
    467          *       car             :[IN] character to test.
    468          *
    469          *****************************************************************/
    470          #ifdef ADS_COMPIL
    471            __inline
    472          #else

   \                                 In segment CODE, align 4, keep-with-next
    473            inline
    474          #endif
    475          UCHAR isValidFileNameChar( char car )
    476          {
   \                     isValidFileNameChar:
   \   00000000   011C               MOV         R1,R0
    477            UCHAR status = TRUE;
   \   00000002   0120               MOV         R0,#+1
    478          
    479            // Invalid char
    480            if( (car < 0x20) && (car != 0x05) )
   \   00000004   2029               CMP         R1,#+32
   \   00000006   03D2               BCS         ??isValidFileNameChar_0
   \   00000008   0529               CMP         R1,#+5
   \   0000000A   07D0               BEQ         ??isValidFileNameChar_1
    481            {
    482              status = FALSE;
   \                     ??isValidFileNameChar_2:
   \   0000000C   0020               MOV         R0,#+0
   \   0000000E   05E0               B           ??isValidFileNameChar_1
    483            }
    484            else
    485            {
    486                    // Lower case not allowed
    487                    if( (car >='a') && (car <='z') )
   \                     ??isValidFileNameChar_0:
   \   00000010   6129               CMP         R1,#+97
   \   00000012   05D3               BCC         ??isValidFileNameChar_3
   \   00000014   7B29               CMP         R1,#+123
   \   00000016   F9D3               BCC         ??isValidFileNameChar_2
   \   00000018   7C29               CMP         R1,#+124
   \   0000001A   F7D0               BEQ         ??isValidFileNameChar_2
    488                    {      
    489                            status = FALSE;
    490                    } 
    491                    else
    492                    {
    493                            // Invalid char
    494                            /* 0x22 : '"', 0x2A : '*', 0x2B : '+', 0x2C : ',', 0x2E : '.', 0x2F : '/' */
    495                            /* 0x3A : '',  0x3B : ';', 0x3C : '<', 0x3D : '=', 0x3E : '>', 0x3F : '?' */
    496                            /* 0x5B : '[', 0x5C : '\', 0x5D : ']', 0x7C : '|' */
    497                            if ( (car==0x22) || (car==0x2A) || (car==0x2B) || (car==0x2C) || (car==0x2E) || (car==0x2F)
    498                              || (car==0x3A) || (car==0x3B) || (car==0x3C) || (car==0x3D) || (car==0x3E) || (car==0x3F)
    499                              || (car==0x5B) || (car==0x5C) || (car==0x5D) || (car==0x7C) )
    500                            {
    501                              status = FALSE;
    502                            }
    503                    }
    504                    
    505            }
    506            return( status );
   \                     ??isValidFileNameChar_1:
   \   0000001C   00B0               ADD         SP,#+0
   \   0000001E   7047               BX          LR                 ;; return
   \                     ??isValidFileNameChar_3:
   \   00000020   2229               CMP         R1,#+34
   \   00000022   F3D0               BEQ         ??isValidFileNameChar_2
   \   00000024   2A29               CMP         R1,#+42
   \   00000026   F1D0               BEQ         ??isValidFileNameChar_2
   \   00000028   2B29               CMP         R1,#+43
   \   0000002A   EFD0               BEQ         ??isValidFileNameChar_2
   \   0000002C   2C29               CMP         R1,#+44
   \   0000002E   EDD0               BEQ         ??isValidFileNameChar_2
   \   00000030   2E29               CMP         R1,#+46
   \   00000032   EBD0               BEQ         ??isValidFileNameChar_2
   \   00000034   2F29               CMP         R1,#+47
   \   00000036   E9D0               BEQ         ??isValidFileNameChar_2
   \   00000038   3A29               CMP         R1,#+58
   \   0000003A   E7D0               BEQ         ??isValidFileNameChar_2
   \   0000003C   3B29               CMP         R1,#+59
   \   0000003E   E5D0               BEQ         ??isValidFileNameChar_2
   \   00000040   3C29               CMP         R1,#+60
   \   00000042   E3D0               BEQ         ??isValidFileNameChar_2
   \   00000044   3D29               CMP         R1,#+61
   \   00000046   E1D0               BEQ         ??isValidFileNameChar_2
   \   00000048   3E29               CMP         R1,#+62
   \   0000004A   DFD0               BEQ         ??isValidFileNameChar_2
   \   0000004C   3F29               CMP         R1,#+63
   \   0000004E   DDD0               BEQ         ??isValidFileNameChar_2
   \   00000050   5B29               CMP         R1,#+91
   \   00000052   DBD0               BEQ         ??isValidFileNameChar_2
   \   00000054   5C29               CMP         R1,#+92
   \   00000056   D9D0               BEQ         ??isValidFileNameChar_2
   \   00000058   5D29               CMP         R1,#+93
   \   0000005A   DFD1               BNE         ??isValidFileNameChar_1
   \   0000005C   D6E7               B           ??isValidFileNameChar_2
    507          }
    508          
    509          /*****************************************************************
    510          *
    511          *
    512          * S U B - R O U T I N E  : isValidFileName
    513          *
    514          *-----------------------------------------------------------------
    515          *
    516          * UCHAR isValidFileName(char *fileName)
    517          *
    518          * Object :
    519          *   This function returns TRUE if the file name is valid.
    520          *
    521          * Argument:
    522          *       fileName        :[IN] file name string.
    523          *
    524          *****************************************************************/

   \                                 In segment CODE, align 4, keep-with-next
    525          UCHAR isValidFileName(char *fileName)
    526          {
   \                     isValidFileName:
   \   00000000   30B5               PUSH        {R4,R5,LR}
   \   00000002   041C               MOV         R4,R0
    527            UCHAR _c;
    528          
    529            if (!fileName)

⌨️ 快捷键说明

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