【问题标题】:Problem with machine.Timer() and _thread on Raspberry Pi Pico (RP2040)Raspberry Pi Pico 上的 machine.Timer() 和 _thread 问题 (RP2040)
【发布时间】:2023-01-03 22:52:13
【问题描述】:

我正在尝试在一个线程上运行 balance() 函数并在另一个线程上使用 Timer。这两种方法单独运行时都可以正常工作,但是当我尝试同时使用它们时,定时器调用的 issr() 函数在几次调用后就停止工作。 Raspberry 的 REPL 没有错误。 motor.do_step() 方法只是在调用时将 Pin 值从 0 更改为 1。任何想法是什么问题?

def issr(timer):
    global motor1, motor2, i
    motor1.do_step()
    motor2.do_step()


def balance():
    while True:
        global motor1, motor2
        motor1.set_speed(1000)
        motor2.set_speed(1000)


_thread.start_new_thread(balance, ())

tim = Timer()
tim.init(freq=3000, mode=Timer.PERIODIC, callback=issr)

【问题讨论】:

  • 你应该将你的global语句从while循环中移开,并有一些睡眠平衡功能
  • 我遇到了类似的问题。我刚刚在 MicroPython 论坛 Timer gets stuck when thread is running - RP2040 上发布了一个简单的问题。到目前为止,没有解决办法。

标签: micropython stepper raspberry-pi-pico rp2040


【解决方案1】:

RP2040 和 micropython 中的线程显示了几个错误,以及一些带有计时器的函数。 我建议使用 usayncio,或者在定时器的情况下,生成一个 deinit(),执行一个小任务,然后再次 init()。 我在尝试保存文件时已经遇到问题,如果计时器在任务中间启动,它会在文件和整个系统中崩溃,为了解决系统崩溃等问题,我使用了 WDT

【讨论】:

    猜你喜欢
    • 2021-09-10
    • 2021-11-16
    • 1970-01-01
    • 2022-09-25
    • 2022-08-14
    • 2018-01-08
    • 1970-01-01
    • 2022-11-05
    • 2022-11-22
    相关资源
    最近更新 更多