3904|8

21

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

清除沒有使用函數的警告訊息 [复制链接]

先看一下我的程式碼:
timer.c

  1. /*
    本程式依照創用CC規範,也就是說,愛怎麼用就怎麼用,就算拿去賺錢我,只要別讓我知道就好。
    設計者:Ethan
    設計日期:2012/5/5
    程式功能:使用計時器,做出一個週期為兩秒的方波
    */


    #include<AT89X51.h>
    #include "timerAPI.h"
    //#include <math.h>
    #include "TimerLIB.c"

    void main(){
    unsigned char i=0;
    // int count;
    P1 =0xff;
    /*
    TMOD該填入的值
    +-----------+------+------+
    | Mode/Timer| 0 | 1 |
    +-----------+------+------+
    | 0 | 0x00 | 0x01 |
    +-----------+------+------+
    | 1 | 0x00 | 0x10 |
    +-----------+------+------+
    內部計數,由TR啟動,Timer0,Mode0,TMOD = 0x00
    內部計數,由TR啟動,Timer1,Mode0,TMOD = 0x10
    內部計數,由TR啟動,Timer0,Mode1,TMOD = 0x01
    內部計數,由TR啟動,Timer0,Mode0,TMOD = 0x00

    */
    TMOD = 0x10;
    while(1){
    //P1 = 0x00;

    DelayX1msTimer1Mode1(1000);

    P1_0=~P1_0;
    }
    }
复制代码

TimerLIB.c

  1. /*
  2. 本程式依照創用CC規範,也就是說,愛怎麼用就怎麼用,就算拿去賺錢我,只要別讓我知道就好。
  3. 設計者:Ethan
  4. 設計日期:2012/5/5
  5. 程式功能:內部計時,TR啟動,
    DelayX1msTimer1Mode0 == Timer1,Mode0 1ms延遲產生程式;
    DelayX1msTimer1Mode0 == Timer1,Mode1 1ms延遲產生程式;
    DelayX1msTimer0Mode0 == Timer0,mode0 1ms延遲產生程式;
    DelayX1msTimer0Mode0 == Timer0,mode0 1ms延遲產生程式;

  6. */



  7. #include<AT89X51.h>
    #include "timerAPI.h"

    //Timer 1,Mode 0 ,內部計數,TR啟動,計時1ms副程式
    //Count=延遲時間
    //Count=1000,延遲一秒
    //Count=10000,延遲十秒
    extern void DelayX1msTimer1Mode0(unsigned int count){
    //13位元計數,所以是2^13=8192
    //TLx=(計數位元數-計數次數)%256
    //THx=(計數位元數-計數次數)/256
    TL1=(8192-1000)%32;
    TH1=(8192-1000)/32;
    TR1=1;//Timer 0啟動
    while (count)
    {
    //TF,計數溢位旗標,數到了就會變為0
    while(TF1==0);
    //重新設定Timer 0
    TL1=(8192-1000)%32;
    TH1=(8192-1000)/32;
    TF1=0;
    count--;
    }
    TR1=0;//Timer 0關閉
    }


    //Timer 0,Mode 0 ,內部計數,TR啟動,計時1ms副程式
    //Count=延遲時間
    //Count=1000,延遲一秒
    //Count=10000,延遲十秒
    extern void DelayX1msTimer0Mode0(unsigned int count){
    //13位元計數,所以是2^13=8192
    //TLx=(計數位元數-計數次數)%256
    //THx=(計數位元數-計數次數)/256
    TL0=(8192-1000)%32;
    TH0=(8192-1000)/32;
    TR0=1;//Timer 0啟動
    while (count)
    {
    //TF,計數溢位旗標,數到了就會變為0
    while(TF0==0);
    //重新設定Timer 0
    TL0=(8192-1000)%32;
    TH0=(8192-1000)/32;
    TF0=0;
    count--;
    }
    TR0=0;//Timer 0關閉
    }

    //Timer 0,Mode 1 ,內部計數,TR啟動,計時1ms副程式
    //Count=延遲時間
    //Count=1000,延遲一秒
    //Count=10000,延遲十秒
    extern void DelayX1msTimer0Mode1(unsigned int count){
    //16位元計數,所以是2^16=65535
    //TLx=(計數位元數-計數次數)%256
    //THx=(計數位元數-計數次數)/256
    TL0=(65536-1000)%256;
    TH0=(65536-1000)/256;
    TR0=1;//Timer 0啟動
    while (count)
    {
    //TF,計數溢位旗標,數到了就會變為0
    while(TF0==0);
    //重新設定Timer 0
    TL0=(65536-1000)%256;
    TH0=(65536-1000)/256;
    TF0=0;
    count--;
    }
    TR0=0;//Timer 0關閉
    }

    //Timer 1,Mode 1 ,內部計數,TR啟動,計時1ms副程式
    //Count=延遲時間
    //Count=1000,延遲一秒
    //Count=10000,延遲十秒
    extern void DelayX1msTimer1Mode1(unsigned int count){
    //16位元計數,所以是2^16=65535
    //TLx=(計數位元數-計數次數)%256
    //THx=(計數位元數-計數次數)/256
    TL1=(65536-1000)%256;
    TH1=(65536-1000)/256;
    TR1=1;//Timer 0啟動
    while (count)
    {
    //TF,計數溢位旗標,數到了就會變為0
    while(TF1==0);
    //重新設定Timer 0
    TL1=(65536-1000)%256;
    TH1=(65536-1000)/256;
    TF1=0;
    count--;
    }
    TR1=0;//Timer 0關閉
    }
复制代码


頭文件timerAPI.h

  1. extern void DelayX1msTimer0Mode0(unsigned int count);
    extern void DelayX1msTimer0Mode1(unsigned int count);
    extern void DelayX1msTimer1Mode1(unsigned int count);
    extern void DelayX1msTimer1Mode0(unsigned int count);
复制代码


把這三個程式碼全拷貝過去,各存成三個檔案,就可以使用了。
本人測試過,如果用keil,51的震盪頻率在12MHz的狀況之下,可以確實可以延遲一秒,甚至三十秒都可以。

然而,我的問題是當我用Keil連結的時候,出現以下的警告訊息
  1. Rebuild target 'Target 1'
    assembling STARTUP.A51...
    compiling timer.c...
    linking...
    *** WARNING L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESS
    SEGMENT: ?PR?TIMER0MODE0DELAY?TIMER
    *** WARNING L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESS
    SEGMENT: ?PR?TIMER1MODE1DELAY?TIMER
    *** WARNING L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESS
    SEGMENT: ?PR?_DELAYX1MSTIMER1MODE0?TIMER
    *** WARNING L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESS
    SEGMENT: ?PR?_DELAYX1MSTIMER0MODE0?TIMER
    *** WARNING L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESS
    SEGMENT: ?PR?_DELAYX1MSTIMER0MODE1?TIMER
    Program Size: data=10.0 xdata=0 code=199
    creating hex file from "timer"...
    "timer" - 0 Error(s), 5 Warning(s).
复制代码


很顯然的,這些訊息是說有些函數沒有用到。
我是可以當作沒看到,反正沒用到就沒用到;但還是想要把這些警告給解決。
請問我該如何解決?

此帖出自51单片机论坛

最新回复

呵呵,看来像是少了什么东西。  详情 回复 发表于 2012-5-8 13:12
点赞 关注
 

回复
举报

4008

帖子

0

TA的资源

版主

沙发
 
有两个方法
1:函数拆分到不同的C文件中
2:BL51 MISC,在Misc controls的框中填入code (?PR?函数名?)  可能不准确,你在查查。这种方法只是屏蔽掉警告,无用的code会编到目标文件里,方法1比较好。
此帖出自51单片机论坛
 
 
 

回复

21

帖子

0

TA的资源

一粒金砂(中级)

板凳
 

回复 沙发 huo_hu 的帖子

第一個方法……你的意思是要拆成四個檔案?
這個方法的確可行,但……總覺得好像有點怪怪的^^a
此帖出自51单片机论坛
 
 
 

回复

4008

帖子

0

TA的资源

版主

4
 

回复 板凳 markscat 的帖子

看有没有调用关系,没有就分开。
此帖出自51单片机论坛
 
 
 

回复

21

帖子

0

TA的资源

一粒金砂(中级)

5
 

回复 4楼 huo_hu 的帖子

『调用关系』?
抱歉,不是很瞭解這是什麼意思^^a
此帖出自51单片机论坛
 
 
 

回复

4008

帖子

0

TA的资源

版主

6
 
此帖出自51单片机论坛
 
 
 

回复

21

帖子

0

TA的资源

一粒金砂(中级)

7
 

回复 6楼 huo_hu 的帖子

我……我是硬體工程師……
您的意思是說,如果這些函數沒有互相使用到任何參數,或是函數中呼叫另一個函數,就把這些函數分成四個檔案嗎?
如果是這樣的話,總感覺有點怪怪的。

我在想會是不會是我設定上的問題。因為我用C語言的IDE上並不會有這種問題。
此帖出自51单片机论坛
 
 
 

回复

304

帖子

0

TA的资源

一粒金砂(高级)

8
 
呵呵,看来像是少了什么东西。
此帖出自51单片机论坛
 
 
 

回复

21

帖子

0

TA的资源

一粒金砂(中级)

9
 

回复 8楼 guangod 的帖子

是的,只是就是不知道少了啥
此帖出自51单片机论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表