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

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


Частый гость
**

Группа: Свой
Сообщений: 170
Регистрация: 8-02-06
Из: Москва
Пользователь №: 14 116



Чтобы не множить темы задам вопрос тут.

Столкнулся с такой ситуацией. Хочу понять причину.

Есть IAR EWARM KikcStart версия 7.x на рабочем компе. Собрал прошивку все нормально и отлично работает. Пришел домой поставил 7.40 License компилирую тот же проект - не влезает. При тех же настройках прошивка увеличилась на 5к. Благо это загрузчик и поэтому память доступная линкеру была ограничена.

Начал в .map искать кто съел. Нахожу
Код
__Heap_Handler  = DLMalloc

dl7M_tlf.a: [3]
    dlmalloc.o                  5 456

__iar_dlcalloc          0x00001509   0x3e  Code  Gb  dlmalloc.o [3]
__iar_dlfree            0x00000ff9  0x510  Code  Gb  dlmalloc.o [3]
__iar_dlmalloc          0x00000d39  0x2b4  Code  Gb  dlmalloc.o [3]


В одном месте делаю calloc и free.

Убрал их и размер прошивки сразу вернулся к тому же размеру который был получен на рабочем ПК но с применением calloc и free.
Завтра посмотрю что в .map на рабочем компе.
Что это и почему один и тот же проект с одними и теме же настройками на разных версиях IAR дали такой разный результат?
Я в итоге конечно нашел вариант как уйти от calloc в этом месте, но хотелось бы разобраться.
Go to the top of the page
 
+Quote Post



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

 


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


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