查看: 8174|回复: 17

[已解决] mkl14 bootloader跳转到应用程序时进入bkpt指令(已解决)

[复制链接]

该用户从未签到

16

主题

90

帖子

0

中级会员

Rank: 3Rank: 3

积分
357
最后登录
2015-12-1
发表于 2015-3-25 13:39:03 | 显示全部楼层 |阅读模式
本帖最后由 cjpx84 于 2015-3-26 10:38 编辑

最近参考freescale官网提供的bootlaoder1.1源代码,将其bootloader代码移植到MKL14上,发现在跳转到用户应用程序的时候,会进入到Default_Handler接口。
void Default_Handler()
{
__asm("bkpt");
}
我初步定为到已进入MAIN函数就会发生异常。代码设置如下所示:

1)跳转代码如下所示:
void jump_to_application(uint32_t applicationAddress, uint32_t stackPointer)
{
    // Create the function call to the user application.
    // Static variables are needed since changed the stack pointer out from under the compiler
    // we need to ensure the values we are using are not stored on the previous stack
    static uint32_t s_stackPointer = 0;
    s_stackPointer = stackPointer;
    static void (*farewellBootloader)(void) = 0;
    farewellBootloader = (void (*)(void))applicationAddress;
    // Set the VTOR to the application vector table address.
    SCB_VTOR = (uint32_t)APP_VECTOR_TABLE;
    // Set stack pointers to the application stack pointer.
    __set_MSP(s_stackPointer);
    __set_PSP(s_stackPointer);
    // Jump to the application.
    farewellBootloader();
}

2)用户程序,我将连接文件做了修改,使其的起始地址从0x8000开始,代码如下所示:
MEMORY
{
  m_interrupts (rx) : ORIGIN = 0x00008000, LENGTH = 0xC0
  m_cfmprotrom  (rx) : ORIGIN = 0x00008400, LENGTH = 0x10
  m_text   (rx) : ORIGIN = 0x00008800, LENGTH = 32K - 0x800
  m_data     (rwx) : ORIGIN = 0x1FFFF800, LENGTH = 8K   
}

3)应用代码已经下载到MCU的0x8000开始的地址处。

请教下,这种问题我应该怎么去定位,或者这一般是怎引起的的?


我知道答案 目前已有17人回答
回复

使用道具 举报

该用户从未签到

145

主题

4926

帖子

0

金牌会员

Rank: 6Rank: 6

积分
9267
最后登录
1970-1-1
发表于 2015-3-25 14:09:12 | 显示全部楼层
楼主搜下要去看看是什么导致了hardfault。
关于hardfault的定位,请参考这篇文章:
CW10.x编译环境查找HardFault异常原因
回复 支持 反对

使用道具 举报

该用户从未签到

16

主题

90

帖子

0

中级会员

Rank: 3Rank: 3

积分
357
最后登录
2015-12-1
 楼主| 发表于 2015-3-25 15:07:32 | 显示全部楼层
本帖最后由 cjpx84 于 2015-3-25 15:25 编辑

这篇文章我看过了。奇怪的是,我直接将应用程序烧写到MCU上运行是OK的.用bootloader下载运行就会有上面的错误。

按照文章里面的描述,我手工看了下,内存中的内容如下图所示,但是,感觉都没有合适的LP和PC值。
Untitled.png
回复 支持 反对

使用道具 举报

该用户从未签到

145

主题

4926

帖子

0

金牌会员

Rank: 6Rank: 6

积分
9267
最后登录
1970-1-1
发表于 2015-3-25 15:24:47 | 显示全部楼层
cjpx84 发表于 2015-3-25 15:07
这篇文章我看过了。奇怪的是,我直接将应用程序烧写到MCU上运行是OK的.用bootloader下载运行就会有上面的错 ...

应用程序的地址有没有改掉?
不要和bootloader程序重合,应用程序地址改到bootloader程序之后。
回复 支持 反对

使用道具 举报

该用户从未签到

16

主题

90

帖子

0

中级会员

Rank: 3Rank: 3

积分
357
最后登录
2015-12-1
 楼主| 发表于 2015-3-25 15:26:32 | 显示全部楼层
FSL_TICS_ZJJ 发表于 2015-3-25 15:24
应用程序的地址有没有改掉?
不要和bootloader程序重合,应用程序地址改到bootloader程序之后。 ...

已经改了,应用程序地址改成0x8000之后的地址,bootlaoder的地址从0x0开始。
回复 支持 反对

使用道具 举报

该用户从未签到

145

主题

4926

帖子

0

金牌会员

Rank: 6Rank: 6

积分
9267
最后登录
1970-1-1
发表于 2015-3-25 15:35:57 | 显示全部楼层
cjpx84 发表于 2015-3-25 15:26
已经改了,应用程序地址改成0x8000之后的地址,bootlaoder的地址从0x0开始。

debug看看,是什么地方近hardfault了。
如果应用程序的hex看,的确是从0X8000开始了,那么就需要检查你的bootloader程序
是不是成功烧录了,另外,烧写好后,是不是成功把地址偏移到应用程序的位置了。
回复 支持 反对

使用道具 举报

该用户从未签到

16

主题

90

帖子

0

中级会员

Rank: 3Rank: 3

积分
357
最后登录
2015-12-1
 楼主| 发表于 2015-3-25 15:42:06 | 显示全部楼层
FSL_TICS_ZJJ 发表于 2015-3-25 15:35
debug看看,是什么地方近hardfault了。
如果应用程序的hex看,的确是从0X8000开始了,那么就需要检查你的 ...

烧写好之后,确实能够偏移到应用程序。我debug调试了下,一步一步跟到应用程序的main函数,并且最终到RTC的初始化,刚刚从栈空间里看到两个地址,一个是main函数,另外一个就是rtc的初始化。在rtc初始化的时候,有一个循环等待晶振稳定的过程,在这个过程中进入了hardfault。我把这段代码注释掉之后,hardfault的地方会转移到其他位置。
回复 支持 反对

使用道具 举报

该用户从未签到

145

主题

4926

帖子

0

金牌会员

Rank: 6Rank: 6

积分
9267
最后登录
1970-1-1
发表于 2015-3-25 16:42:27 | 显示全部楼层
cjpx84 发表于 2015-3-25 15:42
烧写好之后,确实能够偏移到应用程序。我debug调试了下,一步一步跟到应用程序的main函数,并且最终到RTC ...

RTC等待晶振稳定?
还是芯片等待外部晶振稳定呢?
你做一个使用内部时钟,翻转IO的简单程序烧进去看看能不能工作呢?
回复 支持 反对

使用道具 举报

该用户从未签到

3

主题

25

帖子

0

注册会员

Rank: 2

积分
132
最后登录
1970-1-1
发表于 2015-3-25 17:16:53 | 显示全部楼层
是不是 有中断没有关啊,
回复 支持 反对

使用道具 举报

该用户从未签到

16

主题

90

帖子

0

中级会员

Rank: 3Rank: 3

积分
357
最后登录
2015-12-1
 楼主| 发表于 2015-3-25 17:18:57 | 显示全部楼层
本帖最后由 cjpx84 于 2015-3-25 17:22 编辑
FSL_TICS_ZJJ 发表于 2015-3-25 16:42
RTC等待晶振稳定?
还是芯片等待外部晶振稳定呢?
你做一个使用内部时钟,翻转IO的简单程序烧进去看看能 ...


芯片等待外部的晶振稳定。我用CW自动生成了一个测试程序。用CW单步执行可以从bootloader跳转到该测试程序,并且也能进入main函数的死循环中,并没有产生异常。但是,直接运行,就会报异常。

用CW单步运行与直接运行有什么区别吗?
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /3 下一条

Archiver|手机版|小黑屋|恩智浦技术社区

GMT+8, 2025-7-22 21:19 , Processed in 0.111651 second(s), 31 queries , MemCache On.

Powered by Discuz! X3.4

Copyright © 2001-2024, Tencent Cloud.

快速回复 返回顶部 返回列表