ESP8266 C語言常用知識點

2021-08-25 22:26:01 字數 2873 閱讀 4929

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系統下檔案編...