首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Arduino中断处理

Arduino中断处理
EN

Stack Overflow用户
提问于 2012-10-22 17:29:00
回答 1查看 2.7K关注 0票数 1

背景

我需要一个在"Arduino兼容“的chipKit UNO32板上运行的数据日志应用程序,并带有一个连接的传感器。数据应该记录到在"Arduino无线SD屏蔽“上找到的SD卡。传感器通过I2C连接。

我的问题是,当我使用Arduino SD库时,编写速度很慢:每次打印()操作25 ms,与我的传感器的100-800 Hz数据速率相比,最高为40 Hz,这是可笑的。

我的错误解决方案

幸运的是,传感器配备了可存储32个传感器值的片上FIFO。这意味着我可以去至少200赫兹没有任何麻烦,因为填充FIFO的时间远远大于写到卡的时间。但我仍然很想达到至少400 the,所以我想我应该有以下设置:

  1. 告诉传感器将数据放入FIFO中
  2. 当FIFO几乎满时,传感器触发一个中断(传感器这样做,它就能工作,我可以捕捉到中断)。
  3. 当Arduino接收到中断时,它会轮询传感器的数据(通过I2C),并将数据存储在SRAM中的缓冲区中。
  4. 当SRAM缓冲区已满时,将其内容写入SD卡.

不幸的是,这似乎不起作用,因为处理I2C使用中断的Arduino Wire库无法从中断处理程序中调用。我试过了,它冻结了微控制器。

我的问题

似乎还有其他不依赖中断的Arduino I2C库。我该试试那条路吗?

还是从一开始我的思维方式(在ISR中抓取大量数据)是不好的?我还有别的办法吗?

EN

回答 1

Stack Overflow用户

发布于 2012-10-25 08:28:02

只需使用中断设置一个标志并完成ISR。从主循环执行调用I2C,而不是直接从ISR调用。

代码语言:javascript
复制
boolean fifoFull = false;

void fifoISR() {
    fifoFull = true;
}

void loop() {
    if(fifoFull) {
        // Do I2C
        fifoFull = false;
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13016607

复制
相关文章

相似问题

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