<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          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)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();