關于單片機關于關于圖像傳輸的幾個問題。雖然是單片機,但是也希望能給在使用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"