xf331785508 发表于 2019-12-12 16:24:26

strstr入参指针同时读写引起hardfault的坑

今天作测试,发现个偶然的hardfault. 经过调试发现是strstr函数的入参指针应用不当引起的。

if(!lyBleConnectState)
      {
            uint8_t *ap = gpbIF_UARTRxdBufferGet();
            if( strstr((char*)ap, "SampleStart") )
            {
                lyBleConnectState = TRUE;
                DEBUG_PRINT("BLE connected, sample start.\r\n");
                lbStep = 10u;
            }
      }
如上为典型应用,正常任务中在进行条件判断,条件判断中调用了strstr, 此时函数还未返回,若串口中断又对ap指针指向的RAM进行了写操作,就会引起hardfault.
特此记录。

at90s 发表于 2019-12-12 16:51:33

你这么用法,无论调用什么函数,只要碰那个RAM,都是坑

xf331785508 发表于 2019-12-12 19:26:54

at90s 发表于 2019-12-12 16:51
你这么用法,无论调用什么函数,只要碰那个RAM,都是坑

想省一块临时BUFFER,结果还是省不了。

日日♂夜夜 发表于 2019-12-16 10:05:29

想省就锁中断呗..
本来也没啥好省的
页: [1]
查看完整版本: strstr入参指针同时读写引起hardfault的坑