Многопоточность на AVR, это возможно?

Тема в разделе "Микроконтроллеры AVR", создана пользователем Алексей132, 11 июл 2019.

  1. parovoZZ

    parovoZZ Гуру

    В ядро модуль воткни.
     
  2. parovoZZ

    parovoZZ Гуру

    Да мне бы 16 освоить)) Потом можно и 32.
     
  3. parovoZZ

    parovoZZ Гуру

    Мяч есть. Поля нет.
     
  4. parovoZZ

    parovoZZ Гуру

    Задача решается кольцевым буфером и приоритетными прерываниями, которые в AtXMega есть. RTOS здесь не поможет никак, а только во вред.
     
  5. Делал на разберри, на осцилограффе смотрел, в результате таймер (программа на python - команда - sleep) на микросекунды был не стабилен, может, конечно, что и напутал
     
  6. спасибо, буду пытаться
     
  7. Igor68

    Igor68 Гуру

    Да какая Вам разница? Просто привыкнете к другой разрядности регистров и всё. Все равно ассемблер не юзаете. Зато под разрядность памяти легче подстроиться - иногда надо. Напимер:
    Код (C++):
    int a;
    По умолчанию будет 32 бита, а память 16-битная. Значит выгоднее будет:
    Код (C++):
    int16_t a;
    Что бы обращаться 1 раз для доступа к переменной, а не два. Если переменная укладывается в размерность 16 бит. Ну ещё и выравнивание адресов.
     
  8. parovoZZ

    parovoZZ Гуру

    Я всегда пишу int16_t, int8_t и т.д. чтобы было наглядно разрядность. А вот конфигурационные регистры в 16 бит в мсп 430 - это необычно для меня. А в 32 битных мк все юзают фреймворки и разрядностью явно не видна. Это мнение дилетанта/ни разу не программиста)
     
  9. b707

    b707 Гуру

    Судя по описанному, многопоточность здесь даже близко не стояла.
    SPI опрашиваем в основной программе, импульсы на дачики формируем в прерывании по таймеру - и все будет замечательно работать на любой дохлой атмеге.

    Нет, желание освоить новое - это конечно похвально, но тут я польностью солидарен с DetSimen - ТС понадобилась многопоточность только потому, что он не умеет писать неблокируюшие процедуры водном потоке. Этохорошо видно по попыткам генерить сигналы путем полбора парметров в каком-то цикле...

    ТС не особо делится сутью своей проблемы (видно стыдно, что не может решить простенькую задачку :) - но сдается мне, что как раз RTOS ему не поможет. Для асинхронной генерации точных микросекундных интервалов RTOS не подходит в принципе - в модели RTOS переключение между ветками в строгое время не гарантируется.

    RTOS вообще не для риал-тайм программ - RTOS это костыль для ленивых программистов. Отлично подходит для решения новичковой задачи "помогите обьединить два скетча" - позволяет не заморачиваться написание красивого эффективного кода, а просто взять два говно-скетча из инета с делееми и запустить их одновременно в двух ветках...
     
    SergeiL, ИгорьК и Igor68 нравится это.
  10. Igor68

    Igor68 Гуру

    Я это только к тому, что если разрядность памяти сообветствует разрядности переменной, то обращение к ней(переменной) будет однократным, что сократит время выполнения именнов этом месте. А так приципиально, без разницы.
     
  11. Igor68

    Igor68 Гуру

    Мало того, что про RTOS с переключением... так ещё и само прерывание обычное, время входа в которое не фиксированно по тактам. Да ещё и зависит от типа операции процессора, в момент выполнения которого прерывание стало активным. И пока выполнение текщей команды не завершено прерывание не возникнет - вот и нефиксированное время.
     
  12. Asper Daffy

    Asper Daffy Иксперд


  13. спасибо, узнал новое, буду изучать!!
     

  14. Ваши советы дали результат, спасибо. Учить хочу, просто надо знать что.
    Не сочтите за наглость, я раньше сидел на питоне, там таких вопросов просто нет.
    Не подскажите, а как узнать, какую величину получил по spi мой atmel (после того, как я залил hex файл)?.
    Сейчас я смотрю через usb, написал код и атмел отправляет дату через uart (далее преобразователь и смотрю на компьютере), но uart очень затратен, программа работает уже не так. Можно еще вывести на дисплей. Как в таких случаях поступают более технически грамотные люди? Вообще вопрос и на будущее, так как порой это нужно при разных обстоятельствах.
     
  15. SergeiL

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

    Под RTOS еще писать нужно уметь, чтобы все работало как задумано.
    Обычно же не независимые задачи запускаются. Задачи еще должны между собой грамотно взаимодействовать, отдавая ресурсы, в период ожидания событий.
     
  16. parovoZZ

    parovoZZ Гуру

    Это как так - реал тайм оперэйшн систем не для реал-тайм программ?
     
  17. parovoZZ

    parovoZZ Гуру

    Величину чего? По интерфейсу SPI бегают байты. Чтобы смотреть, что там бегает, нужен ЛА. Ну или второй мк, подвешенный на SPI в режиме вечного слейва (чтобы не грузить лишним целевой мк). Как из мк сделать простейший гейт из SPI в UART и далее через com в цомпкутер - я здесь писал.
     
  18. b707

    b707 Гуру

    уточните - что значит "залил HEX файл" У вас исходника программы, читающей SPI - нет что ли?
    А если есть - то да, выводите любым доступным способом - в УАРТ, на дисплей или отправляете по другой шине на другой МК
    да. УАРт не очень подходит для микросекундных интервалов :) Испольуйте его только для отладки, в готовом коде выключите
     
  19. b707

    b707 Гуру

    похоже мы с Дедом угадали... никакая многопоточность и авр32 тут не нужны.
    Алексей - начните читать про аппаратные таймеры в обычном ардуино - насколько я вижу по тому куцему ТЗ. который вы предоставили -это полностью решит вашу задачу.
     
  20. parovoZZ

    parovoZZ Гуру

    Не понимаю. ВАШПЭ. Кинуть в регистр UART байт - это прям так много тактов нннада? Вроде всего один. Дальше UART делает всё сам, без участия ядра.