uint8 uart_buff[256]; //定義字串或記憶體空間,長度256,uart_buff指向首位址
uint8 *pdata; //定義字串指標,指向字串
memset(uart_buff,0,sizeof(tcp_send_buff));//字串清空
sprintf(uart_buff,"%c%c%c",a,b,c);//將a,b,c(巨集定義)內容寫入字串
memcpy(uart_buff,pdata,strlen(pdata)) //將pdata指向字串複製到uart_buff中
#define null (void *)0
uint8 * p_result=null;
p_result = strstr(pdata, (const char *)"cmd1"); //查詢字串中是否包含cmd1,並指向其位置
if(p_rsult!=null)
uint8 *pdata;
uint8 char_buff[16];
memcpy(pdata,char_buff,strlen(char_buff)); //比較char_buff和pdata內容,如果相同,則返回0
hex轉換為字串,其中pdata指向需要轉換的字元;prusult指向轉換後的字元,如果輸入為0x01,則轉換為ascii 01, 如果輸出0x5a則轉換為ascii 5a
void hex2ascii(uint8* presult,uint8* pdata)
}
//把數字轉換為ip位址
struct ip_addr ;
#define ip4_addr(ipaddr, a,b,c,d) \
(ipaddr)->addr = ((uint32)((d) & 0xff) << 24) | \
((uint32)((c) & 0xff) << 16) | \
((uint32)((b) & 0xff) << 8) | \
(uint32)((a) & 0xff)
//構建server_ip
struct ip_addr sever_ip;
uint8 sever_ip[4]=;
//將數字組合為ip位址
ip4_addr(&sever_ip, sever_ip[0], sever_ip[1], sever_ip[2], sever_ip[3]);
#define ip2str(ipaddr) ip4_addr1_16(ipaddr), \
ip4_addr2_16(ipaddr), \
ip4_addr3_16(ipaddr), \
ip4_addr4_16(ipaddr)
/*ip2str例子,將ip位址轉換為4個數字*/
printf("%d.%d.%d.%d\r\n",ip2str(&info.ip));
/*將ip位址轉換為字串*/
sprintf(send_buff,"\r\n",ip2str(&info.ip));
在定時迴圈中,對計數器計數;
task_cnt++;
在執行迴圈中,檢查計數器,當計數器達到間隔時
if(task_cnt>100)
當條件滿足時,開始執行的定時任務;
//定時迴圈中
if(condition_flag) task_cnt++;
//任務迴圈中
if(task_cnt>100)
程式描述:每隔5s執行一次任務,每次執行時,相同的任務執行5次,每次間隔200ms,例如:設定led的閃燈方式,每隔5s閃爍一次,每次閃爍時,用200ms間隔閃5次;
程式思路:大迴圈記錄5s時間間隔;小迴圈記錄任務之間間隔;5s時間到,開始小迴圈計數;小迴圈200ms時間到,檢查執行次數,如果沒有超出,則執行任務。否則清除標誌位
//大迴圈定時,在定時任務中檢查
if(loop1_flag) loop1_cnt++; //大迴圈計數器
//小迴圈定時,在定時任務中檢查並計數
if(loop2_flag) loop2_cnt++; //小迴圈計數器
//一下**在執行任務中執行
//大迴圈標誌位
if(loop1_cnt>500)
//小迴圈執行
if(loop2_cnt>20)else
}
物聯網應用中,網路傳輸資料通常為字串格式,而mcu中執行命令通常為hex格式,因此需要把字串轉換為16進製制。例如:字串格式的1f中,1為低位數字,f為高位數字,需要將其組合為0x1f這樣的數字。
for(i=0; i='0') && (*(pdata+i*2)<='9'))
if((*(pdata+i*2)>='a') && (*(pdata+i*2)<='f'))
if((*(pdata+i*2)>='a') && (*(pdata+i*2)<='f'))
if((*(pdata+i*2+1)>='0') && (*(pdata+i*2+1)<='9'))
if((*(pdata+i*2+1)>='a') && (*(pdata+i*2+1)<='f'))
if((*(pdata+i*2+1)>='a') && (*(pdata+i*2+1)<='f'))
cmd_buff[i] = temp;
temp=0;
os_printf("cmd:%x\r\n",cmd_buff[i]);
}
這樣,*pdata中的字串就轉換為cmd_buff中的16進製制資料了。 C語言常用知識點
本文內容從網路上蒐集而來,有助於對c語言的理解。如下 b a b a a b b a b 如下 a a b b a b a a b sizeof是一種運算子不要想當然理解為函式 sizeof使用時可以不加 sizeof可以加變數 常量 資料型別 跟資料型別是必須加 1 include編譯預處理命令可...
c語言常用知識點梳理
c語言常用知識點 知識點1 交換兩個變數值的方法 如下 b a b a a b b a b 採用按位異或的位方式 如下 a a b b a b a a b 知識點2 p 3 與 p 3 的區別 因為的優先順序高於 所以結合順序不一樣,所表示的含義也不一樣。知識點3 sizeof的使用 知識點4 in...
C 常用知識點
excel資料分析與視覺化codeblocks開啟專案,需要open cbp檔案,才能將整個專案匯入,不能開啟main.cpp檔案 利用 notepad 解決中文亂碼。gb2312 ansi windows926 untf 8 codeblock 調整字型大小 ctrl 滑鼠滾輪 mac系統下檔案編...