设想:
- 树莓派 3 B 型
- 通过 USB 连接的自适应模块化 ECU(将自身呈现为大容量存储设备,实际上是 2,在本例中为 sda 和 sdb)
我只是使用 fopen() 打开 /dev/sda 进行读取,我寻找到我想要读取的位置并读取了 2048 个字节。然后我重新寻找我之前寻找的位置并再次读取该数据。
在我第一次阅读时,我得到了新鲜、正确的数据。在随后的每次读取中,我一遍又一遍地得到相同的数据。在第一次读取后,它不会尝试再次轮询设备(因为它有一个活动灯),但是当我杀死我的应用程序(ctrl+c)时,我看到活动灯疯狂闪烁然后停止。
我认为这是我的代码的缓冲问题(我从 ifstream 开始,并尝试过 fopen() 和 open(),都一样)并尝试了各种不同的禁用缓冲的方法(即 setvbuf())但我'我仍然没有得到新的数据。
如果我再次关闭并打开文件,那么我会得到新数据,但这是一个非常缓慢的过程(我只能得到大约 10-12 个样本/秒)。
请记住,这不是已安装的设备,它只是作为存储设备呈现,我直接从其块设备中读取。
我将相同的代码移植到 Windows 并且它可以工作,所以我不相信它是我的代码,而是 Linux 中的某些东西。
任何帮助将不胜感激。