完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
代码如下:发送400左右个字节 rt_device_write(dev, 0, USART3_TX_BUF, n); 然后串口调试助手显示如下: 问题1:为什么一帧数据之间有几十ms的间隔呢?这样导致我的从机不会认为它是一帧了。我需要在发送的时候关闭调度器吗? 问题2:我在接收的时候也是这样,把一帧数据打断。同事用的3.1.2版本,他的device_read可以一次读一帧数据,几百个字节,我读到的都是断开的。 补充信息补充信息 8.7.9:43 04 10 01 00 00 C9 01 92 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 32个字节 时间是40.612——40.657,一个字节1.40625ms,1位是0.17578125,1s发5688.88,相当于波特率是这个 9600波特率,一个字节,起始,8位字长,1停止,10个bit位,1s中9600个比特位,960个字节,一个字节1.0416666ms 百度了一下,超过2个字节的时间,就认为产生空闲中断了。9600是2ms左右,我这也没超过啊,偶尔也有这种情况,这种应该超过了42ms 6个字节 怎么在线程切换的时候打印一个信息呢?比如进入这个线程,或者离开这个线程的时候,我看看是因为线程切换,还是因为啥。 线程时间片拉长到150ms了,不好使啊。添加了dma发送模式 试试, 8.8 9:26添加 可以看到,接收的时候,第一帧是串口助手发的,第二帧是从机响应的。主机接收的时候,把他俩当成一帧了,下面open time tick是主机每次调用device read成功时开启定时器的时间,他把这些分成了3份 共388个字节,时间是394-155 = 249ms,一个字节 0.6417,为什么这么快呢 现在用超时判断一帧的时候,200ms才能保证接收不出错,150ms偶尔接收会失败。这太变态了,哪个串口同一帧数据,间隔了150ms |
|
相关推荐
11个回答
|
|
是不是有更高优先级的任务抢占了,或者时间片耗尽了。有逻辑分析仪可以抓一下看看,应该是字节之间有空隙
|
|
|
|
加了禁止调度之后,从机就能正常返回数据了。你说的时间用完,还真有可能
|
|
|
|
任务优先级都是一样的
|
|
|
|
优先级一样那就会轮流执行,执行时间根据你分配的时间片来的
|
|
|
|
如你所言,9600bps,是一个比较低的波特率,一秒极限也就960bytes。如果你连续发送400bytes,还要求关闭调度器,意味着有些线程接近0.5s得不到响应,用RTOS就没什么意义了。
如果是普通模式发送数据,CPU在等待发送完成期间一直被占用,如果优先级更高线程就绪(systick 1ms判断1次),就会打断发送; 如果是字节中断模式发送数据,大约1.04ms产生一次字节中断,对CPU占用高,也影响实时性。建议用DMA试试看。 数据是否为一帧的判断,应该在收发双发约定好数据帧格式,逐字节按照格式来进行判断,然后有一个最大超时时间来判断数据是否连续。这部分用有限状态机来做会很方便,程序也清晰可读,便于快速协议移植和修改。 不清楚你的从机判断逻辑,所以没法进一步讨论了。祝顺利! ps:串口调试助手可以设置数据分开显示的时间间隔。你根据提示自己计算一下看看。 |
|
|
|
可是我禁止调度的话,从机可以正常接收,解析,并返回数据。不禁止就不行,这是什么道理呢
|
|
|
|
禁止调度后,CPU就被当前线程独占了,没有线程切换,所以是连续不停发送。
请问,你的从机也是用RTT开发的吗? 如果从机解析部分的鲁棒性强一些,在规定超时时间内收到数据就正常解析了;如果超时时间短的话,或者仅仅以1次读取结果为判断依据的话,那就会失败。 所以我在回帖的时候,就问你的从机是如何处理数据的。 如果你不禁止调度,将发送线程优先级设置为最高,是不是也会解析成功呢? 再补充描述一下:假设,从机是人肉逐字节核对。此时,即使主机发送断帧,从机也一定会解析成功并返回对应数据,对吗?所以,我觉得你是把帧解析和发送被打断两件事情混合在一起考虑了。在设计的时候,流式数据要按照帧完整性来考虑,这样才能将收、发解耦。 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
首先,串口的发送就是一帧一帧发,发送方和接收方其实硬件上不知道啥时候结束,空闲中断只是单纯的判断一段时间超了一个固定时间长度就进入中断了(根据不同芯片型号一般是一字节或者三字节时间长度),你遇到问题一这种情况首先就需要用示波器看一下进终端地方的波形,应该明显时钟是长的,所以大部分情况下对于这种长度较长的单包数据接收不会单纯的用中断,而是中断+超时的形式最为稳妥,因为你的内部调度及外部的电信号都会影响发出的波形,内部还好,工业中的外部环境就更不可控了。
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
794 浏览 0 评论
4650 浏览 0 评论
如何使用python调起UDE STK5.2进行下载自动化下载呢?
2588 浏览 0 评论
开启全新AI时代 智能嵌入式系统快速发展——“第六届国产嵌入式操作系统技术与产业发展论坛”圆满结束
2945 浏览 0 评论
获奖公布!2024 RT-Thread全球巡回线下培训火热来袭!报名提问有奖!
31650 浏览 11 评论
73044 浏览 21 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-24 22:19 , Processed in 0.893502 second(s), Total 90, Slave 73 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号