jenya7 0 18 декабря, 2016 Опубликовано 18 декабря, 2016 (изменено) · Жалоба В 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. Изменено 18 декабря, 2016 пользователем Jenya7 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 119 18 декабря, 2016 Опубликовано 18 декабря, 2016 · Жалоба Значит или ИАР не подерживает массивы переменной длины (читайте документацию, лет 10 назд не поддерживал и это было описано), хотя они есть в стандарте 99 года, либо вы компилируете в режиме С89 или C++ (в этих стандартах таких массивов нет, gcc поддерживает их в качестве расширения). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jenya7 0 18 декабря, 2016 Опубликовано 18 декабря, 2016 (изменено) · Жалоба Значит или ИАР не подерживает массивы переменной длины (читайте документацию, лет 10 назд не поддерживал и это было описано), хотя они есть в стандарте 99 года, либо вы компилируете в режиме С89 или C++ (в этих стандартах таких массивов нет, gcc поддерживает их в качестве расширения). Посмотрел настройки - компилирую в С99. Похоже за 10 лет ничего не изменилось. конечно возникает резонный вопрос- если можно выделять массивы переменной длины то зачем malloc. Изменено 18 декабря, 2016 пользователем Jenya7 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
megajohn 3 19 декабря, 2016 Опубликовано 19 декабря, 2016 · Жалоба если можно выделять массивы переменной длины то зачем malloc. результатом malloc`а можно обмениваться между задачами Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 119 19 декабря, 2016 Опубликовано 19 декабря, 2016 · Жалоба результатом malloc`а можно обмениваться между задачамиДа и между функциями тоже. Автору вопроса ключевые слова для гугления: "время жизни переменной", "область видимости", "стек", "куча". Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Andreas1 1 19 декабря, 2016 Опубликовано 19 декабря, 2016 · Жалоба Сергей, а вы в TrueStudio работали? Может подскажете чего насчет такого? http://caxapa.ru/719328.html Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 119 19 декабря, 2016 Опубликовано 19 декабря, 2016 · Жалоба Сергей, а вы в TrueStudio работали?Нет, с этой Студией не работал. Что там в качестве gdb-сервера испольуется? Если что-то ее родное, то попробуйте openocd. И еще: ST-Link прекрасно работает с Кортексами любого производителя, во всяком случае я ST-Link + openOCD без каких-бы то ни было проблем использовал с LPC1114 от NXP . Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Andreas1 1 19 декабря, 2016 Опубликовано 19 декабря, 2016 · Жалоба Нет, с этой Студией не работал. Что там в качестве gdb-сервера испольуется? Если что-то ее родное, то попробуйте openocd. И еще: ST-Link прекрасно работает с Кортексами любого производителя, во всяком случае я ST-Link + openOCD без каких-бы то ни было проблем использовал с LPC1114 от NXP . Судя по лицензии, используется сеггеровский gdb сервер, это для ST-Link gdb сервер родной, от Atollic и работает без проблем. Проблема похоже в том, что сервер работает нормально, а связь с ним почему-то среда теряет, хотя из консоли среды можно к нему обращаться, значит tcp соединение есть. Для openocd в студии есть заглушка, но пока правильно пути и ключики выставить мне не удалось, с гнутыми компонентами я раньше не работал. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SSerge 4 19 декабря, 2016 Опубликовано 19 декабря, 2016 · Жалоба Посмотрел настройки - компилирую в С99. Похоже за 10 лет ничего не изменилось. Там рядом с выбором С99 должен быть чекбокс "Allow VLA", это как раз оно - variable length arrays. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jenya7 0 20 декабря, 2016 Опубликовано 20 декабря, 2016 · Жалоба Там рядом с выбором С99 должен быть чекбокс "Allow VLA", это как раз оно - variable length arrays. Точно! Большое спасибо! :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться