OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 127|回复: 3

变量定义了为什么还是报错说没定义

[复制链接]

1

主题

1

帖子

0

精华

新手入门

积分
13
金钱
13
注册时间
2025-7-16
在线时间
1 小时
发表于 2025-8-4 09:39:26 | 显示全部楼层 |阅读模式
1金钱
BSP_SOX.h文件中:
typedef union {
    uint32_t all;
    struct {
        uint32_t ac_high_temp1     : 1;   // 市电高温告警1: 43≤t<48°C, 恢复≤40°C
        uint32_t ac_high_temp2     : 1;   // 市电高温告警2: 48≤t<67°C, 恢复≤45°C
        uint32_t ac_high_temp3     : 1;   // 市电高温告警3: t>67°C, 恢复≤60°C
        uint32_t ac_low_temp1      : 1;   // 市电低温告警1: -15≤t<2°C, 恢复≥8°C
        uint32_t ac_low_temp2      : 1;   // 市电低温告警2: t<-15°C, 恢复≥8°C
        uint32_t battery_high_temp : 1;   // 电池模式高温: t>67°C, 恢复<60°C
        uint32_t battery_low_temp  : 1;   // 电池模式低温: t<-15°C, 恢复≥10°C

        uint32_t ac_input_overvoltage  : 1; // 市电输入过压 >13.2V,灯闪烁 0.5s
        uint32_t ac_input_undervoltage : 1; // 市电输入欠压 4.9~10.8V,灯闪烁

        uint32_t battery_overvoltage   : 1; // 电池过压:关闭充电,SOC=100
        uint32_t battery_undervoltage  : 1; // 电池欠压:关闭输出,进入休眠

        uint32_t output_overload_or_short : 1; // 输出过载或短路(总功率 >21W)
        uint32_t output_no_load_timeout   : 1; // 无负载30秒休眠(I<50mA, P<0.6W),I>100mA重置
        uint32_t ntc_disconnect          : 1;  // NTC 断线检测
        uint32_t single_port_overcurrent : 1;  // 单口过流(5V:2.6A, 9V:2.2A, 12V:3.2A)
        // 保留位(18 bits)
    } bit;
} SystemAlarmFlags;

extern SystemAlarmFlags system_alarms;  
typedef struct {
    union {
        uint8_t data_u8;                  // 整体访问状态字节
        struct {
            uint8_t soc_overvoltage_flag : 1; // 过压时触发,用于锁定 SOC=100
            uint8_t soc_undervoltage_flag : 1;// 欠压时触发,用于锁定 SOC=0
            // 保留位
        } bit;
    } status;

    float current;                        // 实时电流(单位:mA 或 A,视上下文)
    float soc;                            // 当前电量百分比(0~100)
    float charge;                         // 当前剩余容量(mAh)
} SocData;

extern SocData soc_data;  // SOC 全局数据
BSP_SOX.c文件中:
#include "BSP_SOX.h"
SystemAlarmFlags system_alarms;
BSP_led.h文件中:
#include "BSP_SOX.h"
void BSP_led_main(bool mode, SystemAlarmFlags* Alarm, SocData* soc);
BSP_led.c文件中:
void BSP_led_main(bool mode, SystemAlarmFlags* Alarm, SocData* soc)
{
    static uint8_t ac_time = 0;
    static uint8_t dc_time = 0;

    if (mode == 0)//电池模式
    {
        if (Alarm->all == 0)//没有告警状态
        {
            led_on_Alarm(mode, soc);
//            led_off_Alarm(mode, Alarm, 1);//复位
        }
        else//有告警
        {
           //  led_on_Alarm(mode, soc);
//            if (led_off_Alarm(mode, Alarm, 0))
            {
//                key_int.key_sys = 3;//长按  休眠
//                led_off_Alarm(mode, Alarm, 1);//复位
            }
        }

        if (system_alarms.bit.ac_input_undervoltage || system_alarms.bit.ac_input_overvoltage)//输入欠压  过压
        {
            if (++dc_time > 5)
            {
                dc_time = 0;
                LED_BLUE = ~LED_BLUE;//蓝灯亮起
            }
        }
        else LED_BLUE = 0;//熄灭
        LED_RED = 0;//红灯灭掉
        // LED_RED = 1;//红灯亮起
        // LED_BLUE = 0;//蓝灯灭掉

        ac_time = 0;
    }
    else//市电模式
    {
        dc_time = 0;
        if (Alarm->all == 0)//没有告警状态
        {
            led_on_Alarm(mode, soc);
            led_off_Alarm(mode, Alarm, 1);//复位
        }
        else//有告警
        {
          //  led_on_Alarm(mode, soc);
            if (led_off_Alarm(mode, Alarm, 0))
            {
                g_KeyStatus.key_sys = 3;//长按  休眠
                led_off_Alarm(mode, Alarm, 1);//复位
            }
        }

        if (system_alarms.bit.ac_input_undervoltage || system_alarms.bit.ac_input_overvoltage)//输入欠压  过压
        {
            if (++ac_time > 5)
            {
                ac_time = 0;
                LED_BLUE = ~LED_BLUE;//蓝灯亮起
            }
        }
        else LED_BLUE = 1;
        LED_RED = 0;//红灯灭掉

    }
}
keil为什么会有以下报错呢,我的C++选项卡里已包含路径
..\..\..\..\bsp\BSP_led.h(69): error:  #20: identifier "SystemAlarmFlags" is undefined
  void BSP_led_main(bool mode, SystemAlarmFlags* Alarm, SocData* soc);
..\..\..\..\bsp\BSP_led.h(69): error:  #20: identifier "SocData" is undefined
  void BSP_led_main(bool mode, SystemAlarmFlags* Alarm, SocData* soc);
..\..\..\..\bsp\BSP_SOX.c(120): warning:  #1035-D: single-precision operand implicitly converted to double-precision

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

9

主题

258

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1410
金钱
1410
注册时间
2014-11-25
在线时间
192 小时
发表于 2025-8-4 14:38:09 | 显示全部楼层
工程的问题,看看包含顺序
回复

使用道具 举报

9

主题

258

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1410
金钱
1410
注册时间
2014-11-25
在线时间
192 小时
发表于 2025-8-4 14:44:23 | 显示全部楼层
BSP_SOX.h包含没?
回复

使用道具 举报

0

主题

8

帖子

0

精华

新手上路

积分
33
金钱
33
注册时间
2025-8-4
在线时间
3 小时
发表于 2025-8-5 09:22:12 | 显示全部楼层
定义的地方在bsp_sox.c,使用的地方在bsp_led.c,重点看下bsp_led.h里有没有使用这个变量
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-8-14 01:31

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表