Uasyncio.Событие не возобновляет основной цикл сразу после установки на Raspberry Pi PicoPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Uasyncio.Событие не возобновляет основной цикл сразу после установки на Raspberry Pi Pico

Сообщение Anonymous »

Я программирую на Micropython для Raspberry Pi Pico. В моем основном цикле я жду события uasyncio.Event, которое я успешно установил из контекста прерывания.
Я ожидал, что код приостановится, а затем возобновится вскоре после установки события, но вместо этого :
  • Если событие уже было установлено, оно продолжается, как ожидалось.
  • Если событие не было установлено заранее, и там если другие задачи не выполняются, программа завершается без предупреждения.
  • Если я создайте задачу Keep_alive, которая просто зацикливается, основной цикл возобновится с ожидания события непосредственно перед выходом задач Keep_alive из спящего режима.
Конечно, установка Очень короткий цикл сна Keep_alive сводит к минимуму проблему, но это очень хакерски.
Такое ощущение, что ожидание события не поддерживает цикл само по себе, а установка события не возобновит выполнение, если что-то еще не разбудит цикл.
(оба из которых для меня были неожиданными)
Не следует ли мне для начала использовать события?
Наконец, я также попытался вызвать пробуждение, создав тривиальную задачу из контекста IRQ с использованием расписания. , но задача даже не запустится, пока цикл сам не пробудится из уже существовавшего сна.
В следующем коде между «установкой» и «завершением» проходит 4 секунды. Я считаю, что это связано с тем, что код основного цикла возобновляется не тогда, когда установлено событие, а когда планировщик uasyncio просыпается для задачи Keep_alive. Кроме того, пробуждение никогда не выводится на печать, поскольку до этого возобновляется основной цикл и завершается.
import uasyncio
from machine import Timer

async def keep_awake():
while True:
print("awake")
await uasyncio.sleep(5)

def set(_=None):
global event
event.set()
print("set")

async def main():
print("start")

# The time will call set() after a second
Timer(-1).init(mode=Timer.ONE_SHOT, period=1000, callback=set)

print("waiting...")
global event
await event.wait()
print("end")

event = uasyncio.Event()
uasyncio.create_task(keep_awake())
uasyncio.run(main())



Подробнее здесь: https://stackoverflow.com/questions/792 ... ry-pi-pico
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • NRF24L01 Связь между Raspberry Pi 4 и Raspberry Pi Pico (Micropython) не работает
    Anonymous » » в форуме Python
    0 Ответы
    3 Просмотры
    Последнее сообщение Anonymous
  • NRF24L01 Связь между Raspberry Pi 4 и Raspberry Pi Pico (Micropython) не работает
    Anonymous » » в форуме Python
    0 Ответы
    4 Просмотры
    Последнее сообщение Anonymous
  • MySQL-репликация | BinLogStreamReader не возобновляет работу с последней позиции (log_file, log_pos не работает)
    Anonymous » » в форуме Python
    0 Ответы
    11 Просмотры
    Последнее сообщение Anonymous
  • Coroutine_handle возобновляет вызов из потока против jthread
    Anonymous » » в форуме C++
    0 Ответы
    10 Просмотры
    Последнее сообщение Anonymous
  • SetFixedLengthStreamingMode Java HttpsUrlConnection не возобновляет загрузку файлов
    Anonymous » » в форуме JAVA
    0 Ответы
    13 Просмотры
    Последнее сообщение Anonymous

Вернуться в «Python»