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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

C語言函數(shù)編譯時一直報重復?WARNING L15: MULTIPLE CALL TO SEGMENT

[復制鏈接]
跳轉到指定樓層
樓主
ID:232366 發(fā)表于 2021-9-5 12:21 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
上代碼:void Timer1Init(void)                //20毫秒@12.000MHz
{
        TMOD &= 0x0F;        //設置定時器模式
        TMOD |= 0x10;        //設置定時器模式
        TL1 = 0xE0;                //設置定時初值
        TH1 = 0xB1;                //設置定時初值
        TF1 = 0;                //清除TF1標志
        TR1 = 1;                //定時器1開始計時
        ET1=1;                        //允許定時器申請中斷
        EA=1;                        //打開總中斷
}





bit Teset()
{
        bit ack;
        
        ack=0;
        
        return ack;
}

bit Teset2()
{
        bit ack;
        
        ack=Teset();
        if(ack==0)
        {
               
        }
        return ack;
}


void Drive()
{
        static xdata uint16 Count=0;
        
        bit ack;
        
        Count++;
        if(Count>=100)
        {
                Count=0;
                ack=Teset();
                if(ack==1)
                {
                        
                }
                Teset2();
        }
}


void main(void)
{        
        Timer1Init();                                        //20毫秒@12.000MHz        
        delay(100);
        Teset2();
        while(1)
        {
                 //Drive();//在這里調用又沒事??????這是什么邏輯????
        }
}


void Timer1(void) interrupt 3//20毫秒@12.000MHz
{
        TR1=0;
        Drive();//在這里中斷這里調用就報錯????
        TL1 = 0xE0;                //設置定時初值
        TH1 = 0xB1;                //設置定時初值
        TR1=1;
}




編譯器報錯為    *** WARNING L15: MULTIPLE CALL TO SEGMENT


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

使用道具 舉報

沙發(fā)
ID:161164 發(fā)表于 2021-9-5 14:45 | 只看該作者
因為你的兩個函數(shù)中會同時呼叫Teset()                               (PS: 不是Test嗎?從上一個貼子已出現(xiàn)這個錯字了,還沒改過來?)
有機會在運行Teset2()中的Teset()時剛好進入中斷
于是又呼叫Teset()

如果放進while(1)里就不會有這種情況

當然,這只是有機會發(fā)生,
所以他只是一個警告(Waring)而不是錯誤(Error)
不影響編譯,不理會也可以運行
但編程時最好不要有太多嵌套

回復

使用道具 舉報

板凳
ID:232366 發(fā)表于 2021-9-5 14:50 | 只看該作者
lkc8210 發(fā)表于 2021-9-5 14:45
因為你的兩個函數(shù)中會同時呼叫Teset()                               (PS: 不是Test嗎?從上一個貼子已出 ...

真的是太感謝您了!!!!!我前面一直在想是不是我程序框架搭錯了想了很久   沒想到給您一語道破!!!!太感謝了
回復

使用道具 舉報

地板
ID:232366 發(fā)表于 2021-9-5 14:53 | 只看該作者
lkc8210 發(fā)表于 2021-9-5 14:45
因為你的兩個函數(shù)中會同時呼叫Teset()                               (PS: 不是Test嗎?從上一個貼子已出 ...

不好意思敲錯錯了我一直沒發(fā)現(xiàn)呢!!!!尷尬
回復

使用道具 舉報

5#
ID:232366 發(fā)表于 2021-9-5 15:03 | 只看該作者
lkc8210 發(fā)表于 2021-9-5 14:45
因為你的兩個函數(shù)中會同時呼叫Teset()                               (PS: 不是Test嗎?從上一個貼子已出 ...

還是要感謝您耐心指出我的問題并作出修改
回復

使用道具 舉報

6#
ID:624769 發(fā)表于 2021-9-5 16:54 | 只看該作者
中斷要調用的子函數(shù),必須單獨寫,不然別的程序調用中,中斷時又調用,會有 重入錯誤。
你要是實在要用一樣的子函數(shù),就原封不動照抄一編,重新命名一個名字給中斷單獨用。
建議養(yǎng)成習慣,中斷不調用任何子函數(shù)。要么直接寫中斷里,要么精簡中斷,中斷只作標志,讓主程序周期執(zhí)行。
回復

使用道具 舉報

7#
ID:960726 發(fā)表于 2021-9-5 23:11 | 只看該作者
主程序和中斷服務程序通常不允許同時調用同一個函數(shù),除非函數(shù)為可重入函數(shù)。你的程序思路沒有錯,但是編譯系統(tǒng)邏輯上會混亂,想象一下,主程序正在執(zhí)行函數(shù)A,突然中斷了,再次調用這個函數(shù),當中斷返回時無法回到斷點了。建議你單獨寫主程序中的Teset2(),因為初始化只需要執(zhí)行一次。
回復

使用道具 舉報

8#
ID:883242 發(fā)表于 2021-9-5 23:30 | 只看該作者
樓主的寫法在正規(guī)的c語言編譯器里面是正確無誤的,不管是主循環(huán)還是中斷調用Teset()都是在堆棧上臨時生成局部變量空間,退出后堆棧上面的局部變量失效,可以參閱用c語言寫的《數(shù)據(jù)結構》關于遞歸那一章。

但是在大多數(shù)8位單片機上面使用標準c語言做法,因為8位單片機設計之初就沒想過用什么高級語言,相關指令都沒有,所以代碼會變得很長,運行時間也會變長,時間和空間都要付出相當大的代價。所以Keil C51之類的編譯器就違反了標準c語言的做法,在RAM內部靜態(tài)分配變量,比如Teset()局部變量地址0x20(隨手舉個栗子),主函數(shù)調用Teset(),發(fā)生中斷,中斷調用Teset(),0x20局部變量的值就被修改了,中斷返回后繼續(xù)執(zhí)行主函數(shù)調用的Teset(),就會因為局部變量被修改而發(fā)生異常。
回復

使用道具 舉報

9#
ID:232366 發(fā)表于 2021-9-6 07:23 來自觸屏版 | 只看該作者
Hephaestus 發(fā)表于 2021-9-5 23:30
樓主的寫法在正規(guī)的c語言編譯器里面是正確無誤的,不管是主循環(huán)還是中斷調用Teset()都是在堆棧上臨時生成局 ...

原來如此!感謝您回復個耐心回答。
回復

使用道具 舉報

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

本版積分規(guī)則

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

Powered by 單片機教程網(wǎng)

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲毛片在线观看 | 精品香蕉一区二区三区 | 亚洲最新在线视频 | 日韩久久久久久久久久久 | 国产精品国产精品国产专区不卡 | 密色视频 | 成人欧美一区二区三区1314 | 国产精品1区 | 日本精品一区二区三区视频 | 亚洲二区视频 | 国产精品欧美精品日韩精品 | 久久九九网站 | 欧美日韩在线免费 | 亚洲一区二区电影在线观看 | 成人免费视频 | 色婷婷av99xx | 在线看91| 在线精品一区二区三区 | 婷婷激情综合 | 免费在线性爱视频 | av日韩高清 | 精品亚洲一区二区三区 | 日韩毛片 | www.youjizz.com日韩 | 久久夜视频 | 天天爽夜夜爽精品视频婷婷 | 国产精品久久久久久久久久免费看 | 91最新视频 | 玖玖视频网 | 一区二区三区中文字幕 | 精品久久久久一区二区国产 | 羞羞视频在线观看 | 亚洲高清一区二区三区 | 欧美成人a∨高清免费观看 欧美日韩中 | 色噜噜亚洲男人的天堂 | 亚洲激情综合 | 天天操天天射天天 | 国产成人自拍一区 | 国产伦精品一区二区三区精品视频 | 日韩一区二区黄色片 | 黄a在线观看 |