首页 文章

Arduino - 在后台使用串行打印

提问于
浏览
3

我想知道是否可以在不占用主程序的情况下在Arduino uno上处理Serial.println() .

基本上,我使用arduino为400V电容充电,主程序分别打开和关闭MOSFET晶体管上的栅极15和20微秒 . 我还有一个连接到电容器的分压器,我用它来测量电容器在用Arduino充电时的电压 . 我使用analogRead()来获取引脚上的原始值,将值乘以所需的比率,并尝试在每个周期结束时将该值打印到串行控制台 . 但问题是,为了使电容器快速充电,延迟需要非常小(在微秒范围内),并且串行打印命令需要比执行时间长得多,因此可以保持整个程序 .

因此,我的问题是,以某种方式可以使命令在不占用主循环的情况下执行类似于不同“线程”的操作 . 8位AVR是否能够做到这样的事情?

谢谢

2 回答

  • 2

    Arduino不支持多线程,但是有一些库可以让你做同等的事情:

    有关更多信息,您还可以访问此问题:Does Arduino support threading?

  • 1

    基本的Arduino串行打印功能是阻塞的,它们监视TX Ready标志然后加载下一个要发送的字节 . 这意味着如果您发送“Hello World”,只要加载UART以您选择的波特率发送10个字符,打印功能就会阻塞 .

    解决这个问题的一种方法是使用高波特率,这样您就不会等待很长时间 .

    更好的方法是使用中断驱动的传输 . 这样,当UART可以接受字符时,发送的每个字符都会缓冲要发送的数据字符串 . 发送数据的调用只加载TX缓冲区,将第一个字符加载到UART中以启动进程然后返回 .

    如果填充TX缓冲区,此缓冲方法仍将阻止 . send方法必须等待加载到缓冲区中 . 一个好的串行库可能会让您轻松检查缓冲区状态,以便您可以实现自己的额外缓冲 .

    这是一个声称是中断驱动的库 . 我自己没用过它 . 如果它适合您,请告诉我们 . https://code.google.com/p/arduino-buffered-serial/

相关问题