工具/软件:Code Composer Studio
您好,是否有办法告诉编译器即使未使用读取值,也不从寄存器中删除读取? 例如,我具有从SPI从属设备读取的以下函数:
void esc_read8 (uint16_t地址,void*数据,uint16_t* al_event){
SPI_START
uINT16_t地址数据[2];
uINT16_t虚拟;
address_data[0]=(address & 0x1FE0)<<3;//address 12:5=>前8位
address_data[1]=((address & 0x001F)<< 11)| esc_CMD_READWS;//(address 4:0,command 2:0)=>前八位
//第一步:执行传输相位(推入txfio)
//写入地址/命令
dint;//将此部分设为原子部分
SPI_Transmit (address_data[0]);//将第一个字放入txfio中
SPI_Transmit (address_data[1]);//将第二个字放入txfio中
SPI_Transmit (ESC_WAIT);//发送等待状态字节(第三个字)
SPI_Transmit (ESC_TERM);//请求最后一个字节
EINT;
//第二步:执行接收阶段(从rxfio弹出)
//检查rxfifo是否有收到的单词
而(SpiaRegs.SPIFFRX.bit.RXFFST < 1){}//请在此处等待,直到我们在rxfio中收到至少1个单词
*al_event = SpiaRegs.SPIRXBUF;//读取所有事件数据,从rxfifo收到的第一个单词
//检查rxfifo是否有收到的单词
而(SpiaRegs.SPIFFRX.bit.RXFFST < 1){}//请在此处等待,直到我们在rxfio中收到至少1个单词
*al_event ||(SpiaRegs.SPIRXBUF <<8);//从rxfifo读取第二个收到的单词
//检查rxfifo是否有收到的单词
而(SpiaRegs.SPIFFRX.bit.RXFFST < 1){}//请在此处等待,直到我们在rxfio中收到至少1个单词
虚拟= SpiaRegs.SPIRXBUF;//从rxfifo读取第三个接收到的单词
//检查rxfifo是否有收到的单词
而(SpiaRegs.SPIFFRX.bit.RXFFST < 1){}//请在此处等待,直到我们在rxfio中收到至少1个单词
((uint16_t*)数据)[0]= SpiaRegs.SPIRXBUF;//从rxfifo收到第四个单词
SPI_STOP
}
因为我正在读入变量'Dummy’,并且以后从未在函数中使用过它,所以我得到了以下编译器警告:
#552-D变量“dummy”已设置,但从未使用
我想确保编译器不会优化这种看似不必要的读取,因为从SPIRXBUF读取的值实际上会从SPSPI RXFIFO中弹出一个值,即使该值以后不会在函数中使用。
编译器版本:TI v 16.9。1LTs.
CCS版本:7.2 .0.0.0013万