Symbol multiply defined - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Попытался вынести некоторые определения из main в отдельный файл. В

main.c

написал:
#include "Globals.h"
В

Globals.h

вытащил из main:
#ifndef _GLOBALS_H
#define _GLOBALS_H
#define osObjectsPublic                     // define objects in main module
 
#include "osObjects.h"                      // RTOS object definitions
#include "stm32f4xx_spi.h"              // Keil::Device:StdPeriph Drivers:SPI
#include "stm32f4xx_gpio.h"             // Keil::Device:StdPeriph Drivers:GPIO
#include "RTE_Device.h"                 // Keil::Device:Startup
#include "stm32f4xx_dma.h"              // Keil::Device:StdPeriph Drivers:DMA
#include "rl_usb.h"
#include "rl_usbd.h"
#include <Driver_USBD.h>
#include <string.h>
uint8_t m_dataFromUSBtoSPI1[0x800];
uint8_t m_dataFromSPI1toUSB[0x800];
int m_spi1SizeFromPC=0x2;
uint32_t m_spi1SizeToPC=0x0;
uint8_t m_dataFromUSBtoSPI2[0x800];
uint8_t m_dataFromSPI2toUSB[0x800];
uint32_t m_spi2Size=0x2;
uint8_t m_buf1ToFlash [0x800];
uint16_t flashBuf [0x20];       
uint8_t* pDataToUsb;
uint32_t dataToUsbOffset;
uint32_t cntToUsb;
osSemaphoreId semaphoreHaveFromUsb;                         // Semaphore ID
osSemaphoreDef(semaphoreHaveFromUsb);                       // Semaphore definition
osSemaphoreId semaphoreCanSendToUsb;                         // Semaphore ID
osSemaphoreDef(semaphoreCanSendToUsb);                       // Semaphore definition
void initSPI();
#endif
В Globals.c решил вытащить некоторые функции из main, которые используют вышеприведённые объявления. Для это пришлось в

Globals.c

написать:
#include "Globals.h"
В результате все эти объявления оказались

multiply defined

. В чём дело? Разве вот это в

Globals.h

:
#ifndef _GLOBALS_H
#define _GLOBALS_H
....................
#endif
не должно было решить эту проблему?!

Решение задачи: «Symbol multiply defined»

textual
Листинг программы
uint8_t m_dataFromUSBtoSPI1[0x800];
uint8_t m_dataFromSPI1toUSB[0x800];
int m_spi1SizeFromPC=0x2;
uint32_t m_spi1SizeToPC=0x0;
uint8_t m_dataFromUSBtoSPI2[0x800];
uint8_t m_dataFromSPI2toUSB[0x800];
uint32_t m_spi2Size=0x2;
uint8_t m_buf1ToFlash [0x800];
uint16_t flashBuf [0x20];       
uint8_t* pDataToUsb;
uint32_t dataToUsbOffset;
uint32_t cntToUsb;

Оцени полезность:

8   голосов , оценка 3.5 из 5