音影先锋亚洲天堂网|电影世界尽头的爱完整版播放|国产 熟女 91|高清无码免费观看欧美日韩|韩国一区二区三区黄色录像|美女亚洲加勒比在线|亚洲综合网 开心五月|7x成人在线入口|成人网站免费日韩毛片区|国产黄片?一级?二级?三级

登錄 免費(fèi)注冊(cè) 首頁(yè) | 行業(yè)黑名單 | 幫助
維庫(kù)電子市場(chǎng)網(wǎng)
技術(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
你的中斷中調(diào)用了不可重入的函數(shù)。
 
3樓: >>參與討論
ihafd
謝謝
 不可重入的函數(shù)?
是指什么函數(shù)?
  應(yīng)該怎樣改正?

  謝謝.

4樓: >>參與討論
zoupeng139
我也碰到 這個(gè)問(wèn)題了
怎么解決 ?

5樓: >>參與討論
computer00
兩種解決辦法:
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
明白.
謝謝.

參與討論
昵稱:
討論內(nèi)容:
 
 
相關(guān)帖子
急!FM24C16地址在0xFF以后的空間讀寫不正確
最近想把設(shè)計(jì)電路的電阻值統(tǒng)一一下,找了找電阻的標(biāo)稱值
個(gè)人制版:如何降低制版的成本??
現(xiàn)在哪種單片機(jī)從掉電中喚醒最快,并有內(nèi)部EEPROM數(shù)據(jù)存儲(chǔ)器
求助:怎樣驅(qū)動(dòng)一電機(jī)
免費(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)