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

📄 uip.lis

📁 uIP是免费的TCP/IP协议栈,我们将它移植到我们的AVR以太网开发板中
💻 LIS
📖 第 1 页 / 共 5 页
字号:
 02A4           ; 
 02A4           ;       /* If we have come this far, we have a full packet in the
 02A4           ;        buffer, so we allocate a pbuf and copy the packet into it. We
 02A4           ;        also reset the timer. */
 02A4           ;       uip_reasstmr = 0;
 02A4           ;       memcpy(BUF, FBUF, uip_reasslen);
 02A4           ; 
 02A4           ;       /* Pretend to be a "normal" (i.e., not fragmented) IP packet
 02A4           ;        from now on. */
 02A4           ;       BUF->ipoffset[0] = BUF->ipoffset[1] = 0;
 02A4           ;       BUF->len[0] = uip_reasslen >> 8;
 02A4           ;       BUF->len[1] = uip_reasslen & 0xff;
 02A4           ;       BUF->ipchksum = 0;
 02A4           ;       BUF->ipchksum = ~(uip_ipchksum());
 02A4           ; 
 02A4           ;       return uip_reasslen;
 02A4           ;     }
 02A4           ;   }
 02A4           ; 
 02A4           ;  nullreturn:
 02A4           ;   return 0;
 02A4           ; }
 02A4           ; #endif /* UIP_REASSEMBL */
 02A4           ; /*-----------------------------------------------------------------------------------*/
 02A4           ; static void
 02A4           ; uip_add_rcv_nxt(u16_t n)
 02A4           ; {
 02A4                   .dbline 472
 02A4           ;   uip_add32(uip_conn->rcv_nxt, n);
 02A4 9501              movw R18,R10
 02A6 0091AF01          lds R16,_uip_conn
 02AA 1091B001          lds R17,_uip_conn+1
 02AE 085F              subi R16,248  ; offset = 8
 02B0 1F4F              sbci R17,255
 02B2 0E940000          xcall _uip_add32
 02B6                   .dbline 473
 02B6           ;   uip_conn->rcv_nxt[0] = uip_acc32[0];
 02B6 20904D00          lds R2,_uip_acc32
 02BA E091AF01          lds R30,_uip_conn
 02BE F091B001          lds R31,_uip_conn+1
 02C2 2086              std z+8,R2
 02C4                   .dbline 474
 02C4           ;   uip_conn->rcv_nxt[1] = uip_acc32[1];
 02C4 20904E00          lds R2,_uip_acc32+1
 02C8 E091AF01          lds R30,_uip_conn
 02CC F091B001          lds R31,_uip_conn+1
 02D0 2186              std z+9,R2
 02D2                   .dbline 475
 02D2           ;   uip_conn->rcv_nxt[2] = uip_acc32[2];
 02D2 20904F00          lds R2,_uip_acc32+2
 02D6 E091AF01          lds R30,_uip_conn
 02DA F091B001          lds R31,_uip_conn+1
 02DE 2286              std z+10,R2
 02E0                   .dbline 476
 02E0           ;   uip_conn->rcv_nxt[3] = uip_acc32[3];
 02E0 20905000          lds R2,_uip_acc32+3
 02E4 E091AF01          lds R30,_uip_conn
 02E8 F091B001          lds R31,_uip_conn+1
 02EC 2386              std z+11,R2
 02EE                   .dbline -2
 02EE           L57:
 02EE 0E940000          xcall pop_gset3x
 02F2                   .dbline 0 ; func end
 02F2 0895              ret
 02F4                   .dbsym r n 10 s
 02F4                   .dbend
 02F4                   .dbfunc e uip_process _uip_process fV
 02F4           ;              m -> R14
 02F4           ;      uip_connr -> y+0
 02F4           ;           flag -> R10
                        .even
 02F4           _uip_process::
 02F4 0E940000          xcall push_gset5x
 02F8 A02E              mov R10,R16
 02FA 2297              sbiw R28,2
 02FC                   .dbline -1
 02FC                   .dbline 481
 02FC           ; }
 02FC           ; /*-----------------------------------------------------------------------------------*/
 02FC           ; void
 02FC           ; uip_process(u8_t flag)
 02FC           ; {
 02FC                   .dbline 482
 02FC           ;   register struct uip_conn *uip_connr = uip_conn;
 02FC 2090AF01          lds R2,_uip_conn
 0300 3090B001          lds R3,_uip_conn+1
 0304 3982              std y+1,R3
 0306 2882              std y+0,R2
 0308                   .dbline 484
 0308           ;   
 0308           ;   uip_appdata = &uip_buf[40 + UIP_LLH_LEN];
 0308 80E0              ldi R24,<_uip_buf+54
 030A 90E0              ldi R25,>_uip_buf+54
 030C 9093BC01          sts _uip_appdata+1,R25
 0310 8093BB01          sts _uip_appdata,R24
 0314                   .dbline 488
 0314           ; 
 0314           ;   
 0314           ;   /* Check if we were invoked because of the perodic timer fireing. */
 0314           ;   if(flag == UIP_TIMER) {
 0314 8A2D              mov R24,R10
 0316 8230              cpi R24,2
 0318 09F0              breq X31
 031A F4C0              xjmp L63
 031C           X31:
 031C                   .dbline 488
 031C                   .dbline 495
 031C           ; #if UIP_REASSEMBLY
 031C           ;     if(uip_reasstmr != 0) {
 031C           ;       --uip_reasstmr;
 031C           ;     }
 031C           ; #endif /* UIP_REASSEMBLY */
 031C           ;     /* Increase the initial sequence number. */
 031C           ;     if(++iss[3] == 0) {
 031C 80910900          lds R24,_iss+3
 0320 8F5F              subi R24,255    ; addi 1
 0322 282E              mov R2,R24
 0324 20920900          sts _iss+3,R2
 0328 8823              tst R24
 032A A9F4              brne L65
 032C                   .dbline 495
 032C                   .dbline 496
 032C           ;       if(++iss[2] == 0) {
 032C 80910800          lds R24,_iss+2
 0330 8F5F              subi R24,255    ; addi 1
 0332 282E              mov R2,R24
 0334 20920800          sts _iss+2,R2
 0338 8823              tst R24
 033A 69F4              brne L68
 033C                   .dbline 496
 033C                   .dbline 497
 033C           ;       if(++iss[1] == 0) {
 033C 80910700          lds R24,_iss+1
 0340 8F5F              subi R24,255    ; addi 1
 0342 282E              mov R2,R24
 0344 20920700          sts _iss+1,R2
 0348 8823              tst R24
 034A 29F4              brne L71
 034C                   .dbline 497
 034C                   .dbline 498
 034C           ;         ++iss[0];
 034C 80910600          lds R24,_iss
 0350 8F5F              subi R24,255    ; addi 1
 0352 80930600          sts _iss,R24
 0356                   .dbline 499
 0356           ;       }
 0356           L71:
 0356                   .dbline 500
 0356           ;       }
 0356           L68:
 0356                   .dbline 501
 0356           ;     }    
 0356           L65:
 0356                   .dbline 502
 0356           ;     uip_len = 0;
 0356 2224              clr R2
 0358 3324              clr R3
 035A 3092B601          sts _uip_len+1,R3
 035E 2092B501          sts _uip_len,R2
 0362                   .dbline 503
 0362           ;     if(uip_connr->tcpstateflags == TIME_WAIT ||
 0362 E881              ldd R30,y+0
 0364 F981              ldd R31,y+1
 0366 218C              ldd R2,z+25
 0368 3324              clr R3
 036A 822D              mov R24,R2
 036C 8730              cpi R24,7
 036E 11F0              breq L76
 0370 8530              cpi R24,5
 0372 A1F4              brne L74
 0374           L76:
 0374                   .dbline 504
 0374           ;        uip_connr->tcpstateflags == FIN_WAIT_2) {
 0374                   .dbline 505
 0374           ;       ++(uip_connr->timer);
 0374 8881              ldd R24,y+0
 0376 9981              ldd R25,y+1
 0378 4A96              adiw R24,26
 037A FC01              movw R30,R24
 037C 8081              ldd R24,z+0
 037E 8F5F              subi R24,255    ; addi 1
 0380 8083              std z+0,R24
 0382                   .dbline 506
 0382           ;       if(uip_connr->timer == UIP_TIME_WAIT_TIMEOUT) {
 0382 E881              ldd R30,y+0
 0384 F981              ldd R31,y+1
 0386 828D              ldd R24,z+26
 0388 8837              cpi R24,120
 038A 11F0              breq X32
 038C 0C944A0B          xjmp L112
 0390           X32:
 0390                   .dbline 506
 0390                   .dbline 507
 0390           ;       uip_connr->tcpstateflags = CLOSED;
 0390 2224              clr R2
 0392 E881              ldd R30,y+0
 0394 F981              ldd R31,y+1
 0396 218E              std z+25,R2
 0398                   .dbline 508
 0398           ;       }
 0398                   .dbline 509
 0398 0C944A0B          xjmp L112
 039C           L74:
 039C                   .dbline 509
 039C           ;     } else if(uip_connr->tcpstateflags != CLOSED) {
 039C E881              ldd R30,y+0
 039E F981              ldd R31,y+1
 03A0 218C              ldd R2,z+25
 03A2 2220              tst R2
 03A4 11F4              brne X33
 03A6 0C944A0B          xjmp L112
 03AA           X33:
 03AA                   .dbline 509
 03AA                   .dbline 513
 03AA           ;       /* If the connection has outstanding data, we increase the
 03AA           ;        connection's timer and see if it has reached the RTO value
 03AA           ;        in which case we retransmit. */
 03AA           ;       if(uip_outstanding(uip_connr)) {
 03AA E881              ldd R30,y+0
 03AC F981              ldd R31,y+1
 03AE 2088              ldd R2,z+16
 03B0 3188              ldd R3,z+17
 03B2 2220              tst R2
 03B4 19F4              brne X4
 03B6 3320              tst R3
 03B8 09F4              brne X34
 03BA 8CC0              xjmp L81
 03BC           X34:
 03BC           X4:
 03BC                   .dbline 513
 03BC                   .dbline 514
 03BC           ;       if(uip_connr->timer-- == 0) {
 03BC 8881              ldd R24,y+0
 03BE 9981              ldd R25,y+1
 03C0 4A96              adiw R24,26
 03C2 FC01              movw R30,R24
 03C4 4080              ldd R4,z+0
 03C6 842D              mov R24,R4
 03C8 8150              subi R24,1
 03CA 8083              std z+0,R24
 03CC 4420              tst R4
 03CE 11F0              breq X35
 03D0 0C944A0B          xjmp L112
 03D4           X35:
 03D4                   .dbline 514
 03D4                   .dbline 515
 03D4           ;         if(uip_connr->nrtx == UIP_MAXRTX ||
 03D4 E881              ldd R30,y+0
 03D6 F981              ldd R31,y+1
 03D8 838D              ldd R24,z+27
 03DA 8830              cpi R24,8
 03DC 71F0              breq L87
 03DE E881              ldd R30,y+0
 03E0 F981              ldd R31,y+1
 03E2 218C              ldd R2,z+25
 03E4 3324              clr R3
 03E6 822D              mov R24,R2
 03E8 8230              cpi R24,2
 03EA 11F0              breq L88
 03EC 8130              cpi R24,1
 03EE 99F4              brne L85
 03F0           L88:
 03F0 E881              ldd R30,y+0
 03F2 F981              ldd R31,y+1
 03F4 838D              ldd R24,z+27
 03F6 8330              cpi R24,3
 03F8 71F4              brne L85
 03FA           L87:
 03FA                   .dbline 518
 03FA           ;            ((uip_connr->tcpstateflags == SYN_SENT ||
 03FA           ;              uip_connr->tcpstateflags == SYN_RCVD) &&
 03FA           ;             uip_connr->nrtx == UIP_MAXSYNRTX)) {
 03FA                   .dbline 519
 03FA           ;           uip_connr->tcpstateflags = CLOSED;
 03FA 2224              clr R2
 03FC E881              ldd R30,y+0
 03FE F981              ldd R31,y+1
 0400 218E              std z+25,R2
 0402                   .dbline 524
 0402           ; 
 0402           ;           /* We call UIP_APPCALL() with uip_flags set to
 0402           ;              UIP_TIMEDOUT to inform the application that the
 0402           ;              connection has timed out. */
 0402           ;           uip_flags = UIP_TIMEDOUT;
 0402 80E8              ldi R24,128
 0404 80932000          sts _uip_flags,R24
 0408                   .dbline 525
 0408           ;           UIP_APPCALL();
 0408 0E940000          xcall _httpd_appcall
 040C                   .dbline 528
 040C           ; 
 040C           ;           /* We also send a reset packet to the remote host. */
 040C           ;           BUF->flags = TCP_RST | TCP_ACK;
 040C 84E1              ldi R24,20
 040E 8093EC01          sts _uip_buf+14+33,R24
 0412                   .dbline 529
 0412           ;           goto tcp_send_nodata;
 0412 0C94760A          xjmp L91
 0416           L85:
 0416                   .dbline 533
 0416           ;         }
 0416           ; 
 0416           ;         /* Exponential backoff. */
 0416           ;         uip_connr->timer = UIP_RTO << (uip_connr->nrtx > 4?
 0416 84E0              ldi R24,4
 0418 E881              ldd R30,y+0
 041A F981              ldd R31,y+1
 041C 238C              ldd R2,z+27
 041E 8215              cp R24,R2
 0420 18F4              brsh L92

⌨️ 快捷键说明

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