找回密码
 立即注册
查看: 891|回复: 27

关于串口进有限状态机不掉电烧录的问题(已解决,解决方式:删除所有Delay_ms();)

[复制链接]
  • 打卡等级:偶尔看看II
  • 打卡总天数:23
  • 最近打卡:2025-04-11 15:44:39

17

主题

83

回帖

312

积分

中级会员

积分
312
发表于 2024-12-27 15:06:23 | 显示全部楼层 |阅读模式
如题,使用串口对有限状态机对settime的命令执行正常,但对UPDATE解读有问题,极少数情况下,才会烧录进去,多数是不响应的
截图202412271504158330.jpg
截图202412271504288392.jpg
截图202412271506204424.jpg
没事就炸板
有事炸俩板
ꉂ೭(˵¯̴͒ꇴ¯̴͒˵)౨”
回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:431
  • 最近打卡:2025-05-09 09:00:33
已绑定手机

77

主题

4879

回帖

8510

积分

超级版主

DebugLab

积分
8510
发表于 2024-12-27 16:16:32 | 显示全部楼层
看您的变量命名疑似使用了我的串口收发程序
https://www.stcaimcu.com/forum.php?mod=viewthread&tid=4598
任何逻辑错误都会导致各种奇怪的异常,超时判断、错误处理、状态机重置、指针、缓冲区溢出,这些都是需要注意的
libc任何对于字符串的处理函数遇0x00都会退出,不能处理'\0'
ISP软件有RTC对时功能
截图202412271610119551.jpg
建议使用AI单片机内置的RTC
截图202412271623326502.jpg

以下是通过ISP软件的RTC对时功能串口对时程序(命令头FF 0B)
截图202412271615144277.jpg

DebugLab
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:123
  • 最近打卡:2025-04-19 16:12:35
已绑定手机

60

主题

777

回帖

4001

积分

论坛元老

自定义头衔

积分
4001
发表于 2024-12-27 16:18:15 | 显示全部楼层
你的这个代码存在很大问题。

虽然你称其为“状态机”,但是它并没有储存有意义的状态

状态只有两个:
- 上一个字节是\n
- 上一个字节不是\n

而且存在内存溢出的致命缺陷。
假如串口收到了足够长的不含\n的字节流,将会导致你的R_Buf缓冲区数组溢出。


-----------------------

出于好奇,测试了一下STC-ISP软件的自定义下载命令是否支持转义字符

截图202412271619121655.jpg

是支持的。


-----------------------

截图202412271622521569.jpg

strncmp用于匹配n个字符是否相当,如果相等,返回值是0。
而你在代码中的判断是 if(!strncmp(str1,str2,num)),即字符串的前num个字符完全相同时,才会满足条件

那么会是什么原因呢?
建议详细调试哦~

或者把最简工程发出来让坛友们帮忙调试

点评

勾选HEX模式,支持任意值  发表于 2024-12-27 16:25
联系我请点击左下角的【回复】按钮,否则我收不到消息提
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看II
  • 打卡总天数:23
  • 最近打卡:2025-04-11 15:44:39

17

主题

83

回帖

312

积分

中级会员

积分
312
发表于 2024-12-27 16:26:28 | 显示全部楼层
VC*** 发表于 2024-12-27 16:18
你的这个代码存在很大问题。

虽然你称其为“状态机”,但是它并没有储存有意义的状态

目前是只作为一个命令控制,一般超不了自己设置的64字节,但就是普通的控制能执行,复位的0x60不能执行,好奇怪,
没事就炸板
有事炸俩板
ꉂ೭(˵¯̴͒ꇴ¯̴͒˵)౨”
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看II
  • 打卡总天数:23
  • 最近打卡:2025-04-11 15:44:39

17

主题

83

回帖

312

积分

中级会员

积分
312
发表于 2024-12-27 16:28:51 | 显示全部楼层
VC*** 发表于 2024-12-27 16:18
你的这个代码存在很大问题。

