реклама на сайте
подробности

 
 
> Некоторые непонятки
SasaVitebsk
сообщение May 22 2013, 07:10
Сообщение #1


Гуру
******

Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521



Ребята, выручайте. Немного непонимаю.

Имеется объявление:
Код
typedef const struct
{
  const int32_t            *Index;                // Указатель на редактируемый параметр/ смещение для каналов
  const uint16_t        Ch;                    // 0/ Указатель на канал
  const uint8_t            fSignEn;            // Отображение знака числа
  const uint8_t            LenDig;                // Число цифр в числе (0 - гашение незначащих нулей)
  const uint8_t            DigAfterDot;        // Число цифр после точки (0 - точки нет)
  const uint8_t            DigType;            // Тип результирующего числа (0 - int8, 1 - int16, 2 - int32, 3 - float)
  const uint16_t        typeEditing;        // возможножность редактирования
  void                    (*savefunc)(void);    // Указатель на функцию записи редактируемых параметров
  const char* const        NameUnits;            // наименование единиц измерения
} DigEditing_t;


Имеется строка
const char* const strSec = "сек.";

Объявлена структура
Код
//***************************************************************
// @@ 12. Настройки работы подсветки прибора
DigEditing_t dgeLightTime =                // Меню "Настройки подсветки"
{
  (int32_t *)&LightTime,                        // Время работы подсветки прибора
  0, 0,                                            // прямой, неотображать знак
  3, 0,                                            // два знака, нет запятой
  0,                                            // int8
  ALLEDIT, SaveGlobalSetting,                    // Редактировать можно без пароля, сохранять
  strSec                                        // "сек."
};


IAR 6.40.2 даёт сообщение об ошибке на строке
strSec // "сек."


Error[Pe028]: expression must have a constant value E:\work\IAR C Proect\tm3\Source\MonoMenu\lcd_work.c 432

Что он от меня хочет?
GCC компилит.


Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
SasaVitebsk
сообщение May 22 2013, 07:58
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521



Там проект уже под сотню файлов...
Изначально так и было. Я его в QT писал. QT понимает даже если непосредственно пишешь "сек.". IAR не помещал структуру во флэш если не указываешь что поля константы. С этого всё и понеслось. Кроме того, при размещении в структуре требует либо явного указания длины либо указателя ... Да я уже всё и не помню ...
Ладно. Я это обхожу ч/з указатель, но вообще-то непонятно

Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение May 22 2013, 08:17
Сообщение #3


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



ИМХО мой пример будет всегда повторяемо и ожидаемо компилится абсолютно любым стандартным с99 и с11 компилятором.
Чтобы его и плюсы переварили нужно отказаться от инициализации полей структуры по имени - не велика потеря.

+ ещё заметил
Код
  (const int32_t *)&LightTime,                        - у вас не хватало const

+
ALLEDIT должно быть либо задефайнено, либо enum (в общем не const int ALLEDIT = 33;).


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 14:14
Рейтинг@Mail.ru


Страница сгенерированна за 0.01371 секунд с 7
ELECTRONIX ©2004-2016