Silicon Labs:编译器优化错误?

时间:2018-01-11 08:12:37

标签: c optimization microcontroller 32-bit

我使用的是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位置。这可能是问题吗?

这是一个编译器错误,还是我必须编辑我的代码?

0 个答案:

没有答案