OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3189|回复: 4

求教原子哥strcmp问题

[复制链接]

2

主题

2

帖子

0

精华

新手上路

积分
30
金钱
30
注册时间
2017-8-10
在线时间
5 小时
发表于 2018-5-28 17:29:39 | 显示全部楼层 |阅读模式
const u8* a1="1";
const u8* a2="1";  
这是我设置的两个字符串
     b1=strcmp((char*)a1,(char*)a2);
     if(b1==0)
     {
       LED1=!LED1;
     }
能够得b1为0

我通过32串口2接收数据,
LCD显示屏显示接收到12个字节,
接收显示的数据为+IPD,0,1:1

我把a2改为
const u8* a2="+IPD,0,1:1";  
比较字符串
     b1=strcmp((char*)USART2_RX_BUF,(char*)a2);
     if(b1==0)
     {
       LED1=!LED1;
     }
却得不到b1=0,这是为什么,小白求大佬指点,谢谢!
下面是esp8266的ap的tcp clinet模式改的代码,想实现32接收手机端传过来的字符串数据,对比是否与设定字符串相同实现灯的状态的转换。
#include "common.h"
#include "string.h"

const u8* a1="1";
const u8* a2="+IPD,0,1:1";  

u8 atk_8266_wifiap_test(void)
{
u16 b1;
u8 netpro=0;
u8 key;
u8 timex=0;
u8 ipbuf[16];  
u8 *p;
u16 t=999;
u8 res=0;
u16 rlen=0;
u8 constate=0;
  p=mymalloc(32);      

     LCD_Clear(WHITE);
     POINT_COLOR=RED;
     Show_Str_Mid(0,30,"ATK-ESP WIFI-AP ²âÊÔ",16,240);
     Show_Str(30,50,200,16,"ÕýÔÚÅäÖÃATK-ESPÄ£¿é,ÇëÉÔµÈ...",12,0);
     atk_8266_send_cmd("AT+CIPMUX=1","OK",20);  
     sprintf((char*)p,"AT+CIPSERVER=1,%s",(u8*)portnum);
     atk_8266_send_cmd(p,"OK",20);   

     LCD_Clear(WHITE);
     POINT_COLOR=RED;
     Show_Str_Mid(0,30,"ATK-ESP WIFI-AP ²âÊÔ",16,240);
     Show_Str(30,50,200,16,"ÕýÔÚÅäÖÃATK-ESPÄ£¿é,ÇëÉÔµÈ...",12,0);   
     LCD_Fill(30,50,239,50+12,WHITE);  
     Show_Str(30,50,200,16,"ÅäÖÃATK-ESPÄ£¿é³É¹¦!",12,0);
     delay_ms(200);
     Show_Str(30,50,200,16,"WK_UP:Í˳ö²âÊÔ  KEY0:·¢ËÍÊý¾Ý",12,0);
     LCD_Fill(30,80,239,80+12,WHITE);
     atk_8266_get_wanip(ipbuf);//·þÎñÆ÷ģʽ,»ñÈ¡WAN IP
     sprintf((char*)p,"IPµØÖ·:%s ¶Ë¿Ú:%s",ipbuf,(u8*)portnum);
     Show_Str(30,65,200,12,p,12,0);   
     Show_Str(30,80,200,12,"״̬:",12,0);   
     Show_Str(120,80,200,12,"ģʽ:",12,0);   
     Show_Str(30,100,200,12,"·¢ËÍÊý¾Ý:",12,0);  
     Show_Str(30,115,200,12,"½ÓÊÕÊý¾Ý:",12,0);
     atk_8266_wificonf_show(30,180,"ÇëÓÃÉ豸Á¬½ÓWIFIÈȵã:",(u8*)wifiap_ssid,(u8*)wifiap_encryption,(u8*)wifiap_password);
     POINT_COLOR=BLUE;
     Show_Str(120+30,80,200,12,(u8*)ATK_ESP8266_WORKMODE_TBL[netpro],12,0);   
     USART2_RX_STA=0;
   
   while(1)
   {
    key=KEY_Scan(0);
    if(key==WKUP_PRES)
    {  
     res=0;
     atk_8266_quit_trans();
     atk_8266_send_cmd("AT+CIPMODE=0","OK",20);   
     break;            
    }

    if(timex)timex--;
    if(timex==1)LCD_Fill(30+54,100,239,112,WHITE);
    t++;
    delay_ms(5);
    if(USART2_RX_STA&0X8000)  
    {
     rlen=USART2_RX_STA&0X7FFF;
     USART2_RX_BUF[rlen]=0;  
     printf("%s",USART2_RX_BUF);
     sprintf((char*)p,"ÊÕµ½%d×Ö½Ú,ÄÚÈÝÈçÏÂ",rlen);
     LCD_Fill(30+54,115,239,130,WHITE);
     POINT_COLOR=BRED;
     Show_Str(30+54,115,156,12,p,12,0);   
     POINT_COLOR=BLUE;
     
     b1=strcmp((char*)USART2_RX_BUF,(char*)a2);
     if(b1==0)
     {
       LED1=!LED1;
     }
         
     LCD_Fill(30,130,239,319,WHITE);
     Show_Str(30,130,180,190,USART2_RX_BUF,12,0);
     USART2_RX_STA=0;     
     if(constate!='+')t=1000;  
     else t=0;               
    }

   
    if(t==1000)
    {
     constate=atk_8266_consta_check();
     if(constate=='+')Show_Str(30+30,80,200,12,"Á¬½Ó³É¹¦",12,0);
     else Show_Str(30+30,80,200,12,"Á¬½Óʧ°Ü",12,0);      
     t=0;
    }
    if((t%500)==0)
    {
     LED0=!LED0;
    }
    atk_8266_at_response(1);
      }
myfree(p);  
return res;  
}

file:///C:/Users/dell/AppData/Roaming/Tencent/Users/765671143/QQ/WinTemp/RichOle/]7V5H]%25)%25XQ3_32RXU%603J4V.png
下面图片是串口二接收到数据后的判断



串口2

串口2

谢谢!
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

7

主题

188

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
385
金钱
385
注册时间
2018-7-19
在线时间
126 小时
发表于 2018-7-27 08:27:59 | 显示全部楼层
回复 支持 反对

使用道具 举报

31

主题

1955

帖子

3

精华

论坛元老

Rank: 8Rank: 8

积分
4521
金钱
4521
注册时间
2018-5-11
在线时间
946 小时
发表于 2018-7-27 10:33:07 | 显示全部楼层
本帖最后由 warship 于 2018-7-27 10:37 编辑

说明接收缓冲区里得到的字符串与你设定的不完全相同,仿真,人工比对一下,注意回车换行0d0a之类的东西
我的开源链接 https://github.com/ShuifaHe/STM32.git  请关注,点赞支持哦。
回复 支持 反对

使用道具 举报

33

主题

1628

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
6679
金钱
6679
注册时间
2015-8-25
在线时间
1036 小时
发表于 2018-7-27 11:23:24 | 显示全部楼层
字符串是以‘\0’结尾的,你的串口收到的数据估计没有这个,自己在程序里加上就可以了
回复 支持 反对

使用道具 举报

62

主题

903

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3566
金钱
3566
注册时间
2016-1-8
在线时间
544 小时
发表于 2018-7-27 13:54:15 | 显示全部楼层
strcmp是\0位结束符的,如果拼字符串  要多加一个\0, 但是在初始化的时候,编译器是自动加了\0的,提问题贴发要求助贴,而不是分享帖
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-17 22:51

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表