OpenEdv-开源电子网

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

报文命令后者优先如何实现

[复制链接]

6

主题

51

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
251
金钱
251
注册时间
2019-7-25
在线时间
57 小时
发表于 2019-9-5 14:07:20 | 显示全部楼层 |阅读模式
5金钱
报文中有一位是命令位,有时前一个命令还没处理完就收到第二个命令了,怎么实现不同的命令冲突时后发的优先运行,后者处理结束后恢复前者(类似中断)

最佳答案

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

设置一个定时器,实时检测串口数据,有新命令数据来的时候判断当前是否已经有命令在执行,有的话就暂停当前命令执行新命令。判断当前是否有命令执行,就用标志位
----------------肉粒多真好吃呀
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

8

主题

182

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
421
金钱
421
注册时间
2017-3-8
在线时间
114 小时
发表于 2019-9-5 14:07:21 | 显示全部楼层
设置一个定时器,实时检测串口数据,有新命令数据来的时候判断当前是否已经有命令在执行,有的话就暂停当前命令执行新命令。判断当前是否有命令执行,就用标志位
回复

使用道具 举报

6

主题

51

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
251
金钱
251
注册时间
2019-7-25
在线时间
57 小时
 楼主| 发表于 2019-9-5 14:16:42 | 显示全部楼层
报文是串口接收来存入寄存器中,所以外部中断那种的上升沿下降沿之类的行不通,小白不知道要怎么解决
----------------肉粒多真好吃呀
回复

使用道具 举报

6

主题

51

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
251
金钱
251
注册时间
2019-7-25
在线时间
57 小时
 楼主| 发表于 2019-9-5 14:18:00 | 显示全部楼层
命令处理时会有状态的变化,所以不能单纯设置一个标志位(因为这样会重新从头处理前者命令,而不是继续)
----------------肉粒多真好吃呀
回复

使用道具 举报

6

主题

51

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
251
金钱
251
注册时间
2019-7-25
在线时间
57 小时
 楼主| 发表于 2019-9-5 16:15:21 | 显示全部楼层
15937417823 发表于 2019-9-5 16:05
设置一个定时器,实时检测串口数据,有新命令数据来的时候判断当前是否已经有命令在执行,有的话就暂停当前 ...

关键是新命令处理完了之后怎么恢复之前的呢?而且旧的命令还不能从头开始,要从哪里暂停就哪里恢复
----------------肉粒多真好吃呀
回复

使用道具 举报

8

主题

182

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
421
金钱
421
注册时间
2017-3-8
在线时间
114 小时
发表于 2019-9-5 16:22:51 | 显示全部楼层
你的命令数据是做什么的?你在命令的执行函数里边也做标记,比如你的执行函数有十句,没一句后边加一个标号,执行完一句标号+1,暂停时候记住你的标号,下次你直接从标号开始执行。可以用switch。case ,然后case语句里边判断有新的命令来了再break,同是记录下当前的case值,下次再调用这个命令函数时候传你暂停时候记录的case值+1,这样就接着之前的往下继续了。
回复

使用道具 举报

6

主题

51

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
251
金钱
251
注册时间
2019-7-25
在线时间
57 小时
 楼主| 发表于 2019-9-6 14:38:50 | 显示全部楼层
15937417823 发表于 2019-9-5 14:07
设置一个定时器,实时检测串口数据,有新命令数据来的时候判断当前是否已经有命令在执行,有的话就暂停当前 ...

已经解决了,虽然不是用你的方法,很难讲清楚,不过还是谢谢
----------------肉粒多真好吃呀
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-12 19:22

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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