发布一个web页面
时间:10-02
整理:3721RD
点击:
周末,外面凉风嗖嗖地
宅在家里,又捣鼓了一下OPEN1081
看了看webserver的例程
大概流程是:
建立一个dhcp server的soft ap,并设置登陆用户名密码,终端设备连接后
发送page数据,这个page是用来给open1081进行固件升级的
传说中的OTA,现在很多家用和企业级路由器常用的升级手段
在例程的基础上修修补补
最终整出一个比较朴素的小页面
除了在局域网内可以访问,还顺道用路由器把端口开放到互联网,通过DDNS进行访问
有兴趣的朋友可以戳戳看:http://liaojingjing.3322.org:12580(抓住一切机会黑CMCC,算不算高端黑)
这周末都把OPEN1081挂着,有怨言的同志,猛戳12580吧,哈哈,用户名密码都是admin
页面设置是0.25s刷新一次(其实代码中TCP/IP的延时都比这大,瞎折腾吧),手机端慎入,大壕们自便。
听说有图能上首页,果断上
先大概说说情况
局域网内,OPEN1081——路由器——PC
OPEN1081设置成station模式连接路由器,固定IP为192.168.1.168,PC访问该地址,即可获取OPEN1081的打印页面
广域网内,手机——CMCC——3322.org——路由器——OPEN1081
OPEN1081的访问端口为80,通过路由器映射为12580同时开放给外网,手机即可通过域名+端口的形式访问
有视频才是有真相,衬底噪声自行滤波
-----------------------------------------遇到的问题----------------------------------------------------------
依然还是字符串处理的问题
在MXCHIP给出的webserver例程里边,主要在http_process.c文件中处理发送数据
并且比较多的使用了标准c中sprintf等字符串操作函数
比如说这里:
- #define FORMAT_POST_STR sprintf(body, systemPage, firmwareVersion,\
- configParas.wifi_ssid, configParas.wifi_key);
- memset(httpRequest,0,HTTP_DATA_MAX_LEN);
- body = httpRequest;
- FORMAT_POST_STR;
- sprintf(httpRequest, headerPage, strlen(body)); // recalute the body length.
- body = httpRequest+strlen(httpRequest);
- FORMAT_POST_STR;
- NumOfBytes = strlen(httpRequest);
- send_http_data(index, httpRequest, NumOfBytes);
如果想在过程中用sprintf或者strcat插入你想打印的字符串和数据
代码只能够正常打印一次page给浏览器,仅仅一次
后面直接就HardFault_Handler
debug发现执行完一次数据发送后,MCU一直在执行 mov r0 , r0
看上去像是数据溢出,不知道是内存还是堆栈还是别的什么
后来改正成这样才正常,百思不得其解啊
- #define FORMAT_POST_STR sprintf(body, systemPage, ADC_ConvertedValue[0],TempValue/100,TempValue%100);
- memset(httpRequest,0,HTTP_DATA_MAX_LEN);
- body = httpRequest;
- FORMAT_POST_STR;
- sprintf(httpRequest, headerPage, strlen(body)); // recalute the body length.
- body = httpRequest+strlen(httpRequest);
- FORMAT_POST_STR;
- NumOfBytes = strlen(httpRequest);
- send_http_data(index, httpRequest, NumOfBytes);
systemPage其实是个const型的字符串数组,把它改成这货了:
- char systemPage[] = {
- "<!DOCTYPE HTML>\r\n\
- <html>\r\n\
- <meta http-equiv="refresh" content="0.25">\r\n\
- <head>\r\n\
- <title>\r\n\
- Sensor Webserver based on MXCHIP1081!!!\r\n\
- </title>\r\n\
- </head>\r\n\
- <body>\r\n\
- <h2>\r\n\
- Welcome to open1081@MXCHIP Sensor Webserver\r\n\
- </h2>\r\n<h3>\r\n 你好,EEWORLD!!\r\n</h3>\r\n\
- <h4>\r\nThe ADValue is : %d\r\n</h4>\r\n\
- <h5>\r\nThe Temperature is : %d.%d°\r\n</h5>\r\n\
- </body>\r\n</html>\r\n"
- };
一切正常
为毛代码调用sprintf没问题,自己一调用,程序立马跑飞呢
也做过串口打印的调试,sprintf功能都是正常完成的
只准州官放火,不许百姓点灯啊,嘿嘿
不知道其他朋友有没有遇到这个问题
有关字符串的处理,貌似在庆科的例程中,总是遇到奇怪的现象
上回TCP发送的时候,也是发生了字符串处理引发的"惨案"
呃,先到这。
沙发不留
网址挂了?
没有吧,好着呢