VS單步調試F11想進入一個函數但是跳進另一個函數


下面是我寫的兩個函數,內容除了名稱其他全部一致,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;
    if((NULL != pDataAddr)&&(NULL != pSwitchCfgDtStr))
    {
        pData = pDataAddr;
        /*道岔 ID*/
        pSwitchCfgDtStr->wID = OcShortFromChar(&pData[offset]);
        offset += 2;
        /*所屬 OC ID */
        pSwitchCfgDtStr->InOC_ID = OcShortFromChar(&pData[offset]);
        offset += 2;
        /*A系道岔模塊 ID */
        pSwitchCfgDtStr->ModelID_A = pData[offset++];
 
        /*A系轉轍機位置*/
        pSwitchCfgDtStr->DriveAddr_A =  pData[offset++];
        /*B系道岔模塊 ID */
        pSwitchCfgDtStr->ModelID_B = pData[offset++];
        /*B系轉轍機位置 */
        pSwitchCfgDtStr->DriveAddr_B =  pData[offset];
    }
    else
    {
        /* 無操作 */
    }
}
 
 
static void PHYSECTION_STRU_INIT(UINT8 pDataAddr[], OC_PhySectionStru *pPhySectionCfgDtStr)
{
    UINT8 *pData = NULL;
 UINT8 offset = 0;
    if((NULL != pDataAddr)&&(NULL != pPhySectionCfgDtStr))
    {
        pData = pDataAddr;
        /*物理區段 ID*/
        pPhySectionCfgDtStr->wID = OcShortFromChar(&pData[offset]);
        offset += 2;
        /*所屬OC ID*/
        pPhySectionCfgDtStr->InOC_ID = OcShortFromChar(&pData[offset]);
        offset += 2;
        /*A系物理區段模塊 ID*/
        pPhySectionCfgDtStr->ModelID_A = pData[offset++];
        /*A系物理區段位置*/
        pPhySectionCfgDtStr->DriveAddr_A = pData[offset++];
        /*B系物理區段模塊 ID*/
        pPhySectionCfgDtStr->ModelID_B = pData[offset++];
        /*B系物理區段位置*/
        pPhySectionCfgDtStr->DriveAddr_B = pData[offset];
    }
    else
    {
        /* 無操作 */
    }
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM