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.

[参考译文] TMS320F28P559SJ-Q1:执行 AppEntry 函数时跳转到非法中断

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1516734/tms320f28p559sj-q1-jump-into-illegal-interrupt-when-executing-appentry-fucntion

器件型号:TMS320F28P559SJ-Q1

工具/软件:

您好专家

客户使用以下2种方法从客户引导代码跳转到应用代码: 使用第一种方法时、CPU 将跳转到非法中断、而使用第二种方法时、MCU 运行良好

1.使用 AppEntry 函数:

JumpAddress =*(volatile uint32_t *)(0x0A0000);
JumpAddress_1 =(JumpAddress & 0x0000000F)<< 16;
JumpAddress_2 = JumpAddress >>16;
JumpAddress_3 = JumpAddress_1 | JumpAddress_2;

AppEntry APP_ENTRY =(AppEntry)((volatile uint32_t *) JumpAddress);

Dint

IER = 0;

IFR = 0;

asm ("MOV SP、#0x00B000");

app_entry();

for (;;);

2.使用汇编代码:

asm (" MOVL XAR7、#0x0A0000");

asm (" LB *XAR7");

我的问题是这两种 方法有什么区别?

谢谢

Joe

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

    您好 Joe、

    请留出更多时间让我们将您的问题提交给正确的专家。 感谢您的耐心!

    此致、

    Allison

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

    您好 Joe、

    几个问题:

    Unknown 说:
    AppEntry app_entry =(AppEntry)((volatile uint32_t *) JumpAddress);

    什么是 AppEntry 函数? 它有什么作用?

    Unknown 说:
    asm ("MOV SP、#0x00B000");

    为什么要将 SP 硬编码为0xB000? 这个地址是什么?

    此致、

    马特

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

    您好、Matt

    AppEntry 定义如下:

    typedef void (* AppEntry)(void);

    asm ("MOV SP、#0x00B000");是写入堆栈地址。

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

    您好 Joe、

    您能否共享应用程序和引导加载程序的链接器命令文件?

    此致、

    马特

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

    您好、Matt

    对于引导加载程序、我只能与您共享十六进制文件或.out 文件、客户无法共享源文件。

    谢谢

    Joe

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

    您好、

    是的、这是可行的。 我会尝试在我这边复制。

    如果客户移除 ASM ("MOV SP、#0x00B000")调用、问题是否仍然存在?

    此致、

    马特

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

    您好、Matt

    客户跳过此问题、因为他们可以使用第二种方法实现功能、感谢您的支持。

    谢谢

    Joe