专注电子技术学习与研究
当前位置:单片机教程网 >> STM32 >> 浏览文章

单片机关于关于图像传输问题

作者:龙丽嫦   来源:本站原创   点击数:  更新时间:2014年05月07日   【字体:
     关于单片机关于关于图像传输的几个问题。虽然是单片机,但是也希望能给在使用4412开发板的朋友们一些思路。
 
 
      问题1:正在尝试用STM32控制GPRS发送数据到互联网。目前已经可以发送简单数据,并在服务器接收。由于GPRS模块每次最多发送1K的内容,所以,在发送静态图像时遇到问题。使用透传的话,如何将一个5K左右的图像发送出去呢?现在手头有一个小于5K图像做测试,为16进制的数组。
主函数中有:send_gprs_data(pic[4051],1);
调用函数 void send_grps_data(char * bufp, unsigned int count){}
pic[4051]就是图片数组,16进制。定义是u8 pic[]={}
编译时报错:
main.c(106): error:  #167: argument of type "u8" is incompatible with parameter of type "char *"
 
      原因:
send_gprs_data((char*)pic,1);
1参数类型不对,需要强制转换
2参数是个数组的话后面不能带[4051]
 
      问题2:单步调试,一次可以发送数组中一个字节。我的困惑是,1,原先的pic[]数组内装的16进制数据,每次发送的是AE,73这样的数据,我在接收 端是否还要进行转换?2,在发送控制部分,我用的是strlen(),但是有些人说要用sizeof(),这里,在强制转换(char*)pic后,是否 在末尾添加了"\0",用strlen()行吗?3,我在查看pic.c文件时,发现里面有好多空格,有8058个16进制数据(自己数的),但是用 strlen()得出结果4516。
 
      原因:每次发送的是AE,73这样的数据,在接收端不需要进行转换,进制不是问题。
不能在末尾添加了"\0"。strlen原理是查找结束符来判断长度的,你需要发送的是"数据"不是字符串,所以需要用sizeof强制转换不会改变"数值"仅仅改变类型,所以不会末尾给你添加"\0"
关闭窗口