搜索
bottom↓
回复: 13

大佬们,问一个代码逻辑的问题【标题不合格】

[复制链接]

出0入0汤圆

发表于 2024-1-12 13:55:41 | 显示全部楼层 |阅读模式
情况介绍:MCU给模块发AT指令,我必须得等模块回复我数据,并且判断回复的数据,我才可以发送下一条指令
问题:目前是写代码,测试阶段,已经嵌套了四层if了,我想让我的代码简洁点,有没有其他逻辑可以用,因为要是按照现在这个逻辑下去,可能到最后大概得嵌套大概十层
回复的数据,大部分都是OK,只是有一两条不是OK
谢谢大佬,今年刚毕业 之前没碰见过这种情况

阿莫论坛20周年了!感谢大家的支持与爱护!!

月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!

出0入90汤圆

发表于 2024-1-12 14:16:21 | 显示全部楼层
用状态机

出0入42汤圆

发表于 2024-1-12 14:31:19 | 显示全部楼层
这东西就是不好写。
封装起来,出错就return拉拉倒呗
别说单片机不好写,命令行自动化交互工具都不好写,所以出来个Expect,用于这类交互。
我觉得可以参考Linux的拨号工具那一套,找找灵感。

但是,单片机,一般发送后赶紧让出时间片给别的任务,不能死等呢

出200入2554汤圆

发表于 2024-1-12 14:49:42 | 显示全部楼层
使用 continue,return 可在一定程度上减轻 if 嵌套。

出0入0汤圆

发表于 2024-1-12 15:13:02 | 显示全部楼层
不能正确嵌套,要异常嵌套
send("xxx")
if(recv()==fail){
//错误处理
return ;
}
//正确处理
send("yyy")
if(recv()==fail){
//错误处理
return ;
}
//正确处理

出0入42汤圆

发表于 2024-1-12 15:21:38 | 显示全部楼层
本帖最后由 wshtyr 于 2024-1-12 15:23 编辑

用事件驱动的状态机
事件可以是定时器,也可以是收到的特定数据

裸机:
用标志位代表事件,事件在串口接收中断里产生。有事件就执行下一步操作,切换状态,没事件就跳过,运行其它逻辑。全程可以无阻塞。

有OS:
用OS类似标志位的线程同步机制,事件在串口接收中断或接收线程里产生。状态机线程有事件就执行下一步操作,切换状态,没事件就挂起,让出CPU给其它逻辑。

出0入228汤圆

发表于 2024-1-12 15:24:21 来自手机 | 显示全部楼层
去 看一下 arduino的 at 库吧。

出0入0汤圆

 楼主| 发表于 2024-1-12 15:31:49 | 显示全部楼层
xmlbb 发表于 2024-1-12 15:13
不能正确嵌套,要异常嵌套
send("xxx")
if(recv()==fail){
(引用自5楼)

好的  我去试试

出0入0汤圆

 楼主| 发表于 2024-1-12 15:32:07 | 显示全部楼层
wshtyr 发表于 2024-1-12 15:21
用事件驱动的状态机
事件可以是定时器,也可以是收到的特定数据

(引用自6楼)

OKOKOK 我去弄一弄

出0入0汤圆

 楼主| 发表于 2024-1-12 15:32:35 | 显示全部楼层
wxws 发表于 2024-1-12 15:24
去 看一下 arduino的 at 库吧。
(引用自7楼)

我周末看一看

出105入79汤圆

发表于 2024-1-12 15:38:05 | 显示全部楼层
规划状态机,在不同状态之间转移。

出0入16汤圆

发表于 2024-1-12 16:38:56 | 显示全部楼层
if return continue goto都行

出16170入6148汤圆

发表于 2024-1-12 17:15:51 来自手机 | 显示全部楼层
“大佬们,问一个代码逻辑的问题”标题不合格。请自行修正。

帖子标题必须能充分说明帖子的内容。如你要问AVR的ADC如何才能测量得比较准确,“AVR的ADC如何消除干扰测量得比较准确?”是合格的标题。不合格举例:
    1:小女子冰天雪地裸体跪求解决方法
    2:救命啊...
    3:高手请出招,一个无法解决的AVR问题
    4:一个困扰学习单片机初学者,惊动单片机开发者的难题
    5:AVR的ADC测量   (点评:你到底是问问题,或是有技术心得与大家分享?)

出0入58汤圆

发表于 2024-1-12 17:22:14 | 显示全部楼层
状态机就很合适啊
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-28 19:23

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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