完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
rt_uint16_t n,i,crc; 这是通过日志打印出来的字符串的内容 string字符串的内容 {"addr":1,"control":2,"comNum":7,"comIndex":0,"ctime":"000000","crc":8999} 这是通过串口发送的内容,最后几位变成了 0 rt_device_write(env_dev, 0, string, len); 我一开始以为是strlen长度不够,但是字符串里没有0啊,单步调试,strlen的结果也和字符串的长度一致。 通过这个串口发送其他内容的时候,都挺正常的,发送这个不正常 |
|
相关推荐
3个回答
|
|
|
使用轮询发送数据是在数据全部发送完成后才会退出线程;
使用DMA发送数据,数据还未发送完成就会退出线程; 所以如果使用临时变量的话,就会在退出线程的时候释放作用域,变为不确定的值; 所以使用DMA的时候要把发送的数据定义为全局变量或者使用static修饰 |
|
|
|
|
|
再讲讲DMA和轮询发送机制上的区别
轮询:就是让单片机逐个字节发送,当你在发送函数中打断点,MCU暂停运行,字节也停止发送 DMA:独立的硬件,发送函数只是让MCU告诉DMA发送器数据的地址和长度,然后使能DMA,数据就会由硬件自动进行搬运,即便暂停CPU也不影响DMA工作,只要局部变量还没释放,DMA就会把正确的数据发送完成,这也是你为什么打断点就正常的原因,在发送函数后面加个1秒的延时效果是一样的 举个例子:你在打游戏,这个时候你有十个快递要寄到北京,有两种方法 1.停止打游戏的动作,然后自己把快递送到北京,然后再打游戏 2.停止打游戏的动作,然后打个电话告诉送快递的小哥快递的数量和目的地,让后继续打游戏 快递到达北京的时间是一样的,但是打游戏的体验是完全不一样的 |
|
|
|
|
|
跟一下源码单步调试一下,看看轮询发送和DMA发送有什么不一样的。
_serial_dma_tx 和 _serial_poll_tx // 文件 rt-thread/components/drivers/serial/serial.c static rt_size_t rt_serial_write(struct rt_device *dev, rt_off_t pos, const void *buffer, rt_size_t size) { struct rt_serial_device *serial; RT_ASSERT(dev != RT_NULL); if (size == 0) return 0; serial = (struct rt_serial_device *)dev; if (dev->open_flag & RT_DEVICE_FLAG_INT_TX) { return _serial_int_tx(serial, (const rt_uint8_t *)buffer, size); } #ifdef RT_SERIAL_USING_DMA else if (dev->open_flag & RT_DEVICE_FLAG_DMA_TX) { return _serial_dma_tx(serial, (const rt_uint8_t *)buffer, size); } #endif /* RT_SERIAL_USING_DMA */ else { return _serial_poll_tx(serial, (const rt_uint8_t *)buffer, size); } } |
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
1092 浏览 0 评论
3044 浏览 0 评论
图腾柱PFC无法上升至400V,且电感电流为正弦波形,但是幅值极小
9411 浏览 0 评论
飞凌嵌入式ElfBoard-Vim编辑器之静态链接和动态链接
2900 浏览 0 评论
使用 LinkBoy 将程序导出为 C 语言代码并烧录至 Arduino ESP32 开发板
2305 浏览 1 评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-2 19:50 , Processed in 0.878447 second(s), Total 81, Slave 63 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
1179