完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
通过使用 __DATA MACRO(例如 __DATA(BOARD_SDRAM) CanBuffer_t canBufferPool[MAX_CAN_BUFFERS];)声明数组,我在我的 LPC54S018 板的 BOARD_SDRAM 区域中存储了几个大型未初始化的内存阵列。我的代码是从串行闪存运行的。
为实现此目的,我查看了 SDK 中的 emc_sdram 软件示例,并使用示例中的信息修改了 pin_mux 文件并在 Main() 中添加了对 BOARD_InitSDRAM() 的调用。我还必须修改 startup_lpc54s018.c 和 startup_lpc54s018.cpp 中的 ResetiSR() 代码,以不访问 BOARD_SDRAM 内存区域中的任何内存位置。此修复是必需的,因为可执行映像具有用于大型数组的 .BSS 区域,并且 ResetISR() 函数正在将数组的内存设置为零,然后才能通过调用 Main() 中的 BOARD_InitSDRAM() 来初始化对 BOARD_SDRAM 的访问. 有了这个修复,软件就可以加载并运行了。 有什么建议么? 然后我尝试将可执行代码移动到 SRAMX 内存区域。当我这样做时,软件加载和启动过程在 Main() 启动之前失败。调试器似乎在 ResetISR() 中中断,但调试器仍认为 CPU 正在运行。我说挂起,然后 CPU 似乎在引导加载程序的某个地方挂起。 如果我缩小 BOARD_SDRAM 中数组的大小并将它们移回片上内存,并且仍然让我的代码从 RAM 运行,加载和启动过程将按预期进行。在调用 Main() 之前是否还有其他地方可以访问 BOARD_SDRAM? 请注意,我的代码与软件示例中所做的不同之处在于,我声明了数组,而该示例仅在访问初始化后设置了指向 BOARD_SDRAM 区域的指针。该示例使用指针访问 BOARD_SDRAM 内存区域的部分内容。如果将多个大型阵列放入 BOARD_SDRAM 中,则此方法效果不佳,因为必须手动找出阵列所在的位置。 解决了! 转到解决方案。 首先,您是否成功尝试过命名示例? 另外,你能看看下面类似的帖子吗? 他们将 BOARD_InitSDRAM() 代码行放入 system_LPC54S018.c 文件的 SystemInitHook() 中。 最好的,劳尔。 |
|
相关推荐
|
|
只有小组成员才能发言,加入小组>>
1032 浏览 1 评论
562浏览 6评论
470浏览 5评论
有没有办法在不使用混杂模式的情况下实现Wifi驱动程序接收缓冲区访问中断呢?
454浏览 5评论
455浏览 4评论
428浏览 4评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-4 02:54 , Processed in 0.666565 second(s), Total 73, Slave 56 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号