新聞中心

        EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 系統(tǒng)調(diào)試信息的顯示方法

        系統(tǒng)調(diào)試信息的顯示方法

        作者: 時間:2012-03-07 來源:網(wǎng)絡(luò) 收藏

        表2 函數(shù)調(diào)用時的參數(shù)在堆棧中的存儲情況(X86環(huán)境)

        表2說明了兩個問題:第一個問題是,每個參數(shù)在堆棧中的存儲長度和參數(shù)的類型有關(guān)。對于指針類型參數(shù),參數(shù)長度和編譯模式有關(guān):大模式下,地址包括段地址和偏移地址,共4字節(jié);而小模式下,地址只有段內(nèi)偏移,占2字節(jié)。第二個問題是,如果知道其中的一個參數(shù)地址和參數(shù)的類型,則可以得到任意參數(shù)的數(shù)值,并不需要知道參數(shù)的名稱。比如在函數(shù)fun()中,可用以下代碼各個參數(shù)的內(nèi)容:

          void fun(char *str,int i,float *a)

          {

          void *p

          p=str;

          printf(str=%s,str); p=(char **)p+1;

          printf(i=%d ((int*)p));p=(int *)p+1;

          printf(i=%d *((float *)p));

          }

        3 PC機上的printf()函數(shù)的設(shè)計實現(xiàn)

        現(xiàn)在,可以編寫自己的printf()函數(shù)了。以下給出TC20編譯環(huán)境下的具體實現(xiàn)代碼,在其他環(huán)境下,可以根據(jù)該原理進(jìn)行移植。也可以按位二進(jìn)制數(shù)。對于其他類型,讀者可以根據(jù)需要增刪。

        在實際應(yīng)用中,可以修改其中的putchar()函數(shù),將字符發(fā)到串口,就可以達(dá)到上述目的了。這里我們編寫的函數(shù)還增加了數(shù)字的二進(jìn)制,這對于很多位域應(yīng)用是很有用處的。

          /*printf()函數(shù)的實現(xiàn)代碼,為和庫函數(shù)區(qū)別,特在各函數(shù)前增加前綴“my”*/

          void myprintf(char *fmt,…)

          {

          void *p;

          char ch;

          p=fmt;p=(char**)p+1;/*指向堆棧中的下一個參數(shù)*/

          while(1){

          while((ch=*fmt++)!='%'{/*讀入格式字符串*/

          if(ch= ='0')return;

          putchar(ch);

          };

          ch=*fmt++;

          switch(ch){ /*格式字符分析*/

          /*因為字符參數(shù)傳遞時也轉(zhuǎn)換成整形參數(shù)傳遞,故同樣處理*/

          case 'c':

          case'd':

          case'x':

          case'0':

          case'b':

          if(ch= ='c')myputchar(*(int *)p));

          if(ch= ='d')myprintn(*((int *)p),10);

          if(ch= ='x')myprintn(*((int *)p),16);

          if(ch= ='o')myprintn(*((int *)p),8);

          if(ch= ='b')myprintn(*((int *)p),2);

          p=(int)p+1; /*指針移動*/

          break;

          case's':

          myputs(*((char **)p));

          p=(char **)p+1; /*指針移動*/

          break;

          default;

          };

          }

          }



        評論


        相關(guān)推薦

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

        關(guān)閉
        主站蜘蛛池模板: 澜沧| 临潭县| 镇江市| 惠安县| 吕梁市| 迭部县| 柘城县| 曲周县| 呼玛县| 榆林市| 手机| 河津市| 丰都县| 扶风县| 西吉县| 桓仁| 介休市| 桐乡市| 汉寿县| 大余县| 成武县| 淳安县| 莱芜市| 兰西县| 平谷区| 蓬安县| 塔河县| 宣化县| 湄潭县| 登封市| 积石山| 河源市| 凤城市| 酒泉市| 竹溪县| 融水| 济南市| 云南省| 三都| 大同县| 江北区|