Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: compile date-time
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > Cредства разработки для МК > GNU/OpenSource средства разработки
demiurg_spb
Следующая конструкция (проскакивало в рассылке недавно) работает в MSVC а в avr-gcc, при попытке инициализировать данные в eeprom:
error: initializer element is not constant
Что-нибудь посоветуете?
Код
#ifndef _COMPILE_DATE_TIME_
#define _COMPILE_DATE_TIME_

#define COMPILE_HOUR   (((__TIME__[0]-'0')*10) + (__TIME__[1]-'0'))
#define COMPILE_MINUTE (((__TIME__[3]-'0')*10) + (__TIME__[4]-'0'))
#define COMPILE_SECOND (((__TIME__[6]-'0')*10) + (__TIME__[7]-'0'))

#define COMPILE_YEAR ((((__DATE__ [7]-'0')*10+(__DATE__[8]-'0'))*10+(__DATE__ [9]-'0'))*10+(__DATE__ [10]-'0'))

#define COMPILE_MONTH ((__DATE__ [2] == 'n' ? (__DATE__ [1] == 'a' ?0 : 5) \
                     : __DATE__ [2] == 'b' ? 1 \
                     : __DATE__ [2] == 'r' ? (__DATE__ [0] == 'M'? 2 : 3) \
                     : __DATE__ [2] == 'y' ? 4 \
                     : __DATE__ [2] == 'l' ? 6 \
                     : __DATE__ [2] == 'g' ? 7 \
                     : __DATE__ [2] == 'p' ? 8 \
                     : __DATE__ [2] == 't' ? 9 \
                     : __DATE__ [2] == 'v' ? 10 : 11)+1)

#define COMPILE_DAY ((__DATE__ [4]==' ' ? 0 : __DATE__[4]-'0')*10+(__DATE__[5]-'0'))
#endif
MrYuran
А если закомментировать COMPILE_MONTH и COMPILE_DAY ?


Что-то мне подсказывает, что вместо __DATE__ [2] == 'n' ? нужно писать что-то типа #if __DATE__ [2] == 'n'
AHTOXA
Цитата(demiurg_spb @ Feb 11 2010, 19:19) *
error: initializer element is not constant


GCC для ARM проглатывает такую конструкцию спокойно. msp-gcc тоже ругается.

Проблема сводится к допустимости конструкции вида
Код
const char * const s = "asdff";
int cday = s[2];


Почему-то GCC для MSP и AVR считает её недопустимой.
demiurg_spb
Цитата(MrYuran @ Feb 11 2010, 17:34) *
А если закомментировать COMPILE_MONTH и COMPILE_DAY ?
Что-то мне подсказывает, что вместо __DATE__ [2] == 'n' ? нужно писать что-то типа #if __DATE__ [2] == 'n'
Нет. Не в этом дело. Можно выкрутится на уровне makefile вызывая dete.exe из utils/bin. Но есть какая-то фигня с путями.
У меня в путях первым делом указан путь к utils/bin, а эта сволочь (винда) вызывает свой date.exe, может просто грохнуть его...

Цитата(AHTOXA @ Feb 11 2010, 17:46) *
Почему-то GCC для MSP и AVR считает её недопустимой.
Интересно почему? Может Клён знает?

Да и ещё из приколов. Я теперь все программы компилю с ключиком -pedantic.
Ибо наткнулся на молчаливое проглатывание присвоения типа const char*const* переменной типа const char*.
А с -pedantic ругается на несоответствие типов.
Правда напрягает что c -pedantic тип void* не может инициализировать тип указатель на функциюsad.gif
Но и с этим жить можно...
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.