2933|3

3416

帖子

0

TA的资源

纯净的硅(高级)

楼主
 

【MXCHIP Open1081】发布一个web页面 [复制链接]

本帖最后由 ljj3166 于 2014-12-27 17:47 编辑

周末,外面凉风嗖嗖地
宅在家里,又捣鼓了一下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发送的时候,也是发生了字符串处理引发的"惨案"


呃,先到这。





此帖出自无线连接论坛

最新回复

网址挂了?  详情 回复 发表于 2014-12-27 20:41
点赞 关注
个人签名

So TM what......?

 


回复
举报

3416

帖子

0

TA的资源

纯净的硅(高级)

沙发
 
沙发不留
此帖出自无线连接论坛
 
 

回复

6040

帖子

202

TA的资源

版主

板凳
 
网址挂了?
此帖出自无线连接论坛

点评

没有吧,好着呢  详情 回复 发表于 2014-12-27 20:55
 
 
 

回复

3416

帖子

0

TA的资源

纯净的硅(高级)

4
 

没有吧,好着呢
此帖出自无线连接论坛
个人签名

So TM what......?

 

 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
快速回复 返回顶部 返回列表