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.

[参考译文] LAUNCHXL-F28P55X:如何在 F28P55X 中获取指令返回指针

Guru**** 2418200 points
Other Parts Discussed in Thread: SYSBIOS

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1538037/launchxl-f28p55x-how-to-get-instruction-return-pointer-in-f28p55x

器件型号:LAUNCHXL-F28P55X
主题中讨论的其他器件:SYSBIOS

工具/软件:

您好!

我们有一个 f280049c 工程、我们将移植到 F28P55X。

在这个工程中、我们处理了 FPU 上溢和下溢、我们收集的一个调试信息是指令返回指针、用于大致了解从闪存运行时中断的来源。

为此、我们使用了以下调用:

isrHandle = Hwi_getHandle(id);
uint32_t addr = Hwi_getIrp(isrHandle);

 F28P55X 中是否有等效功能?

我似乎找不到它们。

谢谢您、

Nuno

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

    尊敬的 Nuno:

    我将把这篇文章重新路由到 SYSBIOS 专家。

    此致、

    Ozino

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

    是否在不使用 RTOS 的情况下使用 F28P55x? 如果没有 RTOS、我认为您需要从堆栈获取返回位置。 如果我在 ISR 的一开始就放置一个断点、并在“Registers"视“视图中查找 SP、则可以看到 SP - 3 处的返回地址。

    您可以在软件中使用一些内联汇编代码来读取 SP 并在堆栈上找到返回地址、但会更加棘手、因为您还需要考虑编译器生成的压入堆栈、从而更改 SP 的相对地址。

    Whitney

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

    我们使用的是 FreeRTOS 和 syscfg、这是否会改变?

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

    您好、

    FreeRTOS 不处理任何中断操作、因此 Whitney 描述的过程在这种情况下仍然适用。

    此致、

    Arnav

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

    您能举个例子来说明如何操作吗? 因为我们不希望它仅用于连接的调试探针。

    谢谢你

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

    一种方法是将 ISR 更改为 1) 删除__interrupt 属性、以及 2) 添加一个“Naked"属性“属性、这将阻止编译器插入 除函数中实际 C 之外的任何其他指令。 这样、您可以获取返回位置、作为函数中的第一个操作。 您必须进一步添加汇编指令才能执行启动和退出 步骤(对齐 SP,保存寄存器,返回等)。 对现有代码的反汇编可用作添加这些汇编指令的参考。

    Arnav

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

    感谢您的回答

    因此要清楚说明、不再像使用以下函数那样进行函数调用:

    isrHandle = Hwi_getHandle(id);
    uint32_t addr = Hwi_getIrp(isrHandle);

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

    没错、没有直接的 API 来获取 IRP。

    Arnav