Не запрещает. Если я начал разбираться с регистрами, то на кой черт она нужна с килобайтом выжранной памяти на старте???
Чтобы помигать светодиодом и решить - хочешь ты изучать регистры или нет. Или, например, изготовить плату управления для 3Д принтера. Тд.
Обе константы существующие. Просто написана фигня. А если указать несуществующую константу или переменную - компилятор ругнется. Компилятор не может вынуть из мозгов алгоритм программы, и проверить на соответствие ему. А при несоответствии ругнуться .
И как решались задачи с динамическими массивами? Выделять фиксированный заранее большой массив? Перфекционист негодует, но можно ли об этом почитать? Тут недавно пролетала тема с malloc и free, там затихло быстро на стандарте MISRA C, но там я не увидел жесткого ограничения на динамические массивы.
тоись new, которая в глубине своей души тоже malloc(), оне тоже запретили. Не надо бояться играть с памятью МК, надо просто знать что ты делаешь. Например, класс String для новичков я бы запретил конкретно, насмерть, пока скилл не прокачают и не узнают, как он работает.
Согласен! Не то, чтобы запретили, просто не рекомендовали использовать без особой необходимости. Выделение и освобождение динамической памяти, на микроконтроллере - в обычных задачах управления, требуется реально не часто. За исключением очередей сообщений. Поэтому в обычных ситуациях используются локальные буфера на стеке. Вышел из функции - буфера освободились. А для очередей сообщений, когда нет других выделений/освобождений памяти - тоже не проблема, все освобождается, и дефрагментация не происходит. Одним словом, для того, чтобы все надежно работало, нужно понимать как оно внутри работает!
Плохое решение, если в этом решении дошло до abort(); Дальше то что? ехать на место и потом - Reset или включение /выключение питания? Или ждать WDT? На PC, там пользователь хоть рядом, за монитором и клавиатурой
Ну блин... Рестарт по WDT - это уже как-то совсем не айс. Для меня WDT - это ну питание как-то сбойнуло, ну в алгоритме что-то не доглядели. Одним словом костыль, сохраняющий жизнеспособность устройства.
Вот именно это именно меня и напрягало в LUA, когда под ESP8266 больше ничего не было. Все работает, код - 1 экран, вдруг хлоп - рестарт. Потом для ESP появилась поддержка Си, под Ардуино ИДЕ, попробовал - ни одного самопроизвольного рестарта, более чем за два с лишним года. Ну это уже нормально. Мой внутренний протекционист доволен.
Ну да. Потому что память течет в результате отсутствия наблюдения за ней. Ну и потому что все сначала бывает кривовато. Луа на Си написан.
В Lua так же ) Таблица это указатель на данные и если сделать вот так: MyTable1 = {somedata} MyTable2 = MyTable1 вы просто меняете указатель. еще вот так можно MyTable2 = {MyTable1} ))) MyTable1 = nil все освободили все что было )
Кстати, ESP32 сейчас болеет теми же болезнями, что, ESP8266 несколько лет назад. Таблица - это сущность. Всякие переменные, что связаны с ней - указатели. Так точнее.
Новичёк спросил с чего начать?А ему сразу начинают советовать профессиональное оборудование и софт.Вот он и соскочил.Я бы тоже соскочил. - Как поменять предохранитель? - Учи матчасть дурак!