OpenEdv-开源电子网

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

关于SIM900A查询显示字符串的问题

[复制链接]

81

主题

269

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
449
金钱
449
注册时间
2014-8-11
在线时间
86 小时
发表于 2016-4-14 13:20:37 | 显示全部楼层 |阅读模式
10金钱
以下的函数是我自己写的,以CSQ为例,现在我用的是厂家集成过的模块  发送查询指令后返回+CSQ:24#OK  
参照原子哥的例程是通过strstr()函数返回要找的字符的地址来挖掘出信号量值24,我是通过找到:和#在
USART2_RX_BUF中的位置来挖掘24
我的问题是:原子哥是将查询挖掘显示写在u8 sim900a_gsminfo_show(u16 x,u16 y)里面的,我现在是想将
查询挖掘写成子函数供显示界面函数调用,子函数返回字符串首地址。这样返回字符串可不可以?需不需要申请内存什么的


/*函数功能:网络信号质量CSQ查询*/
u8 *dtu_csq_search()
{
    u8 *p;
    u8 res=1;
    u8 m,n,i;
    USART2_RX_STA=0;
    if(dtu_send_cmd("AT+OPENAT=CSQ?","OK",200))
    {
        m=GetColon(1,USART2_RX_BUF);//冒号的位置
        n=GetComma(1,USART2_RX_BUF);//逗号的位置
        for(i=m;i++;i<n-1)
        {
            *(p++)=USART2_RX_BUF[i];
        }
        p[n-m-1]=0;
        return p;
    }
    else return (u8*)0
}

/* 实现功能:计算字符串中各个冒号的位置
参数:num 查找第num个冒号在字符串中的位置   *str需要查找的字符串
返回值:所要查找的到的位置或1位置溢出*/
static u8 GetColon(u8 num,u8 *str)
{
    u8 i,j = 0;
    u8 len=strlen((const char*)str);
    for(i = 0;i < len;i ++)
    {
        if(str[i] == ':')
            j++;
        if(j == num)
            return i + 1;   
    }
    return 1;   
}

/* 实现功能:计算字符串中各个#的位置
参数:num 查找第num个#在字符串中的位置   *str需要查找的字符串
返回值:所要查找的到的位置或1位置溢出*/
static u8 GetColon(u8 num,u8 *str)
{
    u8 i,j = 0;
    u8 len=strlen((const char*)str);
    for(i = 0;i < len;i ++)
    {
        if(str[i] == '#')
            j++;
        if(j == num)
            return i + 1;   
    }
    return 1;   
}

我是一只菜鸟,但我会大鹏展翅
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2016-4-15 23:55:12 | 显示全部楼层
下载验证,不行就仿真,找问题
回复

使用道具 举报

3

主题

39

帖子

0

精华

初级会员

Rank: 2

积分
160
金钱
160
注册时间
2015-8-12
在线时间
19 小时
发表于 2016-4-22 14:33:04 | 显示全部楼层
楼主问题解决了没有,我也打算用短信接收的信息,才开始研究呢
回复

使用道具 举报

18

主题

105

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
377
金钱
377
注册时间
2013-3-1
在线时间
50 小时
发表于 2016-4-22 20:05:09 | 显示全部楼层
[mw_shl_code=c,true]        if(sim900a_send_cmd("AT+CNUM","+CNUM",200)==0)                        //查询本机号码
        {
                p1=(u8*)strstr((const char*)(USART2_RX_BUF),",");
                p2=(u8*)strstr((const char*)(p1+2),"\"");
                p2[0]=0;//加入结束符
                sprintf((char*)p,"本机号码:%s",p1+2);
                strcpy(phonenum,p1+2);
                printf("%s",p);                //串口打印本机号码
//                Show_Str(x,y+170,200,16,p,16,0);
                USART2_RX_STA=0;               
        }[/mw_shl_code]

用strcpy 函数将其搬到一个全局变量里,然后可以在其他地方想显示显示想咋用咋用
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-16 22:50

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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