下面是我寫的兩個函數,內容除了名稱其他全部一致,VS編譯器生成的二進制文件是相同的,所以自動優化掉
一個函數節省內存。當我調試打算F11進入SWITCH_STRU_INIT時,卻發現跳到PHYSECTION_STRU_INIT。
有效方法是添加些變量讓編譯器不再優化兩個函數。比如在PHYSECTION_STRU_INIT函數中添加int a = 0。
static void SWITCH_STRU_INIT(UINT8 pDataAddr[], OC_SwitchStru *pSwitchCfgDtStr)
{
UINT8 *pData = NULL;
UINT8 offset = 0;
{
UINT8 *pData = NULL;
UINT8 offset = 0;
if((NULL != pDataAddr)&&(NULL != pSwitchCfgDtStr))
{
pData = pDataAddr;
{
pData = pDataAddr;
/*道岔 ID*/
pSwitchCfgDtStr->wID = OcShortFromChar(&pData[offset]);
offset += 2;
pSwitchCfgDtStr->wID = OcShortFromChar(&pData[offset]);
offset += 2;
/*所屬 OC ID */
pSwitchCfgDtStr->InOC_ID = OcShortFromChar(&pData[offset]);
offset += 2;
pSwitchCfgDtStr->InOC_ID = OcShortFromChar(&pData[offset]);
offset += 2;
/*A系道岔模塊 ID */
pSwitchCfgDtStr->ModelID_A = pData[offset++];
/*A系轉轍機位置*/
pSwitchCfgDtStr->DriveAddr_A = pData[offset++];
pSwitchCfgDtStr->ModelID_A = pData[offset++];
/*A系轉轍機位置*/
pSwitchCfgDtStr->DriveAddr_A = pData[offset++];
/*B系道岔模塊 ID */
pSwitchCfgDtStr->ModelID_B = pData[offset++];
pSwitchCfgDtStr->ModelID_B = pData[offset++];
/*B系轉轍機位置 */
pSwitchCfgDtStr->DriveAddr_B = pData[offset];
}
else
{
/* 無操作 */
}
}
pSwitchCfgDtStr->DriveAddr_B = pData[offset];
}
else
{
/* 無操作 */
}
}
static void PHYSECTION_STRU_INIT(UINT8 pDataAddr[], OC_PhySectionStru *pPhySectionCfgDtStr)
{
UINT8 *pData = NULL;
UINT8 offset = 0;
{
UINT8 *pData = NULL;
UINT8 offset = 0;
if((NULL != pDataAddr)&&(NULL != pPhySectionCfgDtStr))
{
pData = pDataAddr;
{
pData = pDataAddr;
/*物理區段 ID*/
pPhySectionCfgDtStr->wID = OcShortFromChar(&pData[offset]);
offset += 2;
pPhySectionCfgDtStr->wID = OcShortFromChar(&pData[offset]);
offset += 2;
/*所屬OC ID*/
pPhySectionCfgDtStr->InOC_ID = OcShortFromChar(&pData[offset]);
offset += 2;
pPhySectionCfgDtStr->InOC_ID = OcShortFromChar(&pData[offset]);
offset += 2;
/*A系物理區段模塊 ID*/
pPhySectionCfgDtStr->ModelID_A = pData[offset++];
pPhySectionCfgDtStr->ModelID_A = pData[offset++];
/*A系物理區段位置*/
pPhySectionCfgDtStr->DriveAddr_A = pData[offset++];
pPhySectionCfgDtStr->DriveAddr_A = pData[offset++];
/*B系物理區段模塊 ID*/
pPhySectionCfgDtStr->ModelID_B = pData[offset++];
pPhySectionCfgDtStr->ModelID_B = pData[offset++];
/*B系物理區段位置*/
pPhySectionCfgDtStr->DriveAddr_B = pData[offset];
pPhySectionCfgDtStr->DriveAddr_B = pData[offset];
}
else
{
/* 無操作 */
}
}
else
{
/* 無操作 */
}
}
