工具/软件:TI C/C++编译器
您好,
我在Code Composer Studio中激活了MISRA-C:2004检查,并为17.6 以下代码获取了MISRAC警告:
typedef结构
{
uINT8_t srcAddr;
uINT8_t目标地址;
UINT8_t帧类型;
UINT8_t cmdId;
UINT8_t数据长度;
uINT8_t dataBytes[8];
} node_info_s;
void CAN_SEND (node_info_s nodeInfo)
{
UINT8_t canSendBuf[13];
load_txbuf_params_s loadCanMsg;
uINT8_t dataCount =(uint8_t)0;
canSendBuf[0]= nodeInfo.srcAddr;//MISRA 17.6 警告
canSendBuf[1]= nodeInfo.destAddr; //MISRA 17.6 警告
canSendBuf[2]= nodeInfo.frameType; //MISRA 17.6 warning
canSendBuf[3]= nodeInfo.cmdId; //MISRA 17.6 警告
canSendBuf[4]= nodeInfo.dataLength; //MISRA 17.6 warning
对于(dataCount =(uint8_t) 0;dataCount < nodeInfo.dataLength;dataCount++)
{
canSendBuf[(uint8_t)4 + dataCount]= nodeInfo.dataBytes[dataCount];
}
loadCanMsg.param_load_txbuf = load_TXB0SIDH;
loadCanMsg.param_reg_txbuf = REG_TXB0CTRL;
loadCanMsg.param_RTS_txbuf = RTS_TXBUF0;
SPI_MCP_Load_TXBUF (loadCanMsg,nodeInfo.dataLength,canSendBuf);
}
资源位置类型#1423-D (MISRA-C:2004 17.6 /R)具有自动存储的对象的地址不应分配给在第一个对象停止存在后可能持续存在的另一个对象("nodeInfo")
我不理解的是 ,函数范围结束后,canSendBuf等局部变量如何继续存在? 这是否是假阳性?
谢谢,此致,
安杰特