Скрыть объявление
На нашем форуме недоступен просмотр изображений для неавторизованных пользователей. Если Вы уже зарегистрированы на нашем форуме, то можете войти. Если у Вас еще нет аккаунта, мы будем рады, если Вы к нам присоединитесь. Зарегистрироваться Вы можете здесь.

Нужна помощь МНОГОПОТОЧНОСТЬ

Тема в разделе "Общие вопросы по esp8266", создана пользователем Krivoryk400854, 8 апр 2018.

  1. =AK=

    =AK= Гуру

    Сообщения:
    1.224
    Симпатии:
    100
    На немножко другом процессоре я это делал со средним потребляемым током 40 мкА. Использовал простенькую RTOS. Вместо WIFI был другой радиоканал, у которого потребление при передаче не 400 мА, как у ESP, а 40 мА. Десять раз разницы в токе передатчика, а средний ток в 500 раз меньше, чем вам хотелось бы получить. Причем не термистор мерял, а Pt100, два канала. И не просто термометр, а даталоггер. Год автономной работы от батарейки.

    И чё?
     
  2. Grem_line

    Grem_line Читатель

    Сообщения:
    57
    Симпатии:
    10
    Что Вы понимаете под работой на металле? В какой среде Вы ведете разработку?
    Напишите "Hello World" на металле. Какой объем образа, загружаемого во флэш, у Вас получится? Сравните с объемом Ваших объектных кодов до линковки ...
     
  3. nikolz

    nikolz Гуру

    Сообщения:
    4.715
    Симпатии:
    452
    пишу в UDK. объем кода будет не более 1 Кбайт (примерно столько получается размер rboot, который содержит deep-sleep и прерывание от pin и выводит сообщение)
    если тоже будет на SDK то во флеш загрузится примерно 200 Кбайт.
    Позже выложу, сейчас занят.
     
  4. Grem_line

    Grem_line Читатель

    Сообщения:
    57
    Симпатии:
    10
    Unreal Development Kit? Ничего себе Bare Metal Programming! :p
     
  5. nikolz

    nikolz Гуру

    Сообщения:
    4.715
    Симпатии:
    452
    вот прошивка Hello World
    размер 108 байт
     

    Вложения:

    • rboot.7z
      Размер файла:
      199 байт
      Просмотров:
      4
  6. Grem_line

    Grem_line Читатель

    Сообщения:
    57
    Симпатии:
    10
    Вы хотите сказать, что эту прошивку можно залить в чистую spi-flash, и она запустится и будет работать?
    Что она делает - выводит в UART текстовую строку?
     
  7. nikolz

    nikolz Гуру

    Сообщения:
    4.715
    Симпатии:
    452
    upload_2018-5-22_18-7-6.png
     
  8. rst

    rst Читатель

    Сообщения:
    253
    Симпатии:
    7
    А Вы не думайте, а откройте проект с обычным ISR, нажмите "скомпилить" и откройте листинг.
    А если обойтись без вызова функций в ISR, не думали?
    И если Вы не можете даже простейший ISR написать без "библиотек", ну что-ж - мне Вас жаль.

    Ну да ну да. Вы форумом не ошиблись? Здесь вроде не форум кухарок, чтобы нести ахинею. Я думаю здесь всё-таки есть люди, которые знают предмет не в теории.
    а) конечно забыли о вызове собственно прерывания (стекинг на входе в ISR PendSV);
    б) сохранение/восстановление контекста;
    в) а если задача использует FPU? ещё 33 регистра сохранить и 33 восстановить!;
    г) выход из ISR;
    д) а теперь самое главное, что конечно же забыли само собой: то что вы привели это только собственно переключение контекста; а теперь вопрос - в Вашем примере выбор задачи, следующей для выполнения (NextTask у Вас) где и кем выполняется? Чтобы переключиться на другую задачу ОС, надо её выбрать из списка готовых, активных, наиболее приоритетную, т.е. - просмотреть список задач, проанализировать их состояния, просмотреть таймеры ожидания этих зада и пр. И всё это называется решедулинг. Это где в Вашем примере? Конечно же забыли :cool:
    А говорили, что ОС там какую-то писали. Ну-ну! :D
    А эти операции как раз и будут составлять львиную долю затрат производительности МК в случае ОС. Теперь прикиньте сколько операций потребуется для периодического переключения между Вашими тремя задачами, которые Вы приводили выше, если частота SysTick скажем ==1КГц?
    Так вот: если то же самое реализовать на ISR-е (а тем более в стиле tick-less переключения), то затраты времени на такие переключения между "псевдо-задачами" будут на порядки меньше. Так как для входа/выхода в обычный ISR требуются только пункты а) и г) и всё! :eek:

    PS: И тот кусок что привели выше: зачем так много команд? Нафига повторно сохранять R0-R3,R12, которые и так записываются в стек при стекинге на входе в PendSV? Изучите готовые примеры прежде чем изобретать свой деревянный велосипед с квадратными колёсами. :)
     
    Последнее редактирование: 23 май 2018
  9. Grem_line

    Grem_line Читатель

    Сообщения:
    57
    Симпатии:
    10
    Ну вы, батенька и хам! Когда нечего сказать - переходите на оскорбления?
    В чем тут ахинея - это абсолютно рабочий фрагмент, реализующий переключение контекста.
    Выбор задачи - это совсем другое. Я не собираюсь тут выкладывать алгоритмы, но все отлично работает.
    При двух задачах - вообще не медленнее ваших ISR-костылей.
    Частота системного таймера 1 КГц, но вполне можно выставить и 20.
    Прерывание не вызывают! Это прерывание вызывает ISR. Такие оговорки вызывают сомнения в вашей компетентности.
    Смена контекста происходит не в ISR. После обработки любого прерывания вызывается диспетчер задач, который и осуществляет переключение.
    Кроме того, переключение происходит при попытке захвата закрытого семафора, при выполнении функций типа taskDelay и т.п.
    Ничуть не больше, чем в вашей ISR от таймера! Каждая из трех задач будет однократно активирована раз в 50, 70 и 90 мсек.
    Че? Вы сами-то поняли, что сказали? Когда задача хочет перейти из состояния ACTIVE в состояние DELAYED это просто вызов процедуры переключения контекста. Для ARM-процессора при вызове процедуры в стек вообще ничего не записывается, чтоб вы знали. Адрес возврата передается в LR.
    :mad:А вы попробуйте дизассемблировать код ISR. Или просто реализуйте ISR на ассемблере. Разглагольствовать все горазды, а разок попробовать - вся спесь куда-то девается.
     
  10. nikolz

    nikolz Гуру

    Сообщения:
    4.715
    Симпатии:
    452
    Вы немного отвлеклись от темы форума.
    Форум о ESP8266 это далеко не ARM.
    Если хотите сравнить давайте я напишу миганием лампочки без OC на металле, а Вы с RTOS и сравним опять же для ESP8266. Пишем на CИ.
    У меня будет не более 1000 байт у Вас не менее 200 000 байт. Это как аксиома.
    Далее вопрос о скорости исполнения. Я например на металле могу установить таймер с интервалом 2 мкс и успеть выполнить колбек.
    В Вашем варианте полагаю будет ограничение порядка 100 мкс. Но тут надо проверять.
     
  11. rst

    rst Читатель

    Сообщения:
    253
    Симпатии:
    7
    И опять пустой трёп. На конкретные замечания ничего не ответили (поняли ли вообще?) Опять переливание из пустого в порожнее...
    Вобщем: писать Вам что-то серьёзное рано ещё. Даже простые вещи понять не можете. Одно пустое надувание щёк и надёрганные откуда-то куски кода...
    Больше говорить с вами не о чем.
     
  12. rst

    rst Читатель

    Сообщения:
    253
    Симпатии:
    7
    Это бесполезно. Товарищ не понимает очевидных вещей. И откровенно несёт чушь.
    Шедулинг в РТОС - это не при чём конечно и его считать не надо при учёте затрат времени (хоть он и будет составлять львиную часть затрат времени в случае с ОС). Так можно любые факты подтасовать, ничего Вы ему не докажете. На все аргументы он плюёт и несёт ахинею. При этом слабо представляя себе предмет обсуждения. o_O
     
  13. =AK=

    =AK= Гуру

    Сообщения:
    1.224
    Симпатии:
    100
    Давайте сравним. Только мне ESP для сравнения не годится , потому что неохота ради такой мелкой ерунды осваивать SDK, а в среде Ардуино для ESP8266 нет нужной мне библиотеки setjmp. Давайте сравним на обычной плате ардуино. В нем нет 200к памяти, но мне и не надо. Я думаю мне 1к-2к хватит, чтобы опровергнуть вашу липовую "аксиому".

    Вот вам код: a_coos. Там в примере две задачи, одна зажигает светодиод раз в 0.65 сек, другая гасит тот же светодиод раз в 0.5 сек. Могу переписать пример на моргание 3-мя светодиодами в произвольном темпе. Pазмер кода практически не увеличится, займет это от силы пару минут.

    А вы не забудьте засечь время, сколько вы будете корячиться с написанием примера без RTOS.
     
    Последнее редактирование: 24 май 2018
  14. nikolz

    nikolz Гуру

    Сообщения:
    4.715
    Симпатии:
    452
    Хамить не надо.
     
  15. =AK=

    =AK= Гуру

    Сообщения:
    1.224
    Симпатии:
    100
    Вы посчитали хамством, что я привел пример укладывающейся в 1к? :D
     
  16. nikolz

    nikolz Гуру

    Сообщения:
    4.715
    Симпатии:
    452
    Выкладываю прошивку
    делает следующее
    1) мигает на пине 12(одна задача зажигает пин, другая гасит)
    2) выводит в UART сообщение о включении и выключении
    Размер прошивки 268 байт.
    Размер программы 15 операторов CИ, из них 2-print 2-gpio_out
    Затраченное время посчитайте сами.
    Можете сравнить с Вашим вариантом на RTOS.
     

    Вложения:

    • rboot.7z
      Размер файла:
      333 байт
      Просмотров:
      4
  17. nikolz

    nikolz Гуру

    Сообщения:
    4.715
    Симпатии:
    452
    нет, я посчитал хамством, что Вы "корячитесь"
    Вы забыли прибавить размер кода RTOS потому что Ваша программа без этого не работает а моя работает в 268 байт
     
  18. nikolz

    nikolz Гуру

    Сообщения:
    4.715
    Симпатии:
    452
    -----------------
    Прошивку в 1К покажите.
     
  19. =AK=

    =AK= Гуру

    Сообщения:
    1.224
    Симпатии:
    100
    С разным темпом? 0.65 сек - зажигает, 0.5 сек - гасит?


    Compiled.png
    1540 байт. В 2к уложился, 200к не понадобилось.

    Значит вам, говорите, в ESP8266 скорости и памяти не хватает, чтобы термометр сделать? Каждый байт и каждый такт приходится считать? :D
     
  20. nikolz

    nikolz Гуру

    Сообщения:
    4.715
    Симпатии:
    452
    Вы все гадаете?
    Просто покажите прошивку Будет точно известен объем кода.
     

Поделиться этой страницей