虽然你称其为“状态机”,但是它并没有储存有意义的状态

调试的结果就是,UPDATE\r\n不能执行复位烧录,极少情况下能成功,settime:一直可以
没事就炸板
有事炸俩板
ꉂ೭(˵¯̴͒ꇴ¯̴͒˵)౨”
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:123
  • 最近打卡:2025-04-19 16:12:35
已绑定手机

60

主题

777

回帖

4001

积分

论坛元老

自定义头衔

积分
4001
发表于 2024-12-27 16:33:58 | 显示全部楼层
Anr*** 发表于 2024-12-27 16:26
目前是只作为一个命令控制,一般超不了自己设置的64字节,但就是普通的控制能执行,复位的0x60不能执行, ...

又发现了一个问题

截图202412271629438252.jpg

你在第147行判断,上一个值是\n时,就把上上个值修改为\0

例如收到UPDATE\r\n后
将其修改为UPDATE\0\n

虽然看起来没什么用,但是确实也没什么副作用。

我建议可以尝试调试一下,将R_Buf里的数据通过串口打印出来。
检查一下它在收到STC-ISP发送的UPDATE\r\n的时候,是否确实正确无误地收到了,开头一定不能有多余的字节,否则首字节不是'U',就无法成功匹配了
联系我请点击左下角的【回复】按钮,否则我收不到消息提
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看II
  • 打卡总天数:23
  • 最近打卡:2025-04-11 15:44:39

17

主题

83

回帖

312

积分

中级会员

积分
312
发表于 2024-12-27 16:35:24 | 显示全部楼层
这个目前跑了一段时间了,settime:的命令依旧可以使用,但烧录仍监测不到,如果我把IAP_CONTR=0x60;的判断加到中断中,两个都不影响,都能正确执行,但我的leader更希望我放到后续写状态机中,中断只负责接收,所以,我有点满头包不晓得怎么处理这个情况
截图202412271630542408.jpg
截图202412271633506320.jpg
没事就炸板
有事炸俩板
ꉂ೭(˵¯̴͒ꇴ¯̴͒˵)౨”
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看II
  • 打卡总天数:23
  • 最近打卡:2025-04-11 15:44:39

17

主题

83

回帖

312

积分

中级会员

积分
312
发表于 2024-12-27 16:37:14 | 显示全部楼层
VC*** 发表于 2024-12-27 16:33
又发现了一个问题

好的,我打印检查一下
没事就炸板
有事炸俩板
ꉂ೭(˵¯̴͒ꇴ¯̴͒˵)౨”
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看II
  • 打卡总天数:23
  • 最近打卡:2025-04-11 15:44:39

17

主题

83

回帖

312

积分

中级会员

积分
312
发表于 2024-12-27 16:42:58 | 显示全部楼层
VC*** 发表于 2024-12-27 16:33
又发现了一个问题

settime可以正确返回,UPDATE无返回
截图202412271641569621.jpg
截图202412271642266736.jpg
没事就炸板
有事炸俩板
ꉂ೭(˵¯̴͒ꇴ¯̴͒˵)౨”
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看II
  • 打卡总天数:23
  • 最近打卡:2025-04-11 15:44:39

17

主题

83

回帖

312

积分

中级会员

积分
312
发表于 2024-12-27 16:47:50 | 显示全部楼层
Debu*** 发表于 2024-12-27 16:16
看您的变量命名疑似使用了我的串口收发程序
https://www.stcaimcu.com/forum.php?mod=viewthread&tid=4598
...

额,目前用是stc8a8k64d4,支持如上功能吗

点评

该型号不支持RTC  详情 回复 发表于 2024-12-27 16:57
没事就炸板
有事炸俩板
ꉂ೭(˵¯̴͒ꇴ¯̴͒˵)౨”
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-5-9 22:28 , Processed in 0.151090 second(s), 116 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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