1788外扩了SDRAM,系统总是跑不起来,总是产生HardFault。

2019-03-25 20:13发布

1.问题:1788外扩了SDRAM,系统总是跑不起来,总是产生HardFault。2.系统说明:ucosiii+emwin,由于要显示一些画面,显示对话框中添加了 图片,编译结果代码量很大。3.外扩SRAM设置步骤1在启动文件中增加__low_level_init,其中为了初始化SDRAM,具体为什么放到main之前,原因不祥,按照官网emwin例程做的. SRAM1.jpg
2)需要选用offRAM1,编译代码 RW-data +ZI-data超出64k SDRAM2.jpg
3)修改分散加载文件 SDRAM3.jpg
4.问题现象单步运行调试发现EMC初始化中的引脚初始化产生handlefault ,如下图中的黄 {MOD}标示行。程序运行顺序:1)  SystemInit2)  __low_level_init 调用SDRAMInit()调用PINSEL_ConfigPin()调用PIN_GetPointer()在此位置产生handlefault。 SDRAM4.jpg


此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
8条回答
zhaojun_xf
1楼-- · 2019-03-26 00:29
_NXP LPC1000_ 产生这个问题一般是内存或者堆栈溢出,也有可能是指针应用中产生错误。
ou513
2楼-- · 2019-03-26 01:43
建议你先单独调试一下SDRAM看看配置上对了没有,应该是SDRAM有问题
zsz2008610
3楼-- · 2019-03-26 04:30
SDRAM初始化程序在SDRAM的一个测试程序中使用,没有问题,SDRAM测试都通过。
在单步运行查看好像不是堆栈溢出,在调用引脚设置函数时,不能返回到原调用位置,不知为什么?
修改分配大小,不知分配多少合适,先修改试试,调试步骤
1)大小分配如下,stack_size 0x200000, heap_size 0x400000,足够大吧 SRAM1.JPG
查看map地址如下,是片外SDRAM的地址
SRAM2.JPG
单步运行到将要出现hardfault的位置,堆栈情况如下:MSPR13都是0XA0623648,比栈顶略低一点 SRAM3.JPG 但是执行到retuin }之后,MSPR13都是0XA0623650,堆栈也没溢出,但是PC指向了一个死循环,MOVS r0 r0 ,不知为什么会返回到这来了 SRAM4.JPG 再仔细查看return处的汇编,运行到}位置,没有返回到条用该该函数的位置,直接到上图位置。 SRAM5.JPG 这就不明白为什么了。
cybinlyc
4楼-- · 2019-03-26 08:51
1)、对于__low_level_init可以再main前或是main后初始化,放在main前我认为是SDRAM是属于底层,和系统时钟一样应该已经作为运行条件已经准备好了,这样更符合逻辑。
2)、对已(2)和(3)这两个的设置应该是使用其中的一个才对,两个是不能同时使用,无论是(2)和(3)应该都是选用了SDRAM作为了RW-data +ZI-data区域,也就是说SDRAM也是代码的运行区域,这应该是有问题的。默认情况上SDRAM不作为代码的运行区域,要作为代码的运行区域可以设置MPU。
zsz2008610
5楼-- · 2019-03-26 10:36
cybinlyc 发表于 2015-12-4 10:01
1)、对于__low_level_init可以再main前或是main后初始化,放在main前我认为是SDRAM是属于底层,和系统时钟 ...

谢谢大侠指点,关于MPU的修改还在研究中,要是有好的例程麻烦大侠推荐下
cybinlyc
6楼-- · 2019-03-26 13:20
 精彩回答 2  元偷偷看……

一周热门 更多>