Вопросы новичка

Тема в разделе "Arduino & Shields", создана пользователем ДеКодер, 15 дек 2018.

  1. parovoZZ

    parovoZZ Гуру

    это новатон? Она ж не промышленная, а для дома.
     
  2. ИгорьК

    ИгорьК Гуру

    Ардуино запрещает работу с регистрами, таймерами, etc?
     
  3. parovoZZ

    parovoZZ Гуру

    львиная часть ошибок происходит по "запаре". Также как и с переменной.
     
  4. ИгорьК

    ИгорьК Гуру

    Она серийно (мелко) изготавливается для продажи. Разве не промышленная?
     
  5. parovoZZ

    parovoZZ Гуру

    Не запрещает. Если я начал разбираться с регистрами, то на кой черт она нужна с килобайтом выжранной памяти на старте???
     
  6. ИгорьК

    ИгорьК Гуру

    Чтобы помигать светодиодом и решить - хочешь ты изучать регистры или нет.

    Или, например, изготовить плату управления для 3Д принтера. Тд.
     
  7. parovoZZ

    parovoZZ Гуру

    и на соответствие каким стандартам оно сертифицировано?
     
  8. SergeiL

    SergeiL Оракул Модератор

    Обе константы существующие.
    Просто написана фигня.
    А если указать несуществующую константу или переменную - компилятор ругнется.

    Компилятор не может вынуть из мозгов алгоритм программы, и проверить на соответствие ему. А при несоответствии ругнуться :) .
     
  9. Daniil

    Daniil Гуру

    И как решались задачи с динамическими массивами? Выделять фиксированный заранее большой массив? Перфекционист негодует, но можно ли об этом почитать?
    Тут недавно пролетала тема с malloc и free, там затихло быстро на стандарте MISRA C, но там я не увидел жесткого ограничения на динамические массивы.
     
  10. DetSimen

    DetSimen Guest

    Есть у avr прекрасная функция abort(); Вот её и делаем :)
     
  11. DetSimen

    DetSimen Guest

    тоись new, которая в глубине своей души тоже malloc(), оне тоже запретили.
    Не надо бояться играть с памятью МК, надо просто знать что ты делаешь. Например, класс String для новичков я бы запретил конкретно, насмерть, пока скилл не прокачают и не узнают, как он работает.
     
  12. SergeiL

    SergeiL Оракул Модератор

    Согласен!
    Не то, чтобы запретили, просто не рекомендовали использовать без особой необходимости.
    Выделение и освобождение динамической памяти, на микроконтроллере - в обычных задачах управления, требуется реально не часто. За исключением очередей сообщений.
    Поэтому в обычных ситуациях используются локальные буфера на стеке. Вышел из функции - буфера освободились.
    А для очередей сообщений, когда нет других выделений/освобождений памяти - тоже не проблема, все освобождается, и дефрагментация не происходит.
    Одним словом, для того, чтобы все надежно работало, нужно понимать как оно внутри работает!
     
  13. SergeiL

    SergeiL Оракул Модератор

    Плохое решение, если в этом решении дошло до abort();
    Дальше то что? ехать на место и потом - Reset или включение /выключение питания? Или ждать WDT?
    На PC, там пользователь хоть рядом, за монитором и клавиатурой :)
     
  14. DetSimen

    DetSimen Guest

    А што, вотчдог нынче отменили, а я проспал?
     
  15. SergeiL

    SergeiL Оракул Модератор

    Ну блин... Рестарт по WDT - это уже как-то совсем не айс.
    Для меня WDT - это ну питание как-то сбойнуло, ну в алгоритме что-то не доглядели.
    Одним словом костыль, сохраняющий жизнеспособность устройства.
     
    parovoZZ нравится это.
  16. SergeiL

    SergeiL Оракул Модератор

    Вот именно это именно меня и напрягало в LUA, когда под ESP8266 больше ничего не было.
    Все работает, код - 1 экран, вдруг хлоп - рестарт.
    Потом для ESP появилась поддержка Си, под Ардуино ИДЕ, попробовал - ни одного самопроизвольного рестарта, более чем за два с лишним года.
    Ну это уже нормально. Мой внутренний протекционист доволен. :)
     
  17. ИгорьК

    ИгорьК Гуру

    Ну да. Потому что память течет в результате отсутствия наблюдения за ней.
    Ну и потому что все сначала бывает кривовато. Луа на Си написан.
     
  18. timon

    timon Гик

    В Lua так же ) Таблица это указатель на данные и если сделать вот так:
    MyTable1 = {somedata}
    MyTable2 = MyTable1 вы просто меняете указатель.
    еще вот так можно MyTable2 = {MyTable1} )))

    MyTable1 = nil все освободили все что было )
     
  19. ИгорьК

    ИгорьК Гуру

    Кстати, ESP32 сейчас болеет теми же болезнями, что, ESP8266 несколько лет назад.
    Таблица - это сущность.
    Всякие переменные, что связаны с ней - указатели. Так точнее.
     
  20. Airbus

    Airbus Радиохулиган Модератор

    Новичёк спросил с чего начать?А ему сразу начинают советовать профессиональное оборудование и софт.Вот он и соскочил.Я бы тоже соскочил.
    - Как поменять предохранитель?
    - Учи матчасть дурак!