完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
项目中需要使用439的的HASH模块计算文件的MD5值,使用的DMA方式,为了提高CPU效率,让其他任务在DMA传输数据、硬件计算MD5期间可以得到运行,DMA的数据来自FMC外扩的SDRAM。
现在的问题是,经过多次调试发现,启动DMA传输后 CPU貌似没运行代码,而是等DMA传输和计算都完成了之后才运行后面的代码,我使用时间戳功能测量了函数 HAL_HASH_MD5_Start_DMA 的运行时间,得到的时间就是DMA传入数据和MD5计算的时间,也就是说,这个函数里面启动了DMA传输后 程序就停了,等整个MD5都计算完了才从这个函数中出来,很是费解,我看了下总线矩阵,也没冲突的地方啊,为什么会出现这个情况...有人知道吗? 下面的是HAL的程序,我在里面加入了测量时间功能,86-89行是我指出的有问题的地方:
|
|
相关推荐
2个回答
|
|
建议你用IO翻转来代替OS_TS_GET()测量时间。
|
|
|
|
从描述来看,你的目标是使用STM32F439的HASH模块计算文件的MD5值,同时通过DMA传输数据以提高CPU效率。你的问题是启动DMA传输后,CPU似乎不会执行其他代码,直到DMA传输和MD5计算都完成。
要解决这个问题,首先需要确认一些事项。 1. 确保DMA传输配置正确:确保DMA正确地配置为从FMC外扩的SDRAM传输数据到HASH模块。检查DMA传输参数,包括源和目的地址、传输长度等,并确保它们与SDRAM和HASH模块的正确地址匹配。 2. 确保DMA接收中断使能:检查DMA接收中断的使能状态。如果没有使能中断,则DMA传输完成后不会触发中断,CPU也不会执行相关的中断处理程序。如果需要,在DMA配置中使能中断,并编写相应的中断处理程序。 3. 确保MD5计算没有阻塞CPU:某些情况下,MD5计算可能会阻塞CPU,而不仅仅是DMA传输。确保你使用的MD5计算库或代码不会导致这种情况。可以使用时间戳来测量MD5计算的时间,确保它不会超过可接受的范围。 4. 确保其他任务获得运行机会:使用RTOS或其他任务管理器来确保其他任务获得足够的运行时间。在DMA和MD5计算期间,确保其他任务可以得到适当的CPU资源,可以使用任务优先级或抢占式调度来实现。 关于总线矩阵和总线优先级的问题,STM32F439芯片是基于ARM Cortex-M4内核,具有高度配置灵活性和优先级控制。你可以使用总线矩阵配置寄存器来设置不同总线之间的优先级,确保DMA和其他外设之间的公平共享。可以参考芯片手册以了解更多关于总线矩阵的详细信息。 另外,可以尝试使用读取SR寄存器的方式来确认CPU是否被阻塞。SR寄存器包含HASH模块的状态信息,通过检查SR寄存器的标志位,可以确定是否在MD5计算期间阻塞了CPU。 最后,如果问题仍然存在,建议检查你的代码实现,确保没有其他地方阻塞了CPU。可能还需要查看HAL库的源代码,以确保函数`HAL_HASH_MD5_Start_DMA`的实现没有阻塞CPU的操作。如果需要的话,可以参考库代码的实现并进行相应的修改。 |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1801 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1629 浏览 1 评论
1096 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
735 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1684 浏览 2 评论
1944浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
745浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
579浏览 3评论
602浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
565浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-27 15:04 , Processed in 1.136395 second(s), Total 79, Slave 62 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号