|
|
一个简单的演示实验:
在nRF24L01的RX端设置了一个低电平触发的0号中断。现在的问题是设置了中断之后连setup函数都跑不完就死机了
- #include "Mirf.h"
- #include "nRF24L01.h"
- #include "MirfHardwareSpiDriver.h"
- #include "SPI.h"
- int led = 3;
- void setup()
- {
- attachInterrupt(0,gotData, LOW);
- Serial.begin(9600);
- Mirf.spi = &MirfHardwareSpi;
- Mirf.init();
- Mirf.config();
- Mirf.payload = 4;
- Mirf.setRADDR((byte *)"1clie");
- Serial.println("init ok");
- }
- void loop()
- {
- Serial.println("waiting");
- delay(1000);
- }
- void gotData()
- {
- if(Mirf.dataReady())
- {
- //Serial.println("...");
- digitalWrite(led , HIGH);
- delay(500);
- digitalWrite(led,LOW);
- }
- }
复制代码
即串口连init ok都不输出了。
为了找到故障,将所有与Mirf库相关的代码注释掉
- /*
- #include "Mirf.h"
- #include "nRF24L01.h"
- #include "MirfHardwareSpiDriver.h"
- #include "SPI.h"
- */
- int led = 3;
- void setup()
- {
- attachInterrupt(0,gotData, LOW);
- Serial.begin(9600);
- /*
- Mirf.spi = &MirfHardwareSpi;
- Mirf.init();
- Mirf.config();
- Mirf.payload = 4;
- Mirf.setRADDR((byte *)"1clie");
- */
- Serial.println("init ok");
- }
- void loop()
- {
- Serial.println("waiting");
- delay(1000);
- }
- void gotData()
- {
- /*
- if(Mirf.dataReady())
- {
- //Serial.println("...");
- digitalWrite(led , HIGH);
- delay(500);
- digitalWrite(led,LOW);
- }
- */
- }
复制代码
依然是没有办法输出init ok到串口,也就是说加上中断就死机了。
继续,将attachInterrupt(0 , gotData , LOW)这一句注释掉,一切正常。
敢问小弟这里的中断有什么不正确的地方吗?
或者大家来讨论一下Arduino 使用外部中断时需要注意的地方吧? |
|