久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1411|回復: 2
打印 上一主題 下一主題
收起左側

keil編譯*** WARNING L15: MULTIPLE CALL TO SEGMENT程序好像也沒有被重復調用呀

[復制鏈接]
跳轉到指定樓層
樓主
ID:686513 發表于 2022-4-22 21:24 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
keil 5 編譯時出現這個警告,但程序檢查過,好像也沒有被重復調用呀!

Rebuild started: Project: unit-led
Rebuild target 'Target 1'
compiling display.c...
compiling main.c...
compiling delay.c...
compiling EEPROM.c...
compiling adc.c...
linking...
*** WARNING L15: MULTIPLE CALL TO SEGMENT
    SEGMENT: ?PR?_READ_EEPROM_U16?EEPROM
    CALLER1: ?PR?TIMER1_ISR?MAIN
    CALLER2: ?C_C51STARTUP
Program Size: data=97.2 xdata=0 code=5591
creating hex file from "..\output\unit"...
"..\output\unit" - 0 Error(s), 1 Warning(s).
Build Time Elapsed:  00:00:04

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:688692 發表于 2022-4-23 00:40 | 只看該作者
編譯器發現一個子程序被一般流程調用又被中斷調用就會出這個警告了。
編譯器已經說得很清楚了
CALLER1: ?PR?TIMER1_ISR?MAIN
CALLER2: ?C_C51STARTUP

可以加關鍵字聲明子程序可以重入。
但是導致效率不高。
一般那個子程序不是很長的話,復制一個另起名字供兩處不同的地方調用就好。

評分

參與人數 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

板凳
ID:686513 發表于 2022-4-26 20:45 | 只看該作者
cnos 發表于 2022-4-23 00:40
編譯器發現一個子程序被一般流程調用又被中斷調用就會出這個警告了。
編譯器已經說得很清楚了
CALLER1: ? ...

void main()
{
         u16 num;                        //AD2電壓檢測變量
         float  ADCBat,stress;          //壓力計算中間變量
           
    P0M1 = 0x00;   P0M0 = 0x00;   //設置為準雙向口
    P2M1 = 0x00;   P2M0 = 0x00;   //設置為準雙向口
    P3M1 = 0x00;   P3M0 = 0x00;   //設置為準雙向口   
    P5M1 = 0x00;   P5M0 = 0x00;   //設置為準雙向口
          led1=0; md1=0; Beep=0;
         
                 Timer0Init();     //定時器0調用
                Timer1Init();     //定時器1調用
                 STC8ADC_INIT();         //adc.c模塊ADC獲取子程序調用
                 EA=1;             //中斷總開關
                               
        while(1)
           {
                   ADCBat = line_bat_0-line_bat_1;           //AD0-AD1的結果賦給ADCBat無符號整型變量                       
                         if(0<ADCBat<150)                         //當壓力值介于0PSI到150PSI之間時,遵循線性變換公式:y=(115-15)/(243-13)*X+15kpa
                                 {
                                         stress=((10.0/11.4)*ADCBat)-18.5;    //測試時補償值為-18.5                                                                                 
                                         press=stress*10;                     //放大10倍,便于后面計算                                                                                                  
                                 }
         
       num=1.022*line_bat_2*1000/4095;                 //電量計算       
              if (num>776) DAT=3;                //    776  四格
              else if (num>710) DAT=2;           //    710  三格
              else if (num>660) DAT=1;                 //    664  二格
                    else if (num>610) DAT=0;                 //    613  一格
                                                                                                                                                                                                  
                          dis_Service();                      //顯示服務函數
        DaQi();                       //打氣服務函數
           }
}
上面主函數里定時器 Timer1Init();  調用過keynum1值顯示,下面是按鍵函調用過EEPROM的讀和寫,也沒看到重復調用的問題呀?請大神指點一下!
void key_scan()
{
        static unsigned char state=S0,key_time;
        unsigned char key;
  key=P3&0x1f;     //屏蔽P1低四位
  switch(state)   //檢測狀態
    {
          case S0: //狀態0
      if(key!= 0x1f) state = S1; break;      //判斷輸入是否為0,為0轉入狀態1
               
    case S1: //狀態1
           if(key==0x1f) state = S0;            //判斷輸入是否為1,為1返回狀態0
           else                                //否則,轉入狀態2,執行按鍵程序
           {
                             state=S2;
           switch(key)
            {
                                          case 0x1E:
                                            switch(wnd)
                                                        {                                                                                               
                                                        case 0:T1Cnt=epxs_short; keynum1 = Read_EEPROM_u16(0x0200); SSCnt=0; flag=0; keyflag=0; if(keynum1>1049) keynum1=30; if(flag==0 && keyflag==0){if(keynum1<1000) keynum1 = keynum1+5; else keynum1++;} Save_EEPROM_u16(0x0200, keynum1);Setflag=1; break; //psi:0~150,0~100加5,到100退位顯示100~150加1
                                                        case 1:T1Cnt=epxs_short; keynum2 = Read_EEPROM_u16(0x0400); SSCnt=0; flag=0; keyflag=0; if(keynum2>1002) keynum2=20; if(flag==0 && keyflag==0){if(keynum2<1000) keynum2 = keynum2+5; else keynum2++;} Save_EEPROM_u16(0x0400, keynum2);Setflag=1; break; //BAR:0.2-10.3   
                                                        case 2:T1Cnt=epxs_short; keynum3 = Read_EEPROM_u16(0x0600); SSCnt=0; flag=0; keyflag=0; if(keynum3>994)  keynum3=20; if(flag==0 && keyflag==0){                 keynum3 = keynum3+5;                } Save_EEPROM_u16(0x0600, keynum3);Setflag=1; break; //kpa:20-995      
                                                        case 3:T1Cnt=epxs_short; keynum4 = Read_EEPROM_u16(0x0800); SSCnt=0; flag=0; keyflag=0; if(keynum4>1002) keynum4=20; if(flag==0 && keyflag==0){if(keynum4<1000) keynum4 = keynum4+5; else keynum4++;} Save_EEPROM_u16(0x0800, keynum4);Setflag=1; break; //kg/cm:0.2-10.5                                                                 
                                                        }                                               
                                                        FMQCnt = FMQ_short;        //按鍵聲音觸發,滴一聲就停。                                       
                                                        break;



void timer1_ISR(void) interrupt 3          //定時器中斷1,中斷號:3
{       
  TR1=0;                                   //定時器1計時關閉

//定時設定值3S顯示
  if(T1Cnt != 0)                           //如果T1Cnt不等于0
    {       
      T1Cnt--;                             //每次進入定時中斷都自減1,直到等于零為止。
                        keyflag=1;                           //3S到keyflag=1:讀EEPROM值,顯示3S按鍵調整值       
                        switch(wnd)                           //不同窗口顯示按鍵值
                                {                       
                                case 0: parm1 = keynum1;  break;   
                                case 1: parm2 = keynum2;  break;
                                case 2: parm3 = keynum3;  break;
                                case 3: parm4 = keynum4;  break;
                                default:break;
                                }                                       
    }
  else                                      
          {
                        keyflag=0;                           //3S到keyflag=0:退出顯示壓力值
                        switch(wnd)                             //不同窗口顯示壓力值

回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲一二三在线观看 | 欧美中文一区 | 国产精品夜色一区二区三区 | 国产精品视频网 | 羞羞网站免费观看 | 欧美日韩精品免费观看 | 国内精品在线视频 | 福利一区二区在线 | 国产高清在线精品一区二区三区 | 一级毛片观看 | 高清黄色毛片 | 亚洲日本视频 | av一区在线观看 | 99精品一级欧美片免费播放 | www.国产| 欧美日韩a | 中文字幕 欧美 日韩 | 欧美黄色性生活视频 | 男人天堂手机在线视频 | 国产精品国产精品 | 操到爽 | 日韩一区二区三区在线 | 国产精品一二三区在线观看 | 久久久亚洲一区 | 羞羞视频网站免费看 | 亚洲国产精品区 | 免费性视频 | 欧美视频 亚洲视频 | 免费黄色的视频 | 夜久久 | 亚洲免费在线观看视频 | 91麻豆精品国产91久久久久久 | 国产在线精品一区二区 | 中文字幕观看 | 在线中文字幕第一页 | 最大av在线| 久久精品—区二区三区 | 中文字幕一区二区不卡 | 综合第一页 | 男女视频91| 久久精品美女 |