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

 
 
> Некоторые непонятки
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
Ответов
Xenia
сообщение Apr 29 2015, 19:46
Сообщение #2


Гуру
******

Группа: Модератор FTP
Сообщений: 4 479
Регистрация: 20-02-08
Из: Москва
Пользователь №: 35 237



У вас модель памяти какая?
Похоже на то, что не Small, а Large, поскольку malloc замещен dlmalloc'ом.
Альтернативный "dlmalloc package" быстрее работает, но велик по объему.
Поставьте Small, и тогда альтернативный менеджер пямяти отключится. Или вручную определите
#define _DLIB_INCLUDE_DLMALLOC_ALTERNATIVE 0
Почитайте, что в комментариях написано:
CODE
/*
* Include dlmalloc as an alternative heap manager in product.
*
* Typically, an application will use a "malloc" heap manager that is
* relatively small but not that efficient. An application can
* optionally use the "dlmalloc" package, which provides a more
* effective "malloc" heap manager, if it is included in the product
* and supported by the settings.
*
* See the product documentation on how to use it, and whether or not
* it is included in the product.
*/
#ifndef _DLIB_INCLUDE_DLMALLOC_ALTERNATIVE
/* size_t/ptrdiff_t must be a 4 bytes unsigned integer. */
#if _DLIB_SMALL_TARGET_INTERNAL || __SIZE_T_MAX__ < 0xfffffffful
#define _DLIB_INCLUDE_DLMALLOC_ALTERNATIVE 0
#else
#define _DLIB_INCLUDE_DLMALLOC_ALTERNATIVE 1
#endif
#endif
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 30th July 2025 - 01:02
Рейтинг@Mail.ru


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