关于单片机关于关于图像传输的几个问题。虽然是单片机,但是也希望能给在使用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"