串口向单片机发送指令怎么才能不丢失数据包?

来源:百度知道 编辑:UC知道 时间:2024/04/29 06:09:41
有高手愿意帮忙吗?我用串口向单片机发送指令,指令较多,时间间隔不确定,怎么才能让单片机按顺序执行每一条指令?

同学给我两个提示:
二种方法
一、串口发送一条指令,单片机接收后立即执行。串口再发送指令,单片机再执行。(时间间隔不确定,这种方式不行)
二、单片机接收完所有指令后,再按顺序执行。这种方法也不行.
我是开中断的,比如电脑有时在1秒内发送10条指令.有时1分钟也不发送一条指令.我怎么样做才能按顺序执行这些指令呢?

创建一个队列,把接收到的指令存放在该队列中。指令从串口中断得到。
判断队列。队列空时,等待串口中断接收命令填充队列;队列不为空时,读取队列元素执行相应动作。直到队列为空。
如果在执行命令过程中串口中断接收到新的指令,则新指令存入队列尾部后继续执行未完成的命令。直到队列为空。

这样做要判断最大指令数量、相应指令的执行时间长度来得到需要的队列大小,从而确保RAM不会溢出。即是命令的发送速度不能超过单片机的处理能力。

这个想法基于队列后进后出的特点。希望能够帮到你。

你不开串口中断的吗?还有,你发的是指令还是数据包,这两个东西严格讲是要分开对待的。

指令数据一般都比较短,最好约定数据长度以及固定头尾的字节。比如
AA XX XX 16 这里XX XX是2字节指令。
数据可以沿用上面的模式,多加个长度字节,比如AA LL XX XX XX 16,这里LL是数据长度(不包括AA)XX XX是数据。其他的还要考虑避开AA和16这2个关键字,具体的请自己再去学习。

如果你中断开了,单片机还是不能在2条指令间完成任务,那就只能说明一点,你指令发的太频繁了。减慢指令发出间隔,或者优化程序、换单片机,提高运行速度。就算是电脑的CPU也是有速度限制的,如果你命令发快了,再好的电脑CPU也反应不过来

用中断接收

你说的指令是指什么?
单片机的程序是已经烧录后固化的,不可能从电脑接收指令去执行的,从电脑收到的只有数据...
.
.

串口发送完后,单片机执行操作,等操作完成后再往上位机发送指令,让上位机再发下一串数据。

打开“开始”点“运行”有小框输入“cmd”再打要发送的ip地址会发送5次加“-t”会发送无数次