为什么Arduino在进入初始化功能之前会重新启动
Why does the Arduino restarts before entering initialization function?
我已经伤透脑筋一段时间了。在对SAIAI_DEV对象处理数据包数据的方式进行一些更改之前,我能够运行得非常好(除了需要进行更改的确认处理中的一个错误)。然而,现在设备在输出"About to Init"(我有另一个print语句作为Init函数的第一行)后重新启动。此外,在没有1秒延迟的情况下,在行结束之前,"上一个函数0"处会发生挂起。我曾尝试将动态内存使用率(将东西放入PROGMEM,减少功能和状态计数)降低到34%左右,这表明存在非内存问题,但也存在同样的问题。我也没有明确使用中断。
设置代码:
void setupDevice(){
SoftwareSerial* xbeeSerial = new SoftwareSerial(RX_PIN,TX_PIN);
Serial.begin(BAUD);
xbeeSerial->begin(BAUD);
comm.init(xbeeSerial,&Serial,ENDNODE);
comm.report();
Serial.println(F("Past report."));
sensor.read22(SENSOR_PIN);
Serial.println(F("Past Sense."));
sprintf(states[0].name, "%.14s", "Temperature");
itoa((int)(sensor.temperature_f*10),states[0].value,63);
states[0].number = 0;
states[0].type = FLOAT;
states[0].divisor = 1;
Serial.println(F("Past State 0."));
delay(1000);
sprintf(states[1].name, "%.14s", "Humidity");
itoa((int)(sensor.humidity*10),states[1].value,63);
states[1].number = 1;
states[1].type = FLOAT;
states[1].divisor = 1;
Serial.println(F("Past State 1."));
delay(1000);
sprintf(functions[0].name, "%.79s", "Toggle LED");
functions[0].num_parameters = 0;
functions[0].function_pntr = &toggleLED;
Serial.println(F("Past Function 0."));
delay(1000);
sprintf(functions[1].name, "%.79s", "Change Temperature Unit");
functions[1].num_parameters = 1;
functions[1].function_pntr = &changeUnit;
functions[1].params = &func1_param;
Serial.println(F("Past Function 1."));
delay(1000);
sprintf(functions[1].params[0].name, "%.79s", "Unit of Temperature");
functions[1].params[0].type = CHAR;
sprintf(functions[1].params[0].value, "%.64s", "F");
Serial.println(F("Past F0 Param 0."));
delay(1000);
sprintf(info.name, "%.79s", "Smart Sensor");
info.num_states = 2;
info.num_functions = 2;
info.states = states;
info.functions = functions;
Serial.println(F("Info"));
delay(1000);
Serial.println(F("About to Init."));
delay(1000);
dev.init(&comm,&info);
}
// the setup routine runs once when you press reset:
void setup() {
Serial.println(F("nEnter Setup."));
temp_unit = 'F';
pinMode(LED_PIN, OUTPUT);
setupDevice();
count = millis();
}
Init函数:
void SAIAI_DEV::init(XBEE* xb_dev, device_info* info){
comms->serial->println( F("Init Start.") );
delay(1000);
bool success = false;
comms = xb_dev;
device = info;
while( !success ){
success = true;
memset(comms->rx_pkt->cmdData,0,95);
memset(ack_buffer, 0, PROTOCOL_SIZE);
memset(data, 0, PROTOCOL_SIZE);
wait_for_coordinator();
success &= transmit_init();
if(success) success &= transmit_identity();
if(success) success &= transmit_states();
if(success) success &= transmit_functions();
if(success) { success &= finish_init();}
}
comms->serial->println(F("Init Done!"));
}
任何想法都将不胜感激。如果你需要更多的来源,我很乐意提供。
显然,我只需要在另一个上下文中(我自己的帖子)来看待它。我意识到我在分配之前给一名通信成员打了电话。我把这个问题留在这里作为一个答案,因为我觉得奇怪的是,在一个完全不同的函数中不正确地调用println会在调用该函数之前导致问题。如果你的代码挂在一个奇怪的地方,将来需要注意的事情。
相关文章:
- WINAPI 注册应用程序重新启动时不清除打开的套接字
- 如何使用 ctypes 停止和重新启动从 Python 运行的C++代码
- 重新启动后,线程无法在 while 循环中再次运行
- 在程序和基于文本的游戏和C++内重新启动程序
- 在程序/基于文本的游戏/C++内重新启动程序
- 为什么使用 exec() 重新启动程序不能正常工作?
- 即使在我关闭应用程序并重新启动它后,如何保持我的 ID 被阻止?
- 有没有办法在不重新启动或注销的情况下加载游标?
- IO服务重新启动后,Boost最后期限计时器持续触发
- 在C++中重新启动随机数序列
- 稍后在构造函数中重新启动异常指令删除此指令
- 如何获取代码::块以在代码::块重新启动后保持库的配置?
- 我想在我设置的几秒钟后重新启动我的程序
- 如何使重新启动此循环,当用户输入 1 时,并在 0 时停止
- UDP 服务器每 5 秒重新启动一次
- 有没有办法检查内存缓存是否已重新启动?
- (Windows 10) 在不更新的情况下重新启动C++
- Live555MediaServer 在每个新连接时重新启动流。为什么将"reuseSource"设置为 true 无法按预期工作?
- OpenGL和SFML时钟未正确重新启动
- 为什么Arduino在进入初始化功能之前会重新启动