This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] RM48L952:异常处理

Guru**** 2798555 points
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/809348/rm48l952-exception-handling

器件型号:RM48L952

我有两个问题:

问题1:

如果我有从地址0x0开始的引导加载程序和与地址0x40000有一定偏移的应用程序(例如0x40000)、那么我的应用程序处理诸如 dabort 的异常的最佳方法是什么? 现在、我从0x10分支到应用程序的 dabort 处理程序。 缺点是引导加载程序现在无法处理 dabort 故障。 是否有更好的方法?

问题2:

在返回到应用程序之前、我想在引导中对应用程序异常进行一些预处理。 例如:

应用程序(从0x40000开始)获得 dabort 并进入0x10 (引导加载程序从0x0 - 0x40000开始)

2. 0x10处的指令分支到引导加载程序空间 BootExcelpHdl()中的子例程,地址为0x1000

3 .在 bootloader 中 BootExcelpHdl()结束时,我想分支到应用程序地址0x400100并从该地址继续执行。

现在、在#2处、我在尝试从引导加载程序地址0x1000执行时立即获取另一个 dabort。

如何解决这个问题?

谢谢。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    请检查这是否有帮助:

    此致、

    米罗

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    链接中的方案不起作用、因为它假定应用具有分支到的固定起始地址。 我的应用程序可以在引导时确定不同的起始地址、这就是我需要对中断进行一些预处理以确定应用程序矢量所在的位置的原因。 还有事要尝试吗?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Guy、

    选项#2是一个很好的方法。

    偏移量应用于 sys_intvecs.asm 中的分支。 中止(0x10)的偏移 量为:0x1000 - 0x10 - 0x8

    引导加载程序的 sys_intvecs.asm 示例:

    b _c_int00;0x00

    b #0xFF4;0x1000-0x04-0x08

    b #0xFF0;0x1000-0x08-0x08

    b #0xFEC;0x1000-0xC-0x8

    b #0xFE8;0x1000-0x10-0x08

    保留尝试

    b 保留尝试

    LDR PC、[PC、#-0x1b0]

    LDR PC、[PC、#-0x1b0]

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    谢谢。 这就是我的工作方式。 关于 OFFSET-0x8、我已经读过很多帐户、分支目标必须是目标地址- 0x8 (我知道为什么- 0x8)。 但是、这对我来说从未奏效。 我始终必须分支到实际的偏移地址、而不减去0x8。 是否依赖于此编译器? 为什么直线偏移对我有效、而不是对-8有效?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    大家好、

    PC 相对地址在链接时计算。 我认为地址偏移量与编译器无关。

    地址偏移量(PC =当前执行指令+两条指令的长度(0x8字节))由 ARM Cortex-R 架构决定。