在 Keil 中多次定义符号 (ERROR L76200E)
Multiply defined symbols in Keil (ERROR L76200E)
我正在尝试拆分我的代码,但由于函数 calculateNmeaChecksum()
...,我在 Keil 中面临多重定义的符号
这是我的两个文件:
Main.c :
#include "main.h"
#include "UART_functions.c"
char checksum;
int main(void)
{
HAL_Init();
SystemClock_Config();
MX_GPIO_Init();
MX_SDMMC1_SD_Init();
MX_TIM5_Init();
MX_TIM16_Init();
MX_FATFS_Init();
MX_SPI1_Init();
MX_SPI2_Init();
MX_USART1_UART_Init();
HAL_TIM_Base_Start_IT(&htim16);
checksum = calculateNmeaChecksum("$PMTKLOG,456,0,11,31,2,0,0,0,3769,46*48");
while (1)
{
}
}
UART_functions.c
unsigned char calculateNmeaChecksum(const char *s)
{
unsigned char result;
result = 0;
s++; // Skip dollar sign
while ((*s != '*') && (*s != '[=11=]'))
result ^= *s++;
return result;
}
我尝试编译时出现此错误:
UART_GPS\UART_GPS.axf: Error: L6200E: Symbol calculateNmeaChecksum multiply defined (by uart_functions.o and main.o).
您正在编译该函数两次,第一次编译到“uart_functions.o”,第二次编译到“main.o”。然后你 link 两个模块。
在“main.c”中,您应该只包含声明函数原型的头文件“uart_functions.h”:
unsigned char calculateNmeaChecksum(const char *s);
顺便说一句,错误信息 crystal 很清楚... ;-)
我正在尝试拆分我的代码,但由于函数 calculateNmeaChecksum()
...,我在 Keil 中面临多重定义的符号
这是我的两个文件:
Main.c :
#include "main.h"
#include "UART_functions.c"
char checksum;
int main(void)
{
HAL_Init();
SystemClock_Config();
MX_GPIO_Init();
MX_SDMMC1_SD_Init();
MX_TIM5_Init();
MX_TIM16_Init();
MX_FATFS_Init();
MX_SPI1_Init();
MX_SPI2_Init();
MX_USART1_UART_Init();
HAL_TIM_Base_Start_IT(&htim16);
checksum = calculateNmeaChecksum("$PMTKLOG,456,0,11,31,2,0,0,0,3769,46*48");
while (1)
{
}
}
UART_functions.c
unsigned char calculateNmeaChecksum(const char *s)
{
unsigned char result;
result = 0;
s++; // Skip dollar sign
while ((*s != '*') && (*s != '[=11=]'))
result ^= *s++;
return result;
}
我尝试编译时出现此错误:
UART_GPS\UART_GPS.axf: Error: L6200E: Symbol calculateNmeaChecksum multiply defined (by uart_functions.o and main.o).
您正在编译该函数两次,第一次编译到“uart_functions.o”,第二次编译到“main.o”。然后你 link 两个模块。
在“main.c”中,您应该只包含声明函数原型的头文件“uart_functions.h”:
unsigned char calculateNmeaChecksum(const char *s);
顺便说一句,错误信息 crystal 很清楚... ;-)