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

📄 ymodem.lst

📁 IAPBootLoader源程序是单片机ARM的在系统编程方法1
💻 LST
📖 第 1 页 / 共 3 页
字号:
   \                     ??Receive_Packet_9:
   \   000000C0   0000E0E3           MVN      R0,#+0
   \   000000C4   1C0000EA           B        ??Receive_Packet_1
    101                }
    102              case ABORT1:
    103              case ABORT2:
    104                return 1;
   \                     ??Receive_Packet_6:
   \   000000C8   0100A0E3           MOV      R0,#+1
   \   000000CC   1A0000EA           B        ??Receive_Packet_1
    105              default:
    106                return -1;
   \                     ??Receive_Packet_7:
   \   000000D0   0000E0E3           MVN      R0,#+0
   \   000000D4   180000EA           B        ??Receive_Packet_1
    107            }
    108            *data = c;
   \                     ??Receive_Packet_8:
   \   000000D8   0000DDE5           LDRB     R0,[SP, #+0]
   \   000000DC   0000C4E5           STRB     R0,[R4, #+0]
    109            for (i = 1; i < (packet_size + PACKET_OVERHEAD); i ++)
   \   000000E0   0100A0E3           MOV      R0,#+1
   \   000000E4   0070B0E1           MOVS     R7,R0
   \                     ??Receive_Packet_10:
   \   000000E8   050098E2           ADDS     R0,R8,#+5
   \   000000EC   000057E1           CMP      R7,R0
   \   000000F0   080000AA           BGE      ??Receive_Packet_11
    110            {
    111              if (Receive_Byte(data + i, timeout) != 0)
   \   000000F4   0610B0E1           MOVS     R1,R6
   \   000000F8   040097E0           ADDS     R0,R7,R4
   \   000000FC   ........           BL       Receive_Byte
   \   00000100   000050E3           CMP      R0,#+0
   \   00000104   0100000A           BEQ      ??Receive_Packet_12
    112              {
    113                return -1;
   \   00000108   0000E0E3           MVN      R0,#+0
   \   0000010C   0A0000EA           B        ??Receive_Packet_1
    114              }
    115            }
   \                     ??Receive_Packet_12:
   \   00000110   017097E2           ADDS     R7,R7,#+1
   \   00000114   F3FFFFEA           B        ??Receive_Packet_10
    116            if (data[PACKET_SEQNO_INDEX] != ((data[PACKET_SEQNO_COMP_INDEX] ^ 0xff) & 0xff))
   \                     ??Receive_Packet_11:
   \   00000118   0100D4E5           LDRB     R0,[R4, #+1]
   \   0000011C   0210D4E5           LDRB     R1,[R4, #+2]
   \   00000120   FF1031E2           EORS     R1,R1,#0xFF
   \   00000124   010050E1           CMP      R0,R1
   \   00000128   0100000A           BEQ      ??Receive_Packet_13
    117            {
    118              return -1;
   \   0000012C   0000E0E3           MVN      R0,#+0
   \   00000130   010000EA           B        ??Receive_Packet_1
    119            }
    120            *length = packet_size;
   \                     ??Receive_Packet_13:
   \   00000134   008085E5           STR      R8,[R5, #+0]
    121            return 0;
   \   00000138   0000A0E3           MOV      R0,#+0
   \                     ??Receive_Packet_1:
   \   0000013C   04D08DE2           ADD      SP,SP,#+4        ;; stack cleaning
   \   00000140   F081BDE8           POP      {R4-R8,PC}       ;; return
    122          }
    123          /*******************************************************************************
    124          * Function Name  : Ymodem_Receive
    125          * Description    : Receive a file using the ymodem protocol 
    126          * Input          : Address of the first byte 
    127          * Return         : The size of the file                                                               
    128          *******************************************************************************/

   \                                 In segment CODE, align 4, keep-with-next
    129          s32 Ymodem_Receive (char *buf)
    130          {
   \                     Ymodem_Receive:
   \   00000000   F14F2DE9           PUSH     {R0,R4-R11,LR}
   \   00000004   28D04DE2           SUB      SP,SP,#+40
   \   00000008   40DE4DE2           SUB      SP,SP,#+1024
    131            char packet_data[PACKET_1K_SIZE + PACKET_OVERHEAD], file_size[FILE_SIZE_LENGTH], *file_ptr, *buf_ptr;
    132            s32 i, j, packet_length, session_done, file_done, packets_received, errors, session_begin, size = 0;
   \   0000000C   0010A0E3           MOV      R1,#+0
   \   00000010   00108DE5           STR      R1,[SP, #+0]
    133            u32 Sector_Mask = 0;  
   \   00000014   0000A0E3           MOV      R0,#+0
   \   00000018   00B0B0E1           MOVS     R11,R0
    134            for (session_done = 0, errors = 0, session_begin = 0; ;)
   \   0000001C   0010A0E3           MOV      R1,#+0
   \   00000020   08108DE5           STR      R1,[SP, #+8]
   \   00000024   0000A0E3           MOV      R0,#+0
   \   00000028   0090B0E1           MOVS     R9,R0
   \   0000002C   0000A0E3           MOV      R0,#+0
   \   00000030   00A0B0E1           MOVS     R10,R0
    135            {
    136              for (packets_received = 0, file_done = 0, buf_ptr = buf; ;)
   \                     ??Ymodem_Receive_0:
   \   00000034   0000A0E3           MOV      R0,#+0
   \   00000038   0080B0E1           MOVS     R8,R0
   \   0000003C   0000A0E3           MOV      R0,#+0
   \   00000040   0070B0E1           MOVS     R7,R0
   \   00000044   28149DE5           LDR      R1,[SP, #+1064]
   \   00000048   0C108DE5           STR      R1,[SP, #+12]
    137              {
    138                switch (Receive_Packet(packet_data, &packet_length, NAK_TIMEOUT))
   \                     ??Ymodem_Receive_1:
   \   0000004C   F42AA0E3           MOV      R2,#+999424
   \   00000050   902F82E3           ORR      R2,R2,#0x240
   \   00000054   04108DE2           ADD      R1,SP,#+4
   \   00000058   20008DE2           ADD      R0,SP,#+32
   \   0000005C   ........           BL       Receive_Packet
   \   00000060   000050E3           CMP      R0,#+0
   \   00000064   0200000A           BEQ      ??Ymodem_Receive_2
   \   00000068   010050E3           CMP      R0,#+1
   \   0000006C   9B00000A           BEQ      ??Ymodem_Receive_3
   \   00000070   A00000EA           B        ??Ymodem_Receive_4
    139                {
    140                  case 0:
    141                    errors = 0;
   \                     ??Ymodem_Receive_2:
   \   00000074   0000A0E3           MOV      R0,#+0
   \   00000078   0090B0E1           MOVS     R9,R0
    142                     switch (packet_length)
   \   0000007C   04009DE5           LDR      R0,[SP, #+4]
   \   00000080   000050E3           CMP      R0,#+0
   \   00000084   0500000A           BEQ      ??Ymodem_Receive_5
   \   00000088   010070E3           CMN      R0,#+1
   \   0000008C   0800001A           BNE      ??Ymodem_Receive_6
    143                     {
    144                       case -1:    /* Abort by sender */
    145                         Send_Byte(ACK);
   \                     ??Ymodem_Receive_7:
   \   00000090   0600A0E3           MOV      R0,#+6
   \   00000094   ........           BL       Send_Byte
    146                         return 0;
   \   00000098   0000A0E3           MOV      R0,#+0
   \   0000009C   A80000EA           B        ??Ymodem_Receive_8
    147                       case 0:     /* End of transmission */
    148                         Send_Byte(ACK);
   \                     ??Ymodem_Receive_5:
   \   000000A0   0600A0E3           MOV      R0,#+6
   \   000000A4   ........           BL       Send_Byte
    149                         file_done = 1;
   \   000000A8   0100A0E3           MOV      R0,#+1
   \   000000AC   0070B0E1           MOVS     R7,R0
   \   000000B0   9D0000EA           B        ??Ymodem_Receive_9
    150                         break;
    151                       default:    /* Normal packet */
    152                         if ((packet_data[PACKET_SEQNO_INDEX] & 0xff) != (packets_received & 0xff))
   \                     ??Ymodem_Receive_6:
   \   000000B4   2100DDE5           LDRB     R0,[SP, #+33]
   \   000000B8   FF1018E2           ANDS     R1,R8,#0xFF
   \   000000BC   010050E1           CMP      R0,R1
   \   000000C0   0200000A           BEQ      ??Ymodem_Receive_10
    153                         {
    154                           Send_Byte(NAK);
   \   000000C4   1500A0E3           MOV      R0,#+21
   \   000000C8   ........           BL       Send_Byte
   \   000000CC   960000EA           B        ??Ymodem_Receive_9
    155                         }
    156                         else
    157                         {
    158                           if (packets_received == 0)   /* Filename packet */
   \                     ??Ymodem_Receive_10:
   \   000000D0   000058E3           CMP      R8,#+0
   \   000000D4   4600001A           BNE      ??Ymodem_Receive_11
    159                           {
    160                             if (packet_data[PACKET_HEADER] != 0)    /* Filename packet has valid data */
   \   000000D8   2300DDE5           LDRB     R0,[SP, #+35]
   \   000000DC   000050E3           CMP      R0,#+0
   \   000000E0   3C00000A           BEQ      ??Ymodem_Receive_12
    161                             {
    162                               for (i = 0, file_ptr = packet_data + PACKET_HEADER; (*file_ptr != 0) && (i < FILE_NAME_LENGTH);)
   \   000000E4   0000A0E3           MOV      R0,#+0
   \   000000E8   0050B0E1           MOVS     R5,R0
   \   000000EC   23008DE2           ADD      R0,SP,#+35
   \   000000F0   0040B0E1           MOVS     R4,R0
   \                     ??Ymodem_Receive_13:
   \   000000F4   0000D4E5           LDRB     R0,[R4, #+0]
   \   000000F8   000050E3           CMP      R0,#+0
   \   000000FC   0700000A           BEQ      ??Ymodem_Receive_14
   \   00000100   400F55E3           CMP      R5,#+256
   \   00000104   050000AA           BGE      ??Ymodem_Receive_14
    163                               {
    164                                 file_name[i++] = *file_ptr++;
   \   00000108   40029FE5           LDR      R0,??Ymodem_Receive_15  ;; file_name
   \   0000010C   0010D4E5           LDRB     R1,[R4, #+0]
   \   00000110   0010C5E7           STRB     R1,[R5, +R0]
   \   00000114   014094E2           ADDS     R4,R4,#+1
   \   00000118   015095E2           ADDS     R5,R5,#+1
   \   0000011C   F4FFFFEA           B        ??Ymodem_Receive_13
    165                               }
    166                               file_name[i++] = '\0';
   \                     ??Ymodem_Receive_14:
   \   00000120   28029FE5           LDR      R0,??Ymodem_Receive_15  ;; file_name
   \   00000124   0010A0E3           MOV      R1,#+0
   \   00000128   0010C5E7           STRB     R1,[R5, +R0]
   \   0000012C   015095E2           ADDS     R5,R5,#+1
    167                               for (i = 0, file_ptr ++; (*file_ptr != ' ') && (i < FILE_SIZE_LENGTH);)
   \   00000130   0000A0E3           MOV      R0,#+0
   \   00000134   0050B0E1           MOVS     R5,R0
   \   00000138   014094E2           ADDS     R4,R4,#+1
   \                     ??Ymodem_Receive_16:
   \   0000013C   0000D4E5           LDRB     R0,[R4, #+0]
   \   00000140   200050E3           CMP      R0,#+32
   \   00000144   0700000A           BEQ      ??Ymodem_Receive_17
   \   00000148   100055E3           CMP      R5,#+16
   \   0000014C   050000AA           BGE      ??Ymodem_Receive_17
    168                               {
    169                                 file_size[i++] = *file_ptr++;
   \   00000150   10008DE2           ADD      R0,SP,#+16
   \   00000154   0010D4E5           LDRB     R1,[R4, #+0]
   \   00000158   0010C5E7           STRB     R1,[R5, +R0]
   \   0000015C   014094E2           ADDS     R4,R4,#+1
   \   00000160   015095E2           ADDS     R5,R5,#+1
   \   00000164   F4FFFFEA           B        ??Ymodem_Receive_16
    170                               }
    171                               file_size[i++] = '\0';
   \                     ??Ymodem_Receive_17:
   \   00000168   10008DE2           ADD      R0,SP,#+16
   \   0000016C   0010A0E3           MOV      R1,#+0
   \   00000170   0010C5E7           STRB     R1,[R5, +R0]
   \   00000174   015095E2           ADDS     R5,R5,#+1
    172                               Str2Int(file_size, &size);
   \   00000178   0D10B0E1           MOVS     R1,SP
   \   0000017C   10008DE2           ADD      R0,SP,#+16
   \   00000180   ........           _BLF     Str2Int,??Str2Int??rA
    173                               
    174                               /* Test the size of the image to be sent */
    175                               if (size > 0x3E000)
   \   00000184   00009DE5           LDR      R0,[SP, #+0]
   \   00000188   0110A0E3           MOV      R1,#+1
   \   0000018C   F81B81E3           ORR      R1,R1,#0x3E000
   \   00000190   010050E1           CMP      R0,R1
   \   00000194   050000BA           BLT      ??Ymodem_Receive_18
    176                               {
    177                                 /* End session */
    178                                 Send_Byte(CAN);
   \   00000198   1800A0E3           MOV      R0,#+24
   \   0000019C   ........           BL       Send_Byte
    179                                 Send_Byte(CAN);
   \   000001A0   1800A0E3           MOV      R0,#+24
   \   000001A4   ........           BL       Send_Byte
    180                                 return -1;

⌨️ 快捷键说明

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