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

📄 httpserv.s

📁 单片机C语言程序设计实训100例--基于AVR+PROTEUS仿真
💻 S
📖 第 1 页 / 共 5 页
字号:
	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 + -