新聞中心

        EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > Keil “RECURSIVE CALL TO SEGMENT“徹底解決

        Keil “RECURSIVE CALL TO SEGMENT“徹底解決

        作者: 時間:2016-11-24 來源:網(wǎng)絡(luò) 收藏
        我們在做菜單程序或通過函數(shù)指針調(diào)用函數(shù)時,如果被調(diào)用的函數(shù)中有包含了常量字符串,那么經(jīng)常會出現(xiàn)這樣的的錯誤提示:"RECURSIVECALLTOSEGMENT"意思是"遞歸調(diào)用段",如何解決呢,之前我沒有找到很好的方法,這段時間我回過頭來看keil的datasheet,找到了解決方法,當(dāng)然keil手冊提供的解決方法是編寫一個.lin文件,我覺得麻煩,現(xiàn)提供我的解決方法,實例還是用keil提供的那個實例:
        #pragma code symbols debug oe void func1(unsigned char *msg ) { ; } void func2( void ) { unsigned char uc; func1("xxxxxxxxxxxxxxx"); } code void (*func_array[])() = { func2 }; void main( void ) { (*func_array[0])(); } 這樣會提示:
        *** WARNING 13: RECURSIVE CALL TO SEGMENT SEGMENT: ?CO?EXAMPLE1 CALLER: ?PR?FUNC2?EXAMPLE1 我的解決方法是:
        把code void (*func_array[])() = { func2 };放在另外一個段,
        即另外一個.c文件中也就不存在同一個段遞歸調(diào)用情況,如下:
        keilrecur.c文件
        #i nclude 
        void func2( void );
        extern code void (*func_array[])();
        void func1(unsigned char *msg ) { msg=msg; }
        void func2( void ) { unsigned char uc; uc=uc; func1("xxxxxxxxxxxxxxx");}
         
        void main( void ) { (*func_array[0])();}
         
        funcptr.c文件
        #i nclude 
        void func2( void );code void (*func_array[])() = { func2 };
        這樣就可以解決段遞歸問題.
        我們在做LCD菜單時,喜歡做一個KeyTab,這樣也會出現(xiàn)"遞歸調(diào)用段"情況,
        那么我們可以把KeyTab單獨作為.c文件,方便管理又可以避免這種錯誤提示.


        關(guān)鍵詞: KeilRECURSIVECALLTOSEGMEN

        評論


        技術(shù)專區(qū)

        關(guān)閉
        主站蜘蛛池模板: 平塘县| 海伦市| 宿州市| 麻阳| 若羌县| 宾川县| 呼和浩特市| 马山县| 嘉定区| 纳雍县| 抚顺县| 勃利县| 南漳县| 武汉市| 林甸县| 长岛县| 临安市| 化德县| 山西省| 精河县| 拉孜县| 长岛县| 六安市| 互助| 黔西县| 太仓市| 加查县| 泗阳县| 志丹县| 哈尔滨市| 谢通门县| 都昌县| 兴仁县| 永康市| 会同县| 镇安县| 大石桥市| 太康县| 小金县| 浮山县| 闵行区|