📄 httpserv.s
字号:
movw R16,R10
xcall _fprintf_P
.dbline 330
; if (req->req_url)
movw R30,R20
ldd R2,z+8
ldd R3,z+9
tst R2
brne X5
tst R3
breq L33
X5:
.dbline 331
; fprintf_P(stream, url_fmt, req->req_url);
std y+1,R3
std y+0,R2
ldi R18,<L16
ldi R19,>L16
movw R16,R10
xcall _fprintf_P
L33:
.dbline 332
; if (req->req_query)
movw R30,R20
ldd R2,z+10
ldd R3,z+11
tst R2
brne X6
tst R3
breq L35
X6:
.dbline 333
; fprintf_P(stream, query_fmt, req->req_query);
std y+1,R3
std y+0,R2
ldi R18,<L17
ldi R19,>L17
movw R16,R10
xcall _fprintf_P
L35:
.dbline 334
; if (req->req_type)
movw R30,R20
ldd R2,z+12
ldd R3,z+13
tst R2
brne X7
tst R3
breq L37
X7:
.dbline 335
; fprintf_P(stream, type_fmt, req->req_type);
std y+1,R3
std y+0,R2
ldi R18,<L18
ldi R19,>L18
movw R16,R10
xcall _fprintf_P
L37:
.dbline 336
; if (req->req_cookie)
movw R30,R20
ldd R2,z+14
ldd R3,z+15
tst R2
brne X8
tst R3
breq L39
X8:
.dbline 337
; fprintf_P(stream, cookie_fmt, req->req_cookie);
std y+1,R3
std y+0,R2
ldi R18,<L19
ldi R19,>L19
movw R16,R10
xcall _fprintf_P
L39:
.dbline 338
; if (req->req_auth)
movw R30,R20
ldd R2,z+16
ldd R3,z+17
tst R2
brne X9
tst R3
breq L41
X9:
.dbline 339
; fprintf_P(stream, auth_fmt, req->req_auth);
std y+1,R3
std y+0,R2
ldi R18,<L20
ldi R19,>L20
movw R16,R10
xcall _fprintf_P
L41:
.dbline 340
; if (req->req_agent)
movw R30,R20
ldd R2,z+18
ldd R3,z+19
tst R2
brne X10
tst R3
breq L43
X10:
.dbline 341
; fprintf_P(stream, agent_fmt, req->req_agent);
std y+1,R3
std y+0,R2
ldi R18,<L21
ldi R19,>L21
movw R16,R10
xcall _fprintf_P
L43:
.dbline 344
;
; /* Send HTML footer and flush output buffer. */
; fputs_P(foot, stream);
movw R18,R10
ldi R16,<L14
ldi R17,>L14
xcall _fputs_P
.dbline 345
; fflush(stream);
movw R16,R10
xcall _fflush
.dbline 347
;
; return 0;
clr R16
clr R17
.dbline -2
L12:
.dbline 0 ; func end
adiw R28,10
xjmp pop_xgsetF00C
.dbsym r cp 22 pc
.dbsym r req 20 pS[_REQUEST]
.dbsym r stream 10 pS[__iobuf]
.dbend
.area lit(rom, con, rel)
L46:
.byte 60,'H,'T,'M,'L,62,60,'H,'E,'A,'D,62,60,'T,'I,'T
.byte 'L,'E,62,'T,'h,'r,'e,'a,'d,'s,60,47,'T,'I,'T,'L
.byte 'E,62,60,47,'H,'E,'A,'D,62,60,'B,'O,'D,'Y,62,60
.byte 'H,49,62,'T,'h,'r,'e,'a,'d,'s,60,47,'H,49,62,13
.byte 10,60,'T,'A,'B,'L,'E,32,'B,'O,'R,'D,'E,'R,62,60
.byte 'T,'R,62,60,'T,'H,62,'H,'a,'n,'d,'l,'e,60,47,'T
.byte 'H,62,60,'T,'H,62,'N,'a,'m,'e,60,47,'T,'H,62,60
.byte 'T,'H,62,'P,'r,'i,'o,'r,'i,'t,'y,60,47,'T,'H,62
.byte 60,'T,'H,62,'S,'t,'a,'t,'u,'s,60,47,'T,'H,62,60
.byte 'T,'H,62,'E,'v,'e,'n,'t,60,'B,'R,62,'Q,'u,'e,'u
.byte 'e,60,47,'T,'H,62,60,'T,'H,62,'T,'i,'m,'e,'r,60
.byte 47,'T,'H,62,60,'T,'H,62,'S,'t,'a,'c,'k,45,60,'B
.byte 'R,62,'p,'o,'i,'n,'t,'e,'r,60,47,'T,'H,62,60,'T
.byte 'H,62,'F,'r,'e,'e,60,'B,'R,62,'S,'t,'a,'c,'k,60
.byte 47,'T,'H,62,60,47,'T,'R,62,13,10,0
L47:
.byte 60,'T,'R,62,60,'T,'D,62,37,48,52,'X,60,47,'T,'D
.byte 62,60,'T,'D,62,37,'s,60,47,'T,'D,62,60,'T,'D,62
.byte 37,'u,60,47,'T,'D,62,60,'T,'D,62,37,'s,60,47,'T
.byte 'D,62,60,'T,'D,62,37,48,52,'X,60,47,'T,'D,62,60
.byte 'T,'D,62,37,48,52,'X,60,47,'T,'D,62,60,'T,'D,62
.byte 37,48,52,'X,60,47,'T,'D,62,60,'T,'D,62,37,'u,60
.byte 47,'T,'D,62,60,'T,'D,62,37,'s,60,47,'T,'D,62,60
.byte 47,'T,'R,62,13,10,0
L48:
.byte 60,47,'T,'A,'B,'L,'E,62,60,47,'B,'O,'D,'Y,62,60
.byte 47,'H,'T,'M,'L,62,0
.area data(ram, con, rel)
.dbfile C:\ethernut-4.9.7\nutapp_13h\httpd\httpserv.c
L49:
.blkw 1
.area idata
.word L50
.area data(ram, con, rel)
.dbfile C:\ethernut-4.9.7\nutapp_13h\httpd\httpserv.c
.blkw 1
.area idata
.word L51
.area data(ram, con, rel)
.dbfile C:\ethernut-4.9.7\nutapp_13h\httpd\httpserv.c
.blkw 1
.area idata
.word L52
.area data(ram, con, rel)
.dbfile C:\ethernut-4.9.7\nutapp_13h\httpd\httpserv.c
.blkw 1
.area idata
.word L53
.area data(ram, con, rel)
.dbfile C:\ethernut-4.9.7\nutapp_13h\httpd\httpserv.c
.area text(rom, con, rel)
.dbfile C:\ethernut-4.9.7\nutapp_13h\httpd\httpserv.c
.dbfunc s ShowThreads _ShowThreads fI
.dbstruct 0 25 _NUTTHREADINFO
.dbfield 0 td_next pS[_NUTTHREADINFO]
.dbfield 2 td_qnxt pS[_NUTTHREADINFO]
.dbfield 4 td_qpec i
.dbfield 6 td_name A[9:9]c
.dbfield 15 td_state c
.dbfield 16 td_sp i
.dbfield 18 td_priority c
.dbfield 19 td_memory pc
.dbfield 21 td_timer pV
.dbfield 23 td_queue pV
.dbend
.dbsym s thread_states L49 A[8:4]pc
.dbsym s foot L48 A[23:23]kc
.dbsym s tfmt L47 A[119:119]kc
.dbsym s head L46 A[236:236]kc
; tdp -> R20,R21
; req -> R12,R13
; stream -> R10,R11
.even
_ShowThreads:
xcall push_xgsetF03C
movw R12,R18
movw R10,R16
sbiw R28,18
.dbline -1
.dbline 358
; }
;
; /*
; * CGI Sample: Show list of threads.
; *
; * This routine must have been registered by NutRegisterCgi() and is
; * automatically called by NutHttpProcessRequest() when the client
; * request the URL 'cgi-bin/threads.cgi'.
; */
; static int ShowThreads(FILE * stream, REQUEST * req)
; {
.dbline 370
; static prog_char head[] = "<HTML><HEAD><TITLE>Threads</TITLE></HEAD><BODY><H1>Threads</H1>\r\n"
; "<TABLE BORDER><TR><TH>Handle</TH><TH>Name</TH><TH>Priority</TH><TH>Status</TH><TH>Event<BR>Queue</TH><TH>Timer</TH><TH>Stack-<BR>pointer</TH><TH>Free<BR>Stack</TH></TR>\r\n";
; #if defined(__AVR__)
; static prog_char tfmt[] =
; "<TR><TD>%04X</TD><TD>%s</TD><TD>%u</TD><TD>%s</TD><TD>%04X</TD><TD>%04X</TD><TD>%04X</TD><TD>%u</TD><TD>%s</TD></TR>\r\n";
; #else
; static prog_char tfmt[] =
; "<TR><TD>%08lX</TD><TD>%s</TD><TD>%u</TD><TD>%s</TD><TD>%08lX</TD><TD>%08lX</TD><TD>%08lX</TD><TD>%lu</TD><TD>%s</TD></TR>\r\n";
; #endif
; static prog_char foot[] = "</TABLE></BODY></HTML>";
; static char *thread_states[] = { "TRM", "<FONT COLOR=#CC0000>RUN</FONT>", "<FONT COLOR=#339966>RDY</FONT>", "SLP" };
; NUTTHREADINFO *tdp = nutThreadList;
.dbline 373
;
; /* Send HTTP response. */
; NutHttpSendHeaderTop(stream, req, 200, "Ok");
ldi R24,<L22
ldi R25,>L22
std y+3,R25
std y+2,R24
ldi R24,200
ldi R25,0
std y+1,R25
std y+0,R24
movw R18,R12
movw R16,R10
xcall _NutHttpSendHeaderTop
.dbline 374
; NutHttpSendHeaderBottom(stream, req, html_mt, -1);
ldi R24,255
ldi R25,255
ldi R26,255
ldi R27,255
std y+2,R24
std y+3,R25
std y+4,R26
std y+5,R27
lds R2,_html_mt
lds R3,_html_mt+1
std y+1,R3
std y+0,R2
movw R18,R12
movw R16,R10
xcall _NutHttpSendHeaderBottom
.dbline 377
;
; /* Send HTML header. */
; fputs_P(head, stream);
movw R18,R10
ldi R16,<L46
ldi R17,>L46
xcall _fputs_P
.dbline 378
; for (tdp = nutThreadList; tdp; tdp = tdp->td_next) {
lds R20,_nutThreadList
lds R21,_nutThreadList+1
xjmp L57
L54:
.dbline 378
.dbline 379
; fprintf_P(stream, tfmt, (uptr_t) tdp, tdp->td_name, tdp->td_priority,
ldi R24,239
ldi R25,190
ldi R26,173
ldi R27,222
movw R30,R20
adiw R30,19
push R26
push R27
ldd R26,z+0
ldd R27,z+1
movw R30,R26
pop R27
pop R26
ldd R2,z+0
ldd R3,z+1
ldd R4,z+2
ldd R5,z+3
cp R2,R24
cpc R3,R25
cpc R4,R26
cpc R5,R27
breq L60
X11:
ldi R22,<L58
ldi R23,>L58
xjmp L61
L60:
ldi R22,<L59
ldi R23,>L59
L61:
std y+17,R23
std y+16,R22
movw R30,R20
ldd R6,z+16
ldd R7,z+17
ldd R2,z+19
ldd R3,z+20
movw R4,R6
sub R4,R2
sbc R5,R3
std y+15,R5
std y+14,R4
std y+13,R7
std y+12,R6
ldd R2,z+21
ldd R3,z+22
std y+11,R3
std y+10,R2
ldd R2,z+23
ldd R3,z+24
std y+9,R3
std y+8,R2
ldi R24,<L49
ldi R25,>L49
ldd R30,z+15
clr R31
lsl R30
rol R31
add R30,R24
adc R31,R25
ldd R2,z+0
ldd R3,z+1
std y+7,R3
std y+6,R2
movw R30,R20
ldd R2,z+18
clr R3
std y+5,R3
std y+4,R2
movw R24,R30
adiw R24,6
std y+3,R25
std y+2,R24
std y+1,R21
std y+0,R20
ldi R18,<L47
ldi R19,>L47
movw R16,R10
xcall _fprintf_P
.dbline 383
; thread_states[tdp->td_state], (uptr_t) tdp->td_queue, (uptr_t) tdp->td_timer,
; (uptr_t) tdp->td_sp, (uptr_t) tdp->td_sp - (uptr_t) tdp->td_memory,
; *((u_long *) tdp->td_memory) != DEADBEEF ? "Corr" : "OK");
; }
L55:
.dbline 378
movw R30,R20
ldd R20,z+0
ldd R21,z+1
L57:
.dbline 378
cpi R20,0
cpc R20,R21
breq X13
xjmp L54
X13:
X12:
.dbline 384
; fputs_P(foot, stream);
movw R18,R10
ldi R16,<L48
ldi R17,>L48
xcall _fputs_P
.dbline 385
; fflush(stream);
movw R16,R10
xcall _fflush
.dbline 387
;
; return 0;
clr R16
clr R17
.dbline -2
L45:
.dbline 0 ; func end
adiw R28,18
xjmp pop_xgsetF03C
.dbsym r tdp 20 pS[_NUTTHREADINFO]
.dbsym r req 12 pS[_REQUEST]
.dbsym r stream 10 pS[__iobuf]
.dbend
.area lit(rom, con, rel)
L63:
.byte 60,'H,'T,'M,'L,62,60,'H,'E,'A,'D,62,60,'T,'I,'T
.byte 'L,'E,62,'T,'i,'m,'e,'r,'s,60,47,'T,'I,'T,'L,'E
.byte 62,60,47,'H,'E,'A,'D,62,60,'B,'O,'D,'Y,62,60,'H
.byte 49,62,'T,'i,'m,'e,'r,'s,60,47,'H,49,62,13,10,0
L64:
.byte 60,'T,'A,'B,'L,'E,32,'B,'O,'R,'D,'E,'R,62,60,'T
.byte 'R,62,60,'T,'H,62,'H,'a,'n,'d,'l,'e,60,47,'T,'H
.byte 62,60,'T,'H,62,'C,'o,'u,'n,'t,'d,'o,'w,'n,60,47
.byte 'T,'H,62,60,'T,'H,62,'T,'i,'c,'k,32,'R,'e,'l,'o
.byte 'a,'d,60,47,'T,'H,62,60,'T,'H,62,'C,'a,'l,'l,'b
.byte 'a,'c,'k,60,'B,'R,62,'A,'d,'d,'r,'e,'s,'s,60,47
.byte 'T,'H,62,60,'T,'H,62,'C,'a,'l,'l,'b,'a,'c,'k,60
.byte 'B,'R,62,'A,'r,'g,'u,'m,'e,'n,'t,60,47,'T,'H,62
.byte 60,47,'T,'R,62,13,10,0
L65:
.byte 60,'T,'R,62,60,'T,'D,62,37,48,52,'X,60,47,'T,'D
.byte 62,60,'T,'D,62,37,'l,'u,60,47,'T,'D,62,60,'T,'D
.byte 62,37,'l,'u,60,47,'T,'D,62,60,'T,'D,62,37,48,52
.byte 'X,60,47,'T,'D,62,60,'T,'D,62,37,48,52,'X,60,47
.byte 'T,'D,62,60,47,'T,'R,62,13,10,0
L66:
.byte 60,47,'T,'A,'B,'L,'E,62,60,47,'B,'O,'D,'Y,62,60
.byte 47,'H,'T,'M,'L,62,0
.area text(rom, con, rel)
.dbfile C:\ethernut-4.9.7\nutapp_13h\httpd\httpserv.c
.dbfunc s ShowTimers _ShowTimers fI
.dbstruct 0 16 _NUTTIMERINFO
.dbfield 0 tn_next pS[_NUTTIMERINFO]
.dbfield 2 tn_prev pS[_NUTTIMERINFO]
.dbfield 4 tn_ticks l
.dbfield 8 tn_ticks_left l
.dbfield 12 tn_callback pfV
.dbfield 14 tn_arg pV
.dbend
.dbsym s foot L66 A[23:23]kc
.dbsym s tfmt L65 A[75:75]kc
.dbsym s thead L64 A[136:136]kc
.dbsym s head L63 A[64:64]kc
; ticks_left -> y+14
; tnp -> R12,R13
; req -> R12,R13
; stream -> R10,R11
.even
_ShowTimers:
xcall push_xgsetF03C
movw R12,R18
movw R10,R16
sbiw R28,18
.dbline -1
.dbline 398
; }
;
; /*
; * CGI Sample: Show list of timers.
; *
; * This routine must have been registered by NutRegisterCgi() and is
; * automatically called by NutHttpProcessRequest() when the client
; * request the URL 'cgi-bin/timers.cgi'.
; */
; static int ShowTimers(FILE * stream, REQUEST * req)
; {
.dbline 411
; static prog_char head[] = "<HTML><HEAD><TITLE>Timers</TITLE></HEAD><BODY><H1>Timers</H1>\r\n";
; static prog_char thead[] =
; "<TABLE BORDER><TR><TH>Handle</TH><TH>Countdown</TH><TH>Tick Reload</TH><TH>Callback<BR>Address</TH><TH>Callback<BR>Argument</TH></TR>\r\n";
; #if defined(__AVR__)
; static prog_char tfmt[] = "<TR><TD>%04X</TD><TD>%lu</TD><TD>%lu</TD><TD>%04X</TD><TD>%04X</TD></TR>\r\n";
; #else
; static prog_char tfmt[] = "<TR><TD>%08lX</TD><TD>%lu</TD><TD>%lu</TD><TD>%08lX</TD><TD>%08lX</TD></TR>\r\n";
; #endif
; static prog_char foot[] = "</TABLE></BODY></HTML>";
; NUTTIMERINFO *tnp;
; u_long ticks_left;
;
; NutHttpSendHeaderTop(stream, req, 200, "Ok");
ldi R24,<L22
ldi R25,>L22
std y+3,R25
std y+2,R24
ldi R24,200
ldi R25,0
std y+1,R25
std y+0,R24
movw R18,R12
movw R16,R10
xcall _NutHttpSendHeaderTop
.dbline 412
; NutHttpSendHeaderBottom(stream, req, html_mt, -1);
ldi R20,255
ldi R21,255
ldi R22,255
ldi R23,255
std y+2,R20
std y+3,R21
std y+4,R22
std y+5,R23
lds R2,_html_mt
lds R3,_html_mt+1
std y+1,R3
std y+0,R2
movw R18,R12
movw R16,R10
xcall _NutHttpSendHeaderBottom
.dbline 415
;
; /* Send HTML header. */
; fputs_P(head, stream);
movw R18,R10
ldi R16,<L63
ldi R17,>L63
xcall _fputs_P
.dbline 416
; if ((tnp = nutTimerList) != 0) {
lds R2,_nutTimerList
lds R3,_nutTimerList+1
movw R12,R2
tst R12
brne X14
tst R13
brne X16
xjmp L67
X16:
X14:
.dbline 416
.dbline 417
; fputs_P(thead, stream);
movw R18,R10
ldi R16,<L64
ldi R17,>L64
xcall _fputs_P
.dbline 418
; ticks_left = 0;
ldi R20,0
ldi R21,0
ldi R22,0
ldi R23,0
std y+14,R20
std y+15,R21
std y+16,R22
std y+17,R23
xjmp L70
L69:
.dbline 419
; while (tnp) {
.dbline 420
; ticks_left += tnp->tn_ticks_left;
movw R30,R12
adiw R30,8
ldd R2,z+0
ldd R3,z+1
ldd R4,z+2
ldd R5,z+3
ldd R6,y+14
ldd R7,y+15
ldd R8,y+16
ldd R9,y+17
add R6,R2
adc R7,R3
adc R8,R4
adc R9,R5
std y+14,R6
std y+15,R7
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -