python – 如何实现一个C函数作为等待(协同程序)
环境:C和micropython虚拟机中的协作RTOS是其中的任务之一.
为了使VM不阻止其他RTOS任务,我在vm.c:DISPATCH()中插入RTOS_sleep(),以便在执行每个字节码后,VM放弃对下一个RTOS任务的控制.
我创建了一个uPy接口,使用生产者 – 消费者设计模式从物理数据总线异步获取数据 – 可以是CAN,SPI,以太网.
在uPy中的用法:
can_q = CANbus.queue()
message = can_q.get()
C中的实现是这样的,can_q.get()不阻止RTOS:它轮询C队列,如果没有收到消息,它调用RTOS_sleep()给另一个任务机会填充队列.事情是同步的,因为C队列仅由另一个RTOS任务更新,而RTOS任务仅在调用RTOS_sleep()时切换,即协作
C实现基本上是:
// gives chance for c-queue to be filled by other RTOS task
while(c_queue_empty() == true) RTOS_sleep();
return c_queue_get_message();
虽然Python语句can_q.get()不会阻止RTOS,但它会阻止uPy脚本.我想重写它,所以我可以使用它与异步def,即协同程序,并让它不阻止uPy脚本.
不确定the syntax但是这样的事情:
can_q = CANbus.queue()
message = await can_q.get()
题
如何编写C函数以便我可以等待它?
我更喜欢CPython和micropython的答案,但我会接受仅限CPython的答案.