一位客户正在使用 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、这两个问题都会消失。 编译器会导致上述行为发生什么? 是否有选择优化级别的引导线?
此致、
沭阳