Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Компляция Atollic TrueStudio(GCC) vs IAR
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > Программирование
Jenya7
В 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.
Сергей Борщ
Значит или ИАР не подерживает массивы переменной длины (читайте документацию, лет 10 назд не поддерживал и это было описано), хотя они есть в стандарте 99 года, либо вы компилируете в режиме С89 или C++ (в этих стандартах таких массивов нет, gcc поддерживает их в качестве расширения).
Jenya7
Цитата(Сергей Борщ @ Dec 18 2016, 18:50) *
Значит или ИАР не подерживает массивы переменной длины (читайте документацию, лет 10 назд не поддерживал и это было описано), хотя они есть в стандарте 99 года, либо вы компилируете в режиме С89 или C++ (в этих стандартах таких массивов нет, gcc поддерживает их в качестве расширения).

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

конечно возникает резонный вопрос- если можно выделять массивы переменной длины то зачем malloc.
megajohn
Цитата(Jenya7 @ Dec 18 2016, 16:14) *
если можно выделять массивы переменной длины то зачем malloc.


результатом malloc`а можно обмениваться между задачами
Сергей Борщ
QUOTE (megajohn @ Dec 19 2016, 08:02) *
результатом malloc`а можно обмениваться между задачами
Да и между функциями тоже. Автору вопроса ключевые слова для гугления: "время жизни переменной", "область видимости", "стек", "куча".
Andreas1
Сергей, а вы в TrueStudio работали? Может подскажете чего насчет такого?
http://caxapa.ru/719328.html
Сергей Борщ
QUOTE (Andreas1 @ Dec 19 2016, 08:55) *
Сергей, а вы в TrueStudio работали?
Нет, с этой Студией не работал. Что там в качестве gdb-сервера испольуется? Если что-то ее родное, то попробуйте openocd. И еще: ST-Link прекрасно работает с Кортексами любого производителя, во всяком случае я ST-Link + openOCD без каких-бы то ни было проблем использовал с LPC1114 от NXP .
Andreas1
Цитата(Сергей Борщ @ Dec 19 2016, 10:58) *
Нет, с этой Студией не работал. Что там в качестве gdb-сервера испольуется? Если что-то ее родное, то попробуйте openocd. И еще: ST-Link прекрасно работает с Кортексами любого производителя, во всяком случае я ST-Link + openOCD без каких-бы то ни было проблем использовал с LPC1114 от NXP .

Судя по лицензии, используется сеггеровский gdb сервер, это для ST-Link gdb сервер родной, от Atollic и работает без проблем. Проблема похоже в том, что сервер работает нормально, а связь с ним почему-то среда теряет, хотя из консоли среды можно к нему обращаться, значит tcp соединение есть.
Для openocd в студии есть заглушка, но пока правильно пути и ключики выставить мне не удалось, с гнутыми компонентами я раньше не работал.
SSerge
Цитата(Jenya7 @ Dec 18 2016, 20:14) *
Посмотрел настройки - компилирую в С99. Похоже за 10 лет ничего не изменилось.

Там рядом с выбором С99 должен быть чекбокс "Allow VLA", это как раз оно - variable length arrays.
Jenya7
Цитата(SSerge @ Dec 19 2016, 21:39) *
Там рядом с выбором С99 должен быть чекбокс "Allow VLA", это как раз оно - variable length arrays.

Точно! Большое спасибо! sm.gif
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.