|
|||||||||||
| 技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測(cè)控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng) 驅(qū)動(dòng)編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機(jī) | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計(jì) | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe |
這警告到底是什么意思啊? |
| 作者:ihafd 欄目:單片機(jī) |
以下程序編譯的時(shí)候總是有三個(gè)警告,我調(diào)試了兩天了找不出原因,真是氣暈了. 那們可以告訴我產(chǎn)生警告原因? 無(wú)限感激!! 編譯結(jié)果如下: Build target 'Target 1' compiling 1602.C... linking... *** WARNING L15: MULTIPLE CALL TO SEGMENT SEGMENT: ?PR?_WRITECOMMANDLCM?1602 CALLER1: ?PR?RX?1602 CALLER2: ?C_C51STARTUP *** WARNING L15: MULTIPLE CALL TO SEGMENT SEGMENT: ?PR?_DISPLAYONECHAR?1602 CALLER1: ?PR?RX?1602 CALLER2: ?C_C51STARTUP *** WARNING L15: MULTIPLE CALL TO SEGMENT SEGMENT: ?PR?_WRITEDATALCM?1602 CALLER1: ?PR?RX?1602 CALLER2: ?C_C51STARTUP Program Size: data=65.0 xdata=0 code=937 creating hex file from "HEX_1"... "HEX_1" - 0 Error(s), 3 Warning(s). 以下是源程序: //=============================================================*/ #include <REG51.H> typedef unsigned CHAR uCHAR; typedef unsigned int uint; //#define LCM_RW P0_0 //定義引腳 //#define LCM_RS P0_1 //#define LCM_E P0_2 #define LCM_Data P1 #define Busy 0x80 //用于檢測(cè)LCM狀態(tài)字中的Busy標(biāo)識(shí) sbit LCM_RW=P0^0; sbit LCM_RS=P0^1; sbit LCM_E=P0^2; sbit LCM_CS=P0^3; void WriteDataLCM(unsigned CHAR WDLCM); void WriteCommandLCM(unsigned CHAR WCLCM,BuysC); unsigned CHAR ReadDataLCM(void); unsigned CHAR ReadStatusLCM(void); void LCMInit(void); void DisplayOneChar(unsigned CHAR X, unsigned CHAR Y, unsigned CHAR DData); void DisplayListChar(unsigned CHAR X, unsigned CHAR Y, unsigned CHAR *DData); void Delay5Ms(void); void Delay400Ms(void); void DelayLcm(uCHAR i); unsigned CHAR ZH[]={0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39}; unsigned CHAR code cdle_net[] = {"Welcome to...!"}; unsigned CHAR code email[] = {" remote SYSTEM!"}; unsigned CHAR V[17]={"00.000V 00.000A!"}; unsigned CHAR T[17]={"00.00`C 00.00`C!"}; uCHAR kk; void main(void) { IE=0x90; TMOD=0x20; TL1=0Xfd;TH1=0xfd; SCON=0xd8;PCON=0x00; TR1=1; Delay400Ms(); //啟動(dòng)等待,等LCM講入工作狀態(tài) LCMInit(); //LCM初始化 Delay5Ms(); //延時(shí)片刻(可不要) DisplayListChar(0, 0, cdle_net); DisplayListChar(0, 1, email); Delay400Ms(); Delay400Ms(); DisplayListChar(0,0,V); DisplayListChar(0,1,T); ReadDataLCM();//測(cè)試用句無(wú)意義 while(kk<11) { // while(LCM_CS==1); SBUF=kk; DelayLcm(1); if(kk==10) kk=0; } } /****接收程序***************/ void RX() interrupt 4 { if(TI!=1) { uCHAR TEMP; TEMP=SBUF; SWITCH(kk-1) { case 0: DisplayOneChar(0,0,ZH[TEMP]); break; case 1: DisplayOneChar(1,0,ZH[TEMP]); break; case 2: DisplayOneChar(3,0,ZH[TEMP]); break; case 3: DisplayOneChar(4,0,ZH[TEMP]); break; case 4: DisplayOneChar(5,0,ZH[TEMP]); break; case 5: DisplayOneChar(9,0,ZH[TEMP]); break; case 6: DisplayOneChar(10,0,ZH[TEMP]); break; case 7: DisplayOneChar(12,0,ZH[TEMP]); break; case 8: DisplayOneChar(13,0,ZH[TEMP]); break; case 9: DisplayOneChar(14,0,ZH[TEMP]); break; default: break; } RI=0; kk++; } TI=0; } //寫數(shù)據(jù) void WriteDataLCM(unsigned CHAR WDLCM) { ReadStatusLCM(); //檢測(cè)忙 LCM_Data = WDLCM; LCM_RS = 1; LCM_RW = 0; LCM_E = 0; //若晶振速度太高可以在這后加小的延時(shí) LCM_E = 0; //延時(shí) LCM_E = 1; } //寫指令 void WriteCommandLCM(unsigned CHAR WCLCM,BuysC) //BuysC為0時(shí)忽略忙檢測(cè) { if (BuysC) ReadStatusLCM(); //根據(jù)需要檢測(cè)忙 LCM_Data = WCLCM; LCM_RS = 0; LCM_RW = 0; LCM_E = 0; LCM_E = 0; LCM_E = 1; } //讀數(shù)據(jù) unsigned CHAR ReadDataLCM(void) { LCM_RS = 1; LCM_RW = 1; LCM_E = 0; LCM_E = 0; LCM_E = 1; return(LCM_Data); } //讀狀態(tài) unsigned CHAR ReadStatusLCM(void) { LCM_Data = 0xFF; LCM_RS = 0; LCM_RW = 1; LCM_E = 0; LCM_E = 0; LCM_E = 1; while (LCM_Data & Busy);//檢測(cè)忙信號(hào) return(LCM_Data); } void LCMInit(void) //LCM初始化 { LCM_Data = 0; WriteCommandLCM(0x38,0); //三次顯示模式設(shè)置,不檢測(cè)忙信號(hào) Delay5Ms(); WriteCommandLCM(0x38,0); Delay5Ms(); WriteCommandLCM(0x38,0); Delay5Ms(); WriteCommandLCM(0x38,1); //顯示模式設(shè)置,開(kāi)始要求每次檢測(cè)忙信號(hào) WriteCommandLCM(0x08,1); //關(guān)閉顯示 WriteCommandLCM(0x01,1); //顯示清屏 WriteCommandLCM(0x06,1); // 顯示光標(biāo)移動(dòng)設(shè)置 WriteCommandLCM(0x0C,1); // 顯示開(kāi)及光標(biāo)設(shè)置 } //按指定位置顯示一個(gè)字符 void DisplayOneChar(unsigned CHAR X, unsigned CHAR Y, unsigned CHAR DData) { Y &= 0x1; X &= 0xF; //限制X不能大于15,Y不能大于1 if (Y) X |= 0x40; //當(dāng)要顯示第二行時(shí)地址碼+0x40; X |= 0x80; //算出指令碼 WriteCommandLCM(X, 0); //這里不檢測(cè)忙信號(hào),發(fā)送地址碼 WriteDataLCM(DData); } //按指定位置顯示一串字符 void DisplayListChar(unsigned CHAR X, unsigned CHAR Y, unsigned CHAR *DData) { unsigned CHAR ListLength; ListLength = 0; Y &= 0x1; X &= 0xF; //限制X不能大于15,Y不能大于1 while (DData[ListLength]!=0x21) //若到達(dá)字串尾則退出 { if (X <= 0xF) //X坐標(biāo)應(yīng)小于0xF { DisplayOneChar(X, Y, DData[ListLength]); //顯示單個(gè)字符 ListLength++; X++; } } } //5ms延時(shí) void Delay5Ms(void) { unsigned int TempCyc = 5552; while(TempCyc--); } //400ms延時(shí) void Delay400Ms(void) { unsigned CHAR TempCycA = 2; unsigned int TempCycB; while(TempCycA--) { TempCycB=7269; while(TempCycB--); }; } void DelayLcm(uCHAR i) { uint count; for(count=4000;count>0;count--) for(;i>0;i--); } |
| 2樓: | >>參與討論 |
| 作者: computer00 于 2006/6/16 18:43:00 發(fā)布:
你的中斷中調(diào)用了不可重入的函數(shù)。 |
|
| 3樓: | >>參與討論 |
| 作者: ihafd 于 2006/6/16 18:48:00 發(fā)布:
謝謝 不可重入的函數(shù)? 是指什么函數(shù)? 應(yīng)該怎樣改正? 謝謝. |
|
| 4樓: | >>參與討論 |
| 作者: zoupeng139 于 2006/6/16 19:20:00 發(fā)布:
我也碰到 這個(gè)問(wèn)題了 怎么解決 ? |
|
| 5樓: | >>參與討論 |
| 作者: computer00 于 2006/6/16 19:29:00 發(fā)布:
兩種解決辦法: 1.在中斷中不要調(diào)用函數(shù)。 /****接收程序***************/ void RX() interrupt 4 { if(TI!=1) { uCHAR TEMP; TEMP=SBUF; SWITCH(kk-1) { case 0: DisplayOneChar(0,0,ZH[TEMP]); break; //這里不要調(diào)用函數(shù),而是直接把處理的代碼放到這里。 2.把被調(diào)用的函數(shù)聲明成可重入的,編譯器會(huì)自動(dòng)生成軟堆棧那樣的操作。 //按指定位置顯示一個(gè)字符 void DisplayOneChar(unsigned CHAR X, unsigned CHAR Y, unsigned CHAR DData) reentrant { Y &= 0x1; X &= 0xF; //限制X不能大于15,Y不能大于1 if (Y) X |= 0x40; //當(dāng)要顯示第二行時(shí)地址碼+0x40; X |= 0x80; //算出指令碼 WriteCommandLCM(X, 0); //這里不檢測(cè)忙信號(hào),發(fā)送地址碼 WriteDataLCM(DData); } |
|
| 6樓: | >>參與討論 |
| 作者: ihafd 于 2006/6/16 19:44:00 發(fā)布:
明白. 謝謝. |
|
| 免費(fèi)注冊(cè)為維庫(kù)電子開(kāi)發(fā)網(wǎng)會(huì)員,參與電子工程師社區(qū)討論,點(diǎn)此進(jìn)入 |
Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號(hào) |