C ifstream从linux到arduino
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了C ifstream从linux到arduino,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1665字,纯文字阅读大概需要3分钟。
内容图文
原始代码
#include<iostream>
#include<fstream>
using namespace std;
int main()
{
ofstream arduino_output("/dev/ttyACM0");
ifstream arduino_input("/dev/ttyACM0");
int value;
string txt;
while(cin >> value){
arduino_output << value << endl;
arduino_input >> txt;//I never recieve the "OK" (Which I should get)
cout << txt;
}
arduino_input.close();
arduino_output.close();
return(0);
}
这是问题所在:
cin >> value;
arduino_output << value << endl;
arduino_input >> txt;//I never recieve the "OK" (Which I should get)
cout << txt;
但如果我这样做,它会起作用:
cin >> value;
arduino_output << value << endl;
for(int i=0;i<10000;++i)
for(int j=0;j<10000;++j){ //Waste a lot of time
++value;
--value;
}
arduino_input >> txt; //I always recieve the "OK"
cout << txt; //I can see the "OK"
那么如何让我的快速计算机能够读取arduino的慢速输出呢? (不使用for循环浪费时间)
这里有一些关于回调http://www.cplusplus.com/reference/ios/ios_base/register_callback/的内容,但我永远无法让它发挥作用.它说它支持3个事件,但它们都不是:“如果输入缓冲区不为空,则调用此函数”.
因为只要输入缓冲区不为空,最终解决方案就是回调函数.
可接受的解决方案是arduino版本“Serial.available()”的c等效版本.
另一个可接受的解决方案是强迫我不依赖于两个for循环的任何东西.如果这就是你的想法,那么3个for循环是不可接受的.
EDIT1:显示原始代码
EDIT2:我正在使用linux(lubuntu)
编辑3:有人在编写代码时感到困惑.奇怪.
解决方法:
你的问题很奇怪.一般来说,问题是较慢的一方无法读取更快的一方发送的内容.所以,这似乎你有一个更基本的问题.
如果arduino_output是串行端口(UART)的表示,我建议使用特定于平台的方式来访问它.在Windows上,有UART功能,在Linux上有termios(也可能在大多数其他POSIX上).这将为您提供一种控制通信参数的方法,并获取有关事件的信息和/或通知(包括奇偶校验/帧错误).
内容总结
以上是互联网集市为您收集整理的C ifstream从linux到arduino全部内容,希望文章能够帮你解决C ifstream从linux到arduino所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。