我正在使用FreeRTOS启动新的嵌入式系统设计.我的最后一个使用了eCos,它有一个非常轻量级的内置HTTP服务器,特别是因为我没有文件系统.简而言之,它的工作方式是每个页面都是类似CGI的C函数,在HTTP守护程序需要时调用它.具体来说,您可以编写以下形式的函数:
int MyWebPage(FILE* resp,const char* page,const char* params,void* uData);
其中page是url的page部分,params是任何表单参数(只支持GET,而不是POST,这会阻止文件上传,从而使flash变得很痛苦),uData是传入的令牌,当你注册时设置函数,因此您可以使用相同的函数为多个URL或具有不同数据的范围提供服务,而resp是一个文件句柄,您可以将HTTP响应(标题和所有)写入.@H_404_5@
CYG_HTTPD_TABLE_ENTRY(www_myPage,"/",MyWebPage,0);
其中CYG_HTTPD_TABLE_ENTRY是一个宏,其中第一个参数是变量名,第二个是页面URL(允许使用*通配符;因此页面传递给MyWebPage()),第三个是函数指针,最后一个是uData值.@H_404_5@
这是一个简单的例子:@H_404_5@
int HelloWorldPage(FILE* resp,const char*,void*) { fprintf("Content-Type: text/html;\n\n"); fprintf("<html><head><title>Hello World!</title></head>\n"); fprintf("<body>\n"); fprintf("<h1>Hello,World!</h1>\n"); fprintf("<p>You passed in: %s</p>\n",params); fprintf("</body></html>\n"); } CYG_HTTPD_TABLE_ENTRY(www_hello,HelloWorldPage,0);
(实际上,params将通过一个函数来逃避HTML魔术字符,我会使用另外几个函数来分割参数并从中创建一个< ul>,但为了清楚起见,我把它留了下来.)@H_404_5@
服务器本身只是作为一个任务(即线程)运行,只要它的优先级低于关键任务,就不会妨碍它.@H_404_5@
不用说,这对于测试和调试来说非常宝贵. (嵌入式工作的一个问题是你通常不能将XTerm作为日志使用.)因此,当Supreme Programmer反复指责我没有工作的东西时(我猜是阻力最小的路径),我可以把网页并显示他向我发送了错误的参数.在集成中节省了大量的调试时间.@H_404_5@
所以无论如何…我想知道,有这样的东西作为一个独立的图书馆吗?我可以链接的东西,注册我的回调,产生一个线程,并让它做魔术?或者我需要自己动手?我更喜欢C,但也可以使用C库.@H_404_5@
编辑:由于我正在给它一个赏金,我需要澄清该库需要在开源许可下.@H_404_5@