keil编译问题: Error: L6200E: Symbol g_DataPacketID multiply defined (by gprs.o and task.o)

keil编译出现的ERROR

  • 问题描述
    • 原因
    • 解决

问题描述

在task.c中,为了使用在gprs.c中声明的变量,包含头文件#include “gprs.h”,编译出现error。

 Error: L6200E: Symbol g_DataPacketID multiply defined (by gprs.o and task.o)

原因

两个.c文件都调用gprs.h的变量,导致gprs.h中的变量被重复定义。

解决

1.在gprs.c中声明变量(结构体/宏);

uint32_t g_DataPacketID = 0;

2.在gprs.h中对其进行外部引用;

extern uint32_t g_DataPacketID;

3.如何确定是哪一个变量出现了问题:
Error: L6200E: Symbol g_DataPacketID multiply defined (by gprs.o and task.o)

加粗的变量g_DataPacketID即是需要修改的变量

4.如何确定文件
Error: L6200E: Symbol g_DataPacketID multiply defined (by gprs.o and task.o)

加粗的即是都调用这个变量的文件

你可能感兴趣的:(keil,C)