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.

[参考译文] CC2674R10:有关 FreeRTOS 和编译器优化的问题

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

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/1248959/cc2674r10-questions-about-freertos-and-compiler-optimization

器件型号:CC2674R10

一位客户正在使用 CC2674开发 BLE 应用、其应用基于 FreeRTOS。 他们对调用栈和 局部变量的行为有一些疑问:

1.调用 Hwi_disable()后调用栈会发生变化。 例如,它们有一个调用栈 key_vTaskBody -> OSAL_eEventWait -> event_pending -> OSAL_OSEventSystemPend -> mq_timedreceive -> Mailbox_pend,当 Mailbox_pend ()中的单步执行时,它们发现调用栈在调用 Hwi_disable 后发生了更改,event_pender()的调用方成为 OSAL_eSend ()。

2. ptEventRef->ptEvent 的指针地址在 OSAL_eEventGetId()外部和内部更改。 在单步执行 OSAL_eEventGetId ()之前,这个点是0x2000791A,而在单步执行 OSAL_eEventGetId ()之后,它变成了0x10000200。

另一个值得提及的背景因素是、如果将优化级别从 z 更改为1、这两个问题都会消失。 编译器会导致上述行为发生什么? 是否有选择优化级别的引导线?

此致、

沭阳

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

    您好!

    Unknown 说:
    另一个值得提及的背景术语是、如果将优化级别从 z 更改为1、这两个问题都会消失。 编译器会导致上述行为发生什么? 是否有选择优化级别的参考线?

    优化越高、调试可见性问题就越多。 我假设您在使用 TI ARM clang 编译器。 Z 基本上是2+。 因此、降低至1会有所帮助。

    有关此主题的更多信息、请参阅:

    https://dev.ti.com/tirex/explore/node?node=A__AEm7LJjS34iFPa5fpT7ttQ__ccs_devtools__FUz-xrs__LATEST

    谢谢