Перейти к содержанию
    

Компляция Atollic TrueStudio(GCC) vs IAR

В Atollic такое выражение компилируется без проблем.

void Func (Task *task)
{
    uint8_t results[task->groupCount];
}

В IAR получаю ошибку

Error[Pe060]: this operator is not allowed in an integral constant expression

Переписываю

void Func (Task *task)
{
    uint32_t n = task->groupCount;
    uint8_t results[n];
}

Получаю

Error[Pe028]: expression must have a constant value

Кому верить?

 

Ну положим IAR беспокоиться за stack overflow. Но дайте это опционально, на выбор. А то сразу жесткий error.

Изменено пользователем Jenya7

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Значит или ИАР не подерживает массивы переменной длины (читайте документацию, лет 10 назд не поддерживал и это было описано), хотя они есть в стандарте 99 года, либо вы компилируете в режиме С89 или C++ (в этих стандартах таких массивов нет, gcc поддерживает их в качестве расширения).

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Значит или ИАР не подерживает массивы переменной длины (читайте документацию, лет 10 назд не поддерживал и это было описано), хотя они есть в стандарте 99 года, либо вы компилируете в режиме С89 или C++ (в этих стандартах таких массивов нет, gcc поддерживает их в качестве расширения).

Посмотрел настройки - компилирую в С99. Похоже за 10 лет ничего не изменилось.

 

конечно возникает резонный вопрос- если можно выделять массивы переменной длины то зачем malloc.

Изменено пользователем Jenya7

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

если можно выделять массивы переменной длины то зачем malloc.

 

результатом malloc`а можно обмениваться между задачами

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

результатом malloc`а можно обмениваться между задачами
Да и между функциями тоже. Автору вопроса ключевые слова для гугления: "время жизни переменной", "область видимости", "стек", "куча".

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Сергей, а вы в TrueStudio работали? Может подскажете чего насчет такого?

http://caxapa.ru/719328.html

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Сергей, а вы в TrueStudio работали?
Нет, с этой Студией не работал. Что там в качестве gdb-сервера испольуется? Если что-то ее родное, то попробуйте openocd. И еще: ST-Link прекрасно работает с Кортексами любого производителя, во всяком случае я ST-Link + openOCD без каких-бы то ни было проблем использовал с LPC1114 от NXP .

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Нет, с этой Студией не работал. Что там в качестве gdb-сервера испольуется? Если что-то ее родное, то попробуйте openocd. И еще: ST-Link прекрасно работает с Кортексами любого производителя, во всяком случае я ST-Link + openOCD без каких-бы то ни было проблем использовал с LPC1114 от NXP .

Судя по лицензии, используется сеггеровский gdb сервер, это для ST-Link gdb сервер родной, от Atollic и работает без проблем. Проблема похоже в том, что сервер работает нормально, а связь с ним почему-то среда теряет, хотя из консоли среды можно к нему обращаться, значит tcp соединение есть.

Для openocd в студии есть заглушка, но пока правильно пути и ключики выставить мне не удалось, с гнутыми компонентами я раньше не работал.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Посмотрел настройки - компилирую в С99. Похоже за 10 лет ничего не изменилось.

Там рядом с выбором С99 должен быть чекбокс "Allow VLA", это как раз оно - variable length arrays.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Там рядом с выбором С99 должен быть чекбокс "Allow VLA", это как раз оно - variable length arrays.

Точно! Большое спасибо! :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...