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**** 754880 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、这两个问题都会消失。 编译器会导致上述行为发生什么? 是否有选择优化级别的引导线?

此致、

沭阳