我使用的是Silicon Labs BGM111-A模块,带有入门套件,对于我的项目,我需要使用UART。 在我的应用程序开始时,我启动UART并使用驱动程序函数启动接收:
.
.
.
static UARTDRV_HandleData_t handleDataUart;
.
.
.
void IPP_Init(te_INIT_STATEs init_state)
{
Ecode_t res;
UARTDRV_InitUart_t initData;
.
.
.
// Initialize driver handle
res=UARTDRV_InitUart(&handleDataUart,&initData);
//Start receive 1 byte at time.
res=UARTDRV_Receive(&handleDataUart,&pktBufRx[iPktBufRx],1,IPP_ReceivedData);
.
.
.
}
如果我在Simplicity Studio中设置编译器优化"无(-O0)"一切正常,但如果我在"优化更多(-O2)" " UARTDRV_InitUart"检查是否"处理"参数(handleDataUart指针)为NULL:
Ecode_t UARTDRV_InitUart(UARTDRV_Handle_t handle,
const UARTDRV_InitUart_t *initData)
{
Ecode_t retVal;
CORE_DECLARE_IRQ_STATE;
USART_InitAsync_TypeDef usartInit = USART_INITASYNC_DEFAULT;
if (handle == NULL) {
return ECODE_EMDRV_UARTDRV_ILLEGAL_HANDLE;
.
.
.
我注意到(通过#34; handle"参数的地址)当优化是" -O2" "句柄"的地址是" $ R6" (CPU寄存器),否则优化" -O0"地址是RAM位置。这可能是问题吗?
这是一个编译器错误,还是我必须编辑我的代码?