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

📄 uip.lis

📁 uIP是免费的TCP/IP协议栈,我们将它移植到我们的AVR以太网开发板中
💻 LIS
📖 第 1 页 / 共 5 页
字号:
 0422 9927              clr R25
 0424 5C01              movw R10,R24
 0426 04C0              xjmp L93
 0428           L92:
 0428 E881              ldd R30,y+0
 042A F981              ldd R31,y+1
 042C A38C              ldd R10,z+27
 042E BB24              clr R11
 0430           L93:
 0430 03E0              ldi R16,3
 0432 10E0              ldi R17,0
 0434 9501              movw R18,R10
 0436 0E940000          xcall lsl16
 043A 202E              mov R2,R16
 043C E881              ldd R30,y+0
 043E F981              ldd R31,y+1
 0440 228E              std z+26,R2
 0442                   .dbline 536
 0442           ;                                        4:
 0442           ;                                        uip_connr->nrtx);
 0442           ;         ++(uip_connr->nrtx);
 0442 8881              ldd R24,y+0
 0444 9981              ldd R25,y+1
 0446 4B96              adiw R24,27
 0448 FC01              movw R30,R24
 044A 8081              ldd R24,z+0
 044C 8F5F              subi R24,255    ; addi 1
 044E 8083              std z+0,R24
 0450                   .dbline 544
 0450           ;         
 0450           ;         /* Ok, so we need to retransmit. We do this differently
 0450           ;            depending on which state we are in. In ESTABLISHED, we
 0450           ;            call upon the application so that it may prepare the
 0450           ;            data for the retransmit. In SYN_RCVD, we resend the
 0450           ;            SYNACK that we sent earlier and in LAST_ACK we have to
 0450           ;            retransmit our FINACK. */
 0450           ;         UIP_STAT(++uip_stat.tcp.rexmit);
 0450 80914700          lds R24,_uip_stat+26+12
 0454 90914800          lds R25,_uip_stat+26+12+1
 0458 0196              adiw R24,1
 045A 90934800          sts _uip_stat+26+12+1,R25
 045E 80934700          sts _uip_stat+26+12,R24
 0462                   .dbline 545
 0462 E881              ldd R30,y+0
 0464 F981              ldd R31,y+1
 0466 818D              ldd R24,z+25
 0468 9927              clr R25
 046A 8F70              andi R24,15
 046C 9070              andi R25,0
 046E 5C01              movw R10,R24
 0470 8130              cpi R24,1
 0472 E0E0              ldi R30,0
 0474 9E07              cpc R25,R30
 0476 09F4              brne X36
 0478 13C4              xjmp L100
 047A           X36:
 047A 8230              cpi R24,2
 047C E0E0              ldi R30,0
 047E 9E07              cpc R25,R30
 0480 A9F0              breq L101
 0482 8330              cpi R24,3
 0484 E0E0              ldi R30,0
 0486 9E07              cpc R25,R30
 0488 A9F0              breq L105
 048A 8430              cpi R24,4
 048C E0E0              ldi R30,0
 048E 9E07              cpc R25,R30
 0490 09F4              brne X37
 0492 41C6              xjmp L108
 0494           X37:
 0494 8630              cpi R24,6
 0496 E0E0              ldi R30,0
 0498 9E07              cpc R25,R30
 049A 09F4              brne X38
 049C 3CC6              xjmp L108
 049E           X38:
 049E 8830              cpi R24,8
 04A0 E0E0              ldi R30,0
 04A2 9E07              cpc R25,R30
 04A4 09F4              brne X39
 04A6 37C6              xjmp L108
 04A8           X39:
 04A8 0C944A0B          xjmp L112
 04AC           X5:
 04AC                   .dbline 545
 04AC           ;         switch(uip_connr->tcpstateflags & TS_MASK) {
 04AC                   .dbline 549
 04AC           ;         case SYN_RCVD:
 04AC           ;           /* In the SYN_RCVD state, we should retransmit our
 04AC           ;                SYNACK. */
 04AC           ;           goto tcp_send_synack;
 04AC           L101:
 04AC                   .dbline 554
 04AC           ;           
 04AC           ; #if UIP_ACTIVE_OPEN
 04AC           ;         case SYN_SENT:
 04AC           ;           /* In the SYN_SENT state, we retransmit out SYN. */
 04AC           ;           BUF->flags = 0;
 04AC 2224              clr R2
 04AE 2092EC01          sts _uip_buf+14+33,R2
 04B2                   .dbline 555
 04B2           ;           goto tcp_send_syn;
 04B2 F9C3              xjmp L104
 04B4           L105:
 04B4                   .dbline 563
 04B4           ; #endif /* UIP_ACTIVE_OPEN */
 04B4           ;           
 04B4           ;         case ESTABLISHED:
 04B4           ;           /* In the ESTABLISHED state, we call upon the application
 04B4           ;                to do the actual retransmit after which we jump into
 04B4           ;                the code for sending out the packet (the apprexmit
 04B4           ;                label). */
 04B4           ;           uip_len = 0;
 04B4 2224              clr R2
 04B6 3324              clr R3
 04B8 3092B601          sts _uip_len+1,R3
 04BC 2092B501          sts _uip_len,R2
 04C0                   .dbline 564
 04C0           ;           uip_slen = 0;
 04C0 3092B401          sts _uip_slen+1,R3
 04C4 2092B301          sts _uip_slen,R2
 04C8                   .dbline 565
 04C8           ;           uip_flags = UIP_REXMIT;
 04C8 84E0              ldi R24,4
 04CA 80932000          sts _uip_flags,R24
 04CE                   .dbline 566
 04CE           ;           UIP_APPCALL();
 04CE 0E940000          xcall _httpd_appcall
 04D2                   .dbline 567
 04D2           ;           goto apprexmit;
 04D2 42C7              xjmp L106
 04D4           X6:
 04D4                   .dbline 573
 04D4           ;           
 04D4           ;         case FIN_WAIT_1:
 04D4           ;         case CLOSING:
 04D4           ;         case LAST_ACK:
 04D4           ;           /* In all these states we should retransmit a FINACK. */
 04D4           ;           goto tcp_send_finack;
 04D4                   .dbline 576
 04D4           ;           
 04D4           ;         }
 04D4           ;       }
 04D4                   .dbline 577
 04D4           L81:
 04D4                   .dbline 577
 04D4           ;       } else if((uip_connr->tcpstateflags & TS_MASK) == ESTABLISHED) {
 04D4 E881              ldd R30,y+0
 04D6 F981              ldd R31,y+1
 04D8 818D              ldd R24,z+25
 04DA 8F70              andi R24,15
 04DC 8330              cpi R24,3
 04DE 11F0              breq X40
 04E0 0C944A0B          xjmp L112
 04E4           X40:
 04E4                   .dbline 577
 04E4                   .dbline 580
 04E4           ;       /* If there was no need for a retransmission, we poll the
 04E4           ;            application for new data. */
 04E4           ;       uip_len = 0;
 04E4 2224              clr R2
 04E6 3324              clr R3
 04E8 3092B601          sts _uip_len+1,R3
 04EC 2092B501          sts _uip_len,R2
 04F0                   .dbline 581
 04F0           ;       uip_slen = 0;
 04F0 3092B401          sts _uip_slen+1,R3
 04F4 2092B301          sts _uip_slen,R2
 04F8                   .dbline 582
 04F8           ;       uip_flags = UIP_POLL;
 04F8 88E0              ldi R24,8
 04FA 80932000          sts _uip_flags,R24
 04FE                   .dbline 583
 04FE           ;       UIP_APPCALL();
 04FE 0E940000          xcall _httpd_appcall
 0502                   .dbline 584
 0502           ;       goto appsend;
 0502 B4C6              xjmp L111
 0504           X7:
 0504                   .dbline 586
 0504           ;       }
 0504           ;     }
 0504                   .dbline 587
 0504           ;     goto drop;
 0504           L63:
 0504                   .dbline 604
 0504           ;   }
 0504           ; #if UIP_UDP 
 0504           ;   if(flag == UIP_UDP_TIMER) {
 0504           ;     if(uip_udp_conn->lport != 0) {
 0504           ;       uip_appdata = &uip_buf[UIP_LLH_LEN + 28];
 0504           ;       uip_len = uip_slen = 0;
 0504           ;       uip_flags = UIP_POLL;
 0504           ;       UIP_UDP_APPCALL();
 0504           ;       goto udp_send;
 0504           ;     } else {
 0504           ;       goto drop;
 0504           ;     }
 0504           ;   }
 0504           ; #endif
 0504           ; 
 0504           ;   /* This is where the input processing starts. */
 0504           ;   UIP_STAT(++uip_stat.ip.recv);
 0504 80912300          lds R24,_uip_stat+2
 0508 90912400          lds R25,_uip_stat+2+1
 050C 0196              adiw R24,1
 050E 90932400          sts _uip_stat+2+1,R25
 0512 80932300          sts _uip_stat+2,R24
 0516                   .dbline 610
 0516           ; 
 0516           ; 
 0516           ;   /* Start of IPv4 input header processing code. */
 0516           ;   
 0516           ;   /* Check validity of the IP header. */  
 0516           ;   if(BUF->vhl != 0x45)  { /* IP version and header length. */
 0516 E0E0              ldi R30,<_uip_buf+14
 0518 F0E0              ldi R31,>_uip_buf+14
 051A 8081              ldd R24,z+0
 051C 8534              cpi R24,69
 051E A1F0              breq L114
 0520                   .dbline 610
 0520                   .dbline 611
 0520           ;     UIP_STAT(++uip_stat.ip.drop);
 0520 80912100          lds R24,_uip_stat
 0524 90912200          lds R25,_uip_stat+1
 0528 0196              adiw R24,1
 052A 90932200          sts _uip_stat+1,R25
 052E 80932100          sts _uip_stat,R24
 0532                   .dbline 612
 0532           ;     UIP_STAT(++uip_stat.ip.vhlerr);
 0532 80912700          lds R24,_uip_stat+6
 0536 90912800          lds R25,_uip_stat+6+1
 053A 0196              adiw R24,1
 053C 90932800          sts _uip_stat+6+1,R25
 0540 80932700          sts _uip_stat+6,R24
 0544                   .dbline 613
 0544           ;     UIP_LOG("ip: invalid version or header length.");
 0544                   .dbline 614
 0544           ;     goto drop;
 0544 0C944A0B          xjmp L112
 0548           L114:
 0548                   .dbline 621
 0548           ;   }
 0548           ;   
 0548           ;   /* Check the size of the packet. If the size reported to us in
 0548           ;      uip_len doesn't match the size reported in the IP header, there
 0548           ;      has been a transmission error and we drop the packet. */
 0548           ;   
 0548           ;   if(BUF->len[0] != (uip_len >> 8)) { /* IP length, high byte. */
 0548 2090B501          lds R2,_uip_len
 054C 3090B601          lds R3,_uip_len+1
 0550 232C              mov R2,R3
 0552 3324              clr R3
 0554 4090CD01          lds R4,_uip_buf+14+2
 0558 5524              clr R5
 055A 4214              cp R4,R2
 055C 5304              cpc R5,R3
 055E 79F0              breq L118
 0560                   .dbline 621
 0560                   .dbline 622
 0560           ;     uip_len = (uip_len & 0xff) | (BUF->len[0] << 8);
 0560 242C              mov R2,R4
 0562 3324              clr R3
 0564 322C              mov R3,R2
 0566 2224              clr R2
 0568 8091B501          lds R24,_uip_len
 056C 9091B601          lds R25,_uip_len+1
 0570 9070              andi R25,0
 0572 8229              or R24,R2
 0574 9329              or R25,R3
 0576 9093B601          sts _uip_len+1,R25
 057A 8093B501          sts _uip_len,R24
 057E                   .dbline 623
 057E           ;   }
 057E           L118:
 057E                   .dbline 624
 057E           ;   if(BUF->len[1] != (uip_len & 0xff)) { /* IP length, low byte. */
 057E 8091B501          lds R24,_uip_len
 0582 9091B601          lds R25,_uip_len+1
 0586 9070              andi R25,0
 0588 2090CE01          lds R2,_uip_buf+14+2+1
 058C 3324              clr R3
 058E 2816              cp R2,R24
 0590 3906              cpc R3,R25
 0592 61F0              breq L124
 0594                   .dbline 624
 0594                   .dbline 625
 0594           ;     uip_len = (uip_len & 0xff00) | BUF->len[1];
 0594 3324              clr R3
 0596 8091B501          lds R24,_uip_len
 059A 9091B601          lds R25,_uip_len+1
 059E 8070              andi R24,0
 05A0 8229              or R24,R2
 05A2 9329              or R25,R3
 05A4 9093B601          sts _uip_len+1,R25
 05A8 8093B501          sts _uip_len,R24
 05AC                   .dbline 626
 05AC           ;   }
 05AC           L124:
 05AC                   .dbline 629
 05AC           ; 
 05AC           ;   /* Check the fragment flag. */
 05AC           ;   if((BUF->ipoffset[0] & 0x3f) != 0 ||
 05AC 8091D101          lds R24,_uip_buf+14+6
 05B0 8F73              andi R24,63
 05B2 21

⌨️ 快捷键说明

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