请教LPC1788程序跳转到SDRAM运行的问题!

[复制链接]
5063|19
 楼主| weijinhui35 发表于 2013-12-11 09:10 | 显示全部楼层 |阅读模式
手里有一块开发板外接NORflash和SDRAM ,我写了一个简单的bootloader将应用程序的bin文件16进制格式下载到了NORFLASH然后又将其copy到了SDRAM,这时当我用bootloader引导跳转到SDRAM程序起始地址的时候通过仿真发现程序异常跳到启动文件的死循环处。然后我把跳转地址改为bootloader程序大小范围之内跳转就没问题,也就是说不能跨程序跳转否则就出现地址溢出错误!请问大侠有没有遇见过同样的情况的 求解!!
huangxz 发表于 2013-12-11 14:26 | 显示全部楼层
lpc1788里面有存储保护模块,楼主可以看看
 楼主| weijinhui35 发表于 2013-12-11 15:04 | 显示全部楼层
是因为外接的设备跟本地的flash存储方式不一样吗  需要修改哪里的属性怎么修改
 楼主| weijinhui35 发表于 2013-12-11 15:04 | 显示全部楼层
是因为外接的设备跟本地的flash存储方式不一样吗  需要修改哪里的属性怎么修改
huangxz 发表于 2013-12-11 15:39 | 显示全部楼层
想问下楼主你是跳转到0xa000_0000后直接挂掉还是进入hardfault中断
 楼主| weijinhui35 发表于 2013-12-12 08:27 | 显示全部楼层
是跳到hardfault中断 死循环那里,貌似就是异常处理
 楼主| weijinhui35 发表于 2013-12-12 08:31 | 显示全部楼层
huangxz 请教有什么问题吗 我这样做的方法可行吗 跟硬件连接有没有关系 我的EMC地址总线是错了一位连接的 就是LPC1788的EMC_A1接NORFLASH的A0
 楼主| weijinhui35 发表于 2013-12-12 09:11 | 显示全部楼层
huangxz 发表于 2013-12-11 15:39
想问下楼主你是跳转到0xa000_0000后直接挂掉还是进入hardfault中断

是跳到hardfault中断了  能帮我解决下这个问题吗  怎么解决用自己写的bootloader直接跳的话就出现这个异常中断
bald 发表于 2013-12-12 18:17 | 显示全部楼层
如果做得汇编程序,把目标地址做到数据池里。跳转的时候调到寄存器里用bx指令或blx指令。
如果C语言程序不应该有这个错,因为编译器会自动解救这个问题。前提是将该段程序属性设置为位置无关。
huangxz 发表于 2013-12-12 23:25 | 显示全部楼层
weijinhui35 发表于 2013-12-12 09:11
是跳到hardfault中断了  能帮我解决下这个问题吗  怎么解决用自己写的bootloader直接跳的话就出现这个异 ...

在跳转之前先设定msp,这个跟arm7不一样,

  1.         /* Jump to user application */
  2.                       JumpAddress = *(__IO uint32_t*) (APPLICATION_ADDRESS + 4);
  3.                       Jump_To_Application = (pFunction) JumpAddress;
  4.                       /* Initialize user application's Stack Pointer */
  5.                       __set_MSP(*(__IO uint32_t*) APPLICATION_ADDRESS);
  6.                       Jump_To_Application();

rocdove 发表于 2013-12-15 17:59 | 显示全部楼层
都是牛人,没看懂啊!
aifei7320 发表于 2014-1-16 10:41 | 显示全部楼层
楼主的问题解决了吗?能跟我分享一下你是如何解决的吗?
inurl 发表于 2014-1-17 08:41 | 显示全部楼层
huangxz 发表于 2013-12-12 23:25
在跳转之前先设定msp,这个跟arm7不一样,

正解  ,跳转的代码需要参考IAP程序
xinzha 发表于 2014-1-17 10:14 | 显示全部楼层
使用相对跳转是有跳转地址范围的,不一样的存储类型很有可能地址相差很远,这时候就需要使用ldr pc这类的指令,而不是带b的指令。
qzroger 发表于 2014-3-25 09:12 | 显示全部楼层
楼主 你写的BOOTLOADER程序 能看下么,现在我也在搞这个,交流交流
cybinlyc 发表于 2014-7-5 00:38 来自手机 | 显示全部楼层
楼主的应用程序中的中断向量表也是放在sdram中吗?但是1788的中断偏移寄存器不能指到sdram地址的,这是个问题吗?该如何处理呢?我现在也在搞这个bootloader楼主的bootloader能给参考下么?我现在的bootloader能跳转到flash二扇区或是sram中运行的,就是一跳转到sdram就出问题,进入hard fault了。好头大啊!楼主能帮忙的话发我QQ邮箱:2380022611@qq.com啊,先感谢你了。
cybinlyc 发表于 2014-7-5 00:42 来自手机 | 显示全部楼层
qzroger 发表于 2014-3-25 09:12
楼主 你写的BOOTLOADER程序 能看下么,现在我也在搞这个,交流交流

Qzroger你现在搞懂了吗?我现在也是搞这个,一跳转到sdram运行程序就出问题了,大哥,搞懂了的话可以把bootloader给我参考参考吗?我qq邮箱2380022611@qq.com,请求大哥帮帮忙啊。十分感谢啊!
简单爱琴海 发表于 2014-7-15 17:40 | 显示全部楼层
楼主,有没有LPC1788 flash读写程序,求赐教,邮箱963429304@qq.com,谢谢了
Wayner 发表于 2014-10-18 20:19 | 显示全部楼层
我也不能运行啊,来回看资料1个多礼拜了
 楼主| weijinhui35 发表于 2016-12-9 09:33 | 显示全部楼层
这么久了,到最后我还是没在sdram上跑代码,或许cortex m系列的mcu是不适合在外部挂程序吧,后来我在片上flash分割了区域进行跳转,bootloader的代码和应用代码不再同一区域,开机先进入bootloader,再从bootloader跳转到对应的应用代码区域去运行。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

7

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部