首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Arduino -在后台使用串行打印

Arduino -在后台使用串行打印
EN

Stack Overflow用户
提问于 2014-01-04 15:57:48
回答 3查看 5.9K关注 0票数 3

我想知道是否有可能在不阻塞主程序的情况下处理Arduino uno上的Serial.println()。

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

因此,我的问题是,在不阻塞主周期的情况下,在类似于不同的“线程”的情况下,如何才能让命令执行。8位AVR能做这样的事情吗?

谢谢

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-01-04 16:18:35

Arduino不支持多线程,但是有几个库允许您执行类似的操作:

有关更多信息,您还可以访问以下问题:Arduino支持线程处理吗?

票数 2
EN

Stack Overflow用户

发布于 2014-01-05 00:32:39

基本的Arduino串行打印函数都是阻塞的,它们观察TX就绪标志,然后加载下一个字节进行传输。这意味着,如果您发送"Hello“打印功能将阻塞,只要它需要加载UART发送10个字符,以您选定的波特率。

处理这一问题的一种方法是使用高波特率,这样你就不会等待太久。

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

如果您填充TX缓冲区,此缓冲区方法仍将被阻塞。send方法必须等待将更多的数据加载到缓冲区中。一个好的串行库可能为您提供一种检查缓冲区状态的简单方法,这样您就可以实现自己的额外缓冲。

这里有一个声称是中断驱动的库。我自己也没用过。如果对你有用的话请告诉我们。https://code.google.com/p/arduino-buffered-serial/

票数 2
EN

Stack Overflow用户

发布于 2020-04-10 18:59:18

我发现这篇文章:串行输出现在是中断驱动的。Serial.print()只是将数据填充到缓冲区中。必须发生中断,才能真正将数据移出。发布日期:2012年11月11日。我发现这是正确的,但如果您试图打印更多,那么内部串行缓冲区将保持它将锁定,直到缓冲区至少部分清空。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20923180

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档