串口DMA双缓冲接收外部数据例程分享

2019-08-19 18:20发布

今天调试了下如题的程序,将串口接收到的数据通过DMA方式搬移到内存缓冲区中
并且建立双缓冲区以避免数据覆盖丢失

在串口调试工具的测试下,1ms循环发送500字节的数据不会丢失

目前未测试的内容是将两个缓冲区的内容写入SD卡,可能存在的问题是在存储一个
缓冲区的内容时不能保证另一个缓冲区不会溢出。。。。。

程序可加入的内容是用定时器超时及时将缓冲区的内容存储到sd卡中,以防止外部
部数据传输中止导致DMA传输完成中断不触发
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
20条回答
ricefat
1楼-- · 2019-08-19 23:50
 精彩回答 2  元偷偷看……
lycreturn
2楼-- · 2019-08-20 03:31
谢谢分享。。
战舰水手
3楼-- · 2019-08-20 06:10
回复【2楼】ricefat:
---------------------------------
已经做好了。测试每1ms发送500*32byte不丢数据。
我把串口的双接收缓冲内容都先放到同一个缓冲区中,这个缓冲区到达一定字节数一次写入SD卡,这样是不是有点浪费内存,是不是
一个缓冲区满之后就直接在传输完成中断里面把数据一次写入SD卡也能达到效果?

还有一点想请教老师一下:如果我想间断性得把SD卡里面的数据通过GPRS发送出去,是不是上操作系统比较好
ricefat
4楼-- · 2019-08-20 06:36
回复【4楼】战舰水手:
---------------------------------
我的本意就是两个缓冲就够了,不需要额外SD卡缓冲。不过需要考虑SD卡的写入次数,双缓冲足够大或是额外加入SD写缓冲,相当于用空间换寿命。

我对操作系统不了解,只是知道操作系统基本上是把任务分时细化完成。如果只是间隔发送GPRS,用个定时器应该就够了。用串口DMA接收,DMA写SD卡,就是为了让CPU有时间来完成其他任务。
战舰水手
5楼-- · 2019-08-20 11:36
回复【5楼】ricefat:
---------------------------------
那DMA的中断会被其它中断打断?
ricefat
6楼-- · 2019-08-20 14:14
 精彩回答 2  元偷偷看……

一周热门 更多>