微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 无线和射频 > 射频无线通信设计 > 发布一个web页面

发布一个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等字符串操作函数
比如说这里:

  1. #define FORMAT_POST_STR sprintf(body, systemPage, firmwareVersion,\
  2. configParas.wifi_ssid, configParas.wifi_key);

  3. memset(httpRequest,0,HTTP_DATA_MAX_LEN);
  4. body = httpRequest;
  5. FORMAT_POST_STR;
  6. sprintf(httpRequest, headerPage, strlen(body)); // recalute the body length.
  7. body = httpRequest+strlen(httpRequest);
  8. FORMAT_POST_STR;
  9. NumOfBytes = strlen(httpRequest);

  10. send_http_data(index, httpRequest, NumOfBytes);

复制代码

撸主本来想在发送页面数据的基础上,添加自己的数据进去
如果想在过程中用sprintf或者strcat插入你想打印的字符串和数据
代码只能够正常打印一次page给浏览器,仅仅一次
后面直接就HardFault_Handler
debug发现执行完一次数据发送后,MCU一直在执行 mov r0 , r0
看上去像是数据溢出,不知道是内存还是堆栈还是别的什么

后来改正成这样才正常,百思不得其解啊

  1. #define FORMAT_POST_STR sprintf(body, systemPage, ADC_ConvertedValue[0],TempValue/100,TempValue%100);

  2. memset(httpRequest,0,HTTP_DATA_MAX_LEN);
  3. body = httpRequest;
  4. FORMAT_POST_STR;
  5. sprintf(httpRequest, headerPage, strlen(body)); // recalute the body length.
  6. body = httpRequest+strlen(httpRequest);
  7. FORMAT_POST_STR;
  8. NumOfBytes = strlen(httpRequest);
  9. send_http_data(index, httpRequest, NumOfBytes);

复制代码



systemPage其实是个const型的字符串数组,把它改成这货了:

  1. char systemPage[] = {
  2. "<!DOCTYPE HTML>\r\n\
  3. <html>\r\n\
  4. <meta http-equiv="refresh" content="0.25">\r\n\
  5. <head>\r\n\
  6. <title>\r\n\
  7. Sensor Webserver based on MXCHIP1081!!!\r\n\
  8. </title>\r\n\
  9. </head>\r\n\
  10. <body>\r\n\
  11. <h2>\r\n\
  12. Welcome to open1081@MXCHIP Sensor Webserver\r\n\
  13. </h2>\r\n<h3>\r\n 你好,EEWORLD!!\r\n</h3>\r\n\
  14. <h4>\r\nThe ADValue is : %d\r\n</h4>\r\n\
  15. <h5>\r\nThe Temperature is : %d.%d°\r\n</h5>\r\n\
  16. </body>\r\n</html>\r\n"
  17. };

复制代码

然后直接通过FORMAT_POST_STR来格式化发送的数据
一切正常
为毛代码调用sprintf没问题,自己一调用,程序立马跑飞呢
也做过串口打印的调试,sprintf功能都是正常完成的
只准州官放火,不许百姓点灯啊,嘿嘿

不知道其他朋友有没有遇到这个问题
有关字符串的处理,貌似在庆科的例程中,总是遇到奇怪的现象
上回TCP发送的时候,也是发生了字符串处理引发的"惨案"

呃,先到这。

沙发不留

网址挂了?

没有吧,好着呢

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top