關(guān)于單片機關(guān)于關(guān)于圖像傳輸?shù)膸讉問題。雖然是單片機,但是也希望能給在使用4412開發(fā)板的朋友們一些思路。
問題1:正在嘗試用STM32控制GPRS發(fā)送數(shù)據(jù)到互聯(lián)網(wǎng)。目前已經(jīng)可以發(fā)送簡單數(shù)據(jù),并在服務(wù)器接收。由于GPRS模塊每次最多發(fā)送1K的內(nèi)容,所以,在發(fā)送靜態(tài)圖像時遇到問題。使用透傳的話,如何將一個5K左右的圖像發(fā)送出去呢?現(xiàn)在手頭有一個小于5K圖像做測試,為16進制的數(shù)組。
主函數(shù)中有:send_gprs_data(pic[4051],1);
調(diào)用函數(shù) void send_grps_data(char * bufp, unsigned int count){}
pic[4051]就是圖片數(shù)組,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參數(shù)類型不對,需要強制轉(zhuǎn)換
2參數(shù)是個數(shù)組的話后面不能帶[4051]
問題2:單步調(diào)試,一次可以發(fā)送數(shù)組中一個字節(jié)。我的困惑是,1,原先的pic[]數(shù)組內(nèi)裝的16進制數(shù)據(jù),每次發(fā)送的是AE,73這樣的數(shù)據(jù),我在接收 端是否還要進行轉(zhuǎn)換?2,在發(fā)送控制部分,我用的是strlen(),但是有些人說要用sizeof(),這里,在強制轉(zhuǎn)換(char*)pic后,是否 在末尾添加了"\0",用strlen()行嗎?3,我在查看pic.c文件時,發(fā)現(xiàn)里面有好多空格,有8058個16進制數(shù)據(jù)(自己數(shù)的),但是用 strlen()得出結(jié)果4516。
原因:每次發(fā)送的是AE,73這樣的數(shù)據(jù),在接收端不需要進行轉(zhuǎn)換,進制不是問題。
不能在末尾添加了"\0"。strlen原理是查找結(jié)束符來判斷長度的,你需要發(fā)送的是"數(shù)據(jù)"不是字符串,所以需要用sizeof強制轉(zhuǎn)換不會改變"數(shù)值"僅僅改變類型,所以不會末尾給你添加"\0"