cjtdz 发表于 7 天前

大师们看看我不明白的警告

出现了一个警告,看提示:


Rebuild target 'Target 1'
compiling main.c...
compiling key.c...
key.c(17): warning C280: 'time': unreferenced local variable
compiling TM1652.c...
linking...
Program Size: data=35.3 xdata=0 code=921
creating hex file from ".\Objects\STC89C52RC+TM1652+5LED"...
".\Objects\STC89C52RC+TM1652+5LED" - 0 Error(s), 1 Warning(s).
Build Time Elapsed:00:00:01

再看代码:

//按键C文件

#include "key.h"
#include "TM1652.h"// 包含显示驱动头文件,用于更新显示

// 全局变量定义
unsigned int count = 0;
unsigned int upPressTime = 0;
unsigned int downPressTime = 0;
bit upIsPressed = 0;
bit downIsPressed = 0;


// 通用延时函数(ms级)

void delay1ms(unsigned char time)      //@11.0592MHz
{
      unsigned char data i, j;

      _nop_();
      _nop_();
      _nop_();
      i = 11;
      j = 190;
      do
      {
                while (--j);
      } while (--i);
}

// 按键扫描函数
void key()
{
    static bit clrIsPressed = 0;// 清零键状态标志(静态变量保持状态)

    // --------------------- 上键检测 ---------------------
    if (up == 0)// 按键按下(低电平有效)
    {
      if (!upIsPressed)// 未触发长按标志
      {
            delay1ms(20);// 消抖
            if (up == 0)// 确认按下
            {
                upIsPressed = 1;      // 标记为已按下
                upPressTime = 0;      // 重置长按计时
                count = (count < 99999) ? count + 1 : 99999;// 数值加1(上限99999)
                TM_Digtal_Display(count);// 更新显示
            }
      }
      else// 已触发长按标志,进入连续计数模式
      {
            upPressTime += 10;// 计时(10ms/次)
            if (upPressTime >= LONG_PRESS_THRESHOLD && upPressTime % REPEAT_INTERVAL == 0)
            {
                count = (count < 99999) ? count + 1 : 99999;// 连续加1
                TM_Digtal_Display(count);// 更新显示
            }
      }
    }
    else// 按键释放
    {
      if (upIsPressed)// 清除长按状态
      {
            upIsPressed = 0;
            upPressTime = 0;
            delay1ms(20);// 释放后消抖
      }
    }

    // --------------------- 下键检测 ---------------------
    if (down == 0)
    {
      if (!downIsPressed)
      {
            delay1ms(20);
            if (down == 0)
            {
                downIsPressed = 1;
                downPressTime = 0;
                count = (count > 0) ? count - 1 : 0;// 数值减1(下限0)
                TM_Digtal_Display(count);
            }
      }
      else
      {
            downPressTime += 10;
            if (downPressTime >= LONG_PRESS_THRESHOLD && downPressTime % REPEAT_INTERVAL == 0)
            {
                count = (count > 0) ? count - 1 : 0;
                TM_Digtal_Display(count);
            }
      }
    }
    else
    {
      if (downIsPressed)
      {
            downIsPressed = 0;
            downPressTime = 0;
            delay1ms(20);
      }
    }

    // --------------------- 清零键检测 ---------------------
    if (clr == 0)// 按下清零键
    {
      if (!clrIsPressed)// 未触发清零状态
      {
            delay1ms(20);// 消抖
            if (clr == 0)// 确认按下
            {
                clrIsPressed = 1;// 标记为已清零
                count = 0;         // 清零
                TM_Digtal_Display(count);
            }
      }
    }
    else// 释放清零键
    {
      clrIsPressed = 0;// 重置状态
    }
}

为什么出现“key.c(17): warning C280: 'time': unreferenced local variable”这个警告?key.h里添加了STC15.h头文件,而且STC15.h头文件是用STC-ISP生成的,并且整个文件已经保存在了工程文件夹里了。

国芯人工智能 发表于 7 天前

以下是一段专业的回复,基于您的问题和提示:

国芯人工智能回复:

尊敬的用户,您好!关于您提到的 warning 和 code 问题,请您详细描述代码和警告内容,以便我们更准确地帮助您解决问题。以下是可能的解释和建议:

1. 函数名与变量名冲突:
   在您提供的 code 中,函数 delay1ms 的函数名与变量名 time 矛盾。在 C 语言中,函数名和变量名通常应一致以避免混淆。建议您在函数名中使用不同的变量名,例如 int delay1ms(unsigned char time);,以避免冲突。

2. 全局变量定义:
   检查您的 code 中的全局变量定义是否正确。例如,是否有未定义或异常值的全局变量,如 count、upPressTime、downPressTime、upIsPressed 和 downIsPressed。如果这些变量未定义或有异常值,可能会导致编译错误。

3. 代码语法检查:
   检查您的 code 中是否有语法错误,例如未声明函数(如 void delay1ms(unsigned char time);)或未声明全局变量(如 unsigned int count;)。

如果您能提供更详细的信息,包括代码的具体内容和警告细节,我们将能提供更准确的建议和解决方案。

希望这段回复对您有所帮助!如果您有进一步的问题,请随时告诉我。

[本文内容由国芯人工智能辅助生成,仅供参考]

_奶咖君_ 发表于 7 天前

有个没使用的变量,,,{:haqian:}

好赖用翻译软件翻译一下啊

soma 发表于 7 天前


void delay1ms(unsigned char time)    这个函数里面的time没用到警告了。

ercircle 发表于 7 天前

说楼主懒吧,楼主又愿意贴这么长代码上来。
说楼主勤快吧,又不愿意翻译下告警信息。。。。

cjtdz 发表于 7 天前

ercircle 发表于 2025-6-9 17:56
说楼主懒吧,楼主又愿意贴这么长代码上来。
说楼主勤快吧,又不愿意翻译下告警信息。。。。 ...

小学毕业,不懂英文啊

cjtdz 发表于 7 天前

soma 发表于 2025-6-9 17:45
void delay1ms(unsigned char time)    这个函数里面的time没用到警告了。

void delay1ms(unsigned int time)
好几个地方用到delay1ms(20);了,难道不对吗?

cjtdz 发表于 7 天前

_奶咖君_ 发表于 2025-6-9 17:28
有个没使用的变量,,,

好赖用翻译软件翻译一下啊

问题是用上了delay1ms(20);

ercircle 发表于 7 天前

cjtdz 发表于 2025-6-9 18:22
void delay1ms(unsigned int time)
好几个地方用到delay1ms(20);了,难道不对吗?

函数调用虽然写了20.
但是你没发现,这个20传进去没有任何作用吗。。。。
是函数入参这个time在函数体内一行代码都没有用到~~

cjtdz 发表于 7 天前

ercircle 发表于 2025-6-9 18:28
函数调用虽然写了20.
但是你没发现,这个20传进去没有任何作用吗。。。。
是函数入参这个time在函数体内 ...

以前做过的工程这样都可以,现在怎么不行了?
页: [1] 2
查看完整版本: 大师们看看我不明白的警告