OpenEdv-开源电子网

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

sim800c 中的sim800c_send_cmd函数是不是可以这样优化一下!!

[复制链接]

22

主题

92

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
446
金钱
446
注册时间
2014-4-7
在线时间
53 小时
发表于 2017-5-26 09:41:31 | 显示全部楼层 |阅读模式
1金钱
小弟初学  sim800c  如有不当的地方请原谅,谢谢。

在学习原子sim800c的源码的时候看到  u8 sim800c_send_cmd(u8 *cmd,u8 *ack,u16 waittime) 这个函数

u8 sim800c_send_cmd(u8 *cmd,u8 *ack,u16 waittime)
{
    u8 res=0;
    USART3_RX_STA=0;
    if((u32)cmd<=0XFF)
    {
        while((USART3->SR&0X40)==0);//等待上一次数据发送完成  
        USART3->DR=(u32)cmd;
    }else u3_printf("%s\r\n",cmd);  //发送命令
   
    if(waittime==1100)              //11s后读回串口数据(蓝牙测试用到)
    {
        Scan_Wtime = 11;            //需要定时的时间
        TIM7_SetARR(10000-1);       //产生1S定时中断
    }
    if(ack&&waittime)                //需要等待应答
    {
        while(--waittime)            //等待倒计时
        {
            if(BT_Scan_mode)        //蓝牙扫描模式下
            {
                res=KEY_Scan(0);    //返回上一级
                if(res==KEY1) return 2;
            }
            delay_ms(10);
            if(USART3_RX_STA&0X8000)//接收到期待的应答结果
            {
                if(sim800c_check_cmd(ack))break;//得到有效数据
                USART3_RX_STA=0;
            }
        }
        if(waittime==0)res=1;
    }
    return res;
}

开始就判断是发送的数据还是发送的字符

然后判断是不是需要应答和等待的时间!!
如果需要应答和等待的时间,首先检查数据接收是否完成
如果数据接受完成就判断,接受到的数据中是不是有对应的应答如果有就马上跳出while 循环,
如果没有就将接受标志清零,并且等待时间到达跳出while 循环(这好像不合理)。

个人觉得将 USART3_RX_STA 清零后也要跳出while 循环,不用一直等待,浪费时间
不知我是否正确,请各位大神指导指导,谢谢!!!!




最佳答案

查看完整内容[请看2#楼]

直接修改,测试,然后如果没问题,说明你这样改OK。这种代码优化,测试检测最好评估了。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165309
金钱
165309
注册时间
2010-12-1
在线时间
2108 小时
发表于 2017-5-26 09:41:32 | 显示全部楼层
直接修改,测试,然后如果没问题,说明你这样改OK。这种代码优化,测试检测最好评估了。
回复

使用道具 举报

22

主题

92

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
446
金钱
446
注册时间
2014-4-7
在线时间
53 小时
 楼主| 发表于 2017-5-31 09:05:15 | 显示全部楼层
谢谢!!!!!
回复

使用道具 举报

15

主题

65

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
343
金钱
343
注册时间
2017-7-17
在线时间
68 小时
发表于 2017-7-26 11:48:01 | 显示全部楼层
请问,哪个判断字符还是数据的是什么意思,一直很困扰,

//cmd:发送的命令字符串(不需要添加回车了),当cmd<0XFF的时候,发送数字(比如发送0X1A),大于的时候发送字符串.

为什么
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-11-23 04:31

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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