完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
问题: 该问题由某客户提出,发生在 STM32F407IGT6 器件上。据其工程师讲述:在其产品设计中使用了STM32 的以太网接口进行通信。在软件最初的调试中,该接口工作常。后来为了满足软件对内存容量的需求,启用了 STM32 的 CCM 存贮器,但启用后发现以太网接口不能通信。所使用的开发工具为Keil MDK,相关的内存分配如表(一): 进一步了解得知,在其软件中,使用了动态内存对以太网的数据报文进行了缓存,并且数据在以太网MAC 和内存中的缓存之间的传输是通过以太网的 DMA 功能进行的。于是,修改内存分配如表(二),然后得新测试。测试结果表明,以太网接口可以正常通信了。 结论: 对 STM32 的 CCM 存贮器使用不当。因为以太网的 DMA 与 CCM 存贮器之间没有数据通道,它们之间的数据传输数据是不能实现的。 处理: 修改内存分配,如表(二)。 建议: 为进一步提高对数据的处理性能,在 STM32F4 中设有 CCM 存贮器。与常规的存贮器不同,CCM 存贮器是 CPU 独享的存贮器。CCM 存贮器与 CPU 之间的数据传输不经过总线矩阵,以提高 CPU 对 CCM存贮的访问效率,如图(一)所示。这样的组织结构也决定了,只有 CPU 才能够访问 CCM 存贮器,而DMA 以及其它的外设与 CCM 存贮器之间没有数据通道,也就无法对其访问。在通常的应用中,适合将程序的栈放在 CCM 存贮器中,以提高中断的响应速度,以及对子程序的调用速度。同时,如果使用 C语言编程,函数的局部变量是定义在栈上的,所以把栈放在 CCM 存贮器中,也可以提高 CPU 对函数的局部变量的访问速度。对于一些算法的实现,比如 DSP 计算或浮点数计算,适合于把参与计算数据及计算出的结果存放在 CCM 存贮存器中,这样可以提高计算的效率。如果希望动态的管理 CCM 存贮器,则最好将其与常规存贮器加以区分。因为两种存贮器的属性不同,用途也不同。CCM 存贮器不能由 DMA 访问,而常规存贮器会降低 CPU 对数据的处理效率。 |
|
相关推荐
|
|
感谢蔡琰老师的每日分享
|
|
|
|
|
|
嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-初识设备树之设备组织架构
536 浏览 0 评论
531 浏览 0 评论
嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-初识设备树之设备树组成和结构
794 浏览 0 评论
【敏矽微ME32G070开发板免费体验】点亮WS2812B灯板
922 浏览 0 评论
嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-Linux内核移植之内核启动流程
879 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
12158 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-1-11 18:23 , Processed in 0.617417 second(s), Total 70, Slave 52 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号