发新帖我要提问
12
返回列表
[STM32]

我理解的DMA模块功能

[复制链接]
楼主: eydj2008
手机看帖
扫描二维码
随时随地手机跟帖
eydj2008|  楼主 | 2018-8-7 17:03 | 显示全部楼层
icecut 发表于 2018-8-7 16:55
dma是给高级代码用的. 入门级的代码,的确用不起来...

请赐教

使用特权

评论回复
eydj2008|  楼主 | 2018-8-7 17:03 | 显示全部楼层
icecut 发表于 2018-8-7 16:55
dma是给高级代码用的. 入门级的代码,的确用不起来...

请赐教

使用特权

评论回复
icecut| | 2018-8-7 17:06 | 显示全部楼层
本帖最后由 icecut 于 2018-8-7 17:27 编辑

你先上os. 再考虑dma...否则,代码太难写了.你的基于时间片轮询基本上太弱了.可以看看实时os的基于中断和时间片的综合调度算法. 中断来了按中断处理.中断不来按时间片处理.这两个时间统计和复杂调度我就不方便细说了.

使用特权

评论回复
eydj2008|  楼主 | 2018-8-7 17:26 | 显示全部楼层
ayb_ice 发表于 2018-8-7 08:38
那是你任务管理的事情,与DMA本身无关,你可以先执行其它任务,中断后再发个消息切回那个任务处理。。。
...

或许 当速率很低, 我又不想在那里等它,  应该是可以用上DMA了

使用特权

评论回复
lxyppc| | 2018-8-7 23:17 | 显示全部楼层
eydj2008 发表于 2018-8-6 17:05
再比如 我用SDIO读SD卡 文件 读512B 用时3ms
DRESULT SD_read(BYTE lun, BYTE *buff, DWORD sector, UINT  ...

上面的代码执行到 BSP_SD_ReadBlocks的时候
通常的做法是配置DMA,然后启动DMA,等待DMA完成标志,然后切换到别的线程
DMA完成后会设置DMA完成标志,根据优先级会调度回调用BSP_SD_ReadBlocks的线程

使用特权

评论回复
eydj2008|  楼主 | 2018-8-8 09:04 | 显示全部楼层
lxyppc 发表于 2018-8-7 23:17
上面的代码执行到 BSP_SD_ReadBlocks的时候
通常的做法是配置DMA,然后启动DMA,等待DMA完成标志,然后切 ...

理论上是这样的, 关键在于 你读多少数据  速率多少.  我们讨论的结果,就是传送时间 决定是不是该上DMA了 , 上DMA这时 能明显提高CPU利用率.
换句话说 不是说用DMA就能提高CPU利用率.

使用特权

评论回复
dwdsp| | 2018-8-8 09:09 | 显示全部楼层
最大的优势就是省时间,特别对时间敏感的数据采集类项目就体现出优势了

使用特权

评论回复
地瓜patch| | 2018-8-8 10:10 | 显示全部楼层
DMA与直接外设接收发送数据没有多大的区别,优点在于节省cpu资源

使用特权

评论回复
菜鸟同学| | 2018-8-8 10:15 | 显示全部楼层
DMA 还是占用总线的。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则