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 - C (СИ)»

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.500 из 5


СОХРАНИТЬ ССЫЛКУ