ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Четверг
27 ноября
1556498
mse homjak (Сегодня, 13:03, просмотров: 492)
Норот, с чорным поясом по Ц, требуеца помощь зала. 

Чуть правлю старый прожэкт на ПИК32 а Гармони. Ну то х с ним. Скока-то лет назад, тот-жэ компилер, спрятанный в папочку, генерил без проблем. Щас начались какие-то траблы. Линкер ругается на такое:

определение типа в *.h:

typedef union
{
    uint8_t data;
    struct
    {
        unsigned int autoload:1;        //"0"enable,"1"disable
        unsigned int :3;
        unsigned int wordsInBatch:3;     //"num of words in batch"+1
        unsigned int :1;
    }bits;
}SPI32directPort;

объявление константы в другом *.h:

const SPI32directPort       ADFmanualSingleWordLoad={.bits.autoload=1,.bits.wordsInBatch=2};

пользую в программе:

SPI32datareg[SPI32commandStatus]=ADFmanualSingleWordLoad.data;

но в нескольких файлах *.с.

линкер ругается так:

build/default/production/_ext/1360937237/ADCinitialize.o:(.rodata+0x0): multiple definition of `ADFmanualSingleWordLoad'; build/default/production/_ext/1360937237/main.o:(.rodata+0x0): first defined here

Так понимаю, можно раскидать объявление константы в соотвецтвующих *.с файлам *.h. Можно объявлять как static const, в соотвецтвующих местах. Но это приведёт к "тут изменил, а тут забыл". Как, кроме #define решить проблему инициализации в одном месте?