MCU · 2023年7月31日

nordic异常重启

1.打开了串口日志

即在sdk_config.h中打开了UART日志输出,并且的代码还有定时器,还有一些ADC之类的中断函数中的也打印了日志,
那么恭喜你,当日志在main函数中的while循环中输出时,再跳到中断中时,这时你的设备就会异常重启了。

//==========================================================
#ifndef NRF_LOG_BACKEND_UART_ENABLED
#define NRF_LOG_BACKEND_UART_ENABLED 1
#endif
// <o> NRF_LOG_BACKEND_UART_TX_PIN - UART TX pin 
#ifndef NRF_LOG_BACKEND_UART_TX_PIN
#define NRF_LOG_BACKEND_UART_TX_PIN    22
#endif

// <o> NRF_LOG_BACKEND_UART_BAUDRATE  - Default Baudrate
 
// <323584=> 1200 baud 
// <643072=> 2400 baud 
// <1290240=> 4800 baud 
// <2576384=> 9600 baud 
// <3862528=> 14400 baud 
// <5152768=> 19200 baud 
// <7716864=> 28800 baud 
// <10289152=> 38400 baud 
// <15400960=> 57600 baud 
// <20615168=> 76800 baud 
// <30801920=> 115200 baud 
// <61865984=> 230400 baud 
// <67108864=> 250000 baud 
// <121634816=> 460800 baud 
// <251658240=> 921600 baud 
// <268435456=> 1000000 baud 

#ifndef NRF_LOG_BACKEND_UART_BAUDRATE
#define NRF_LOG_BACKEND_UART_BAUDRATE 30801920
#endif

// <o> NRF_LOG_BACKEND_UART_TEMP_BUFFER_SIZE - Size of buffer for partially processed strings. 
// <i> Size of the buffer is a trade-off between RAM usage and processing.
// <i> if buffer is smaller then strings will often be fragmented.
// <i> It is recommended to use size which will fit typical log and only the
// <i> longer one will be fragmented.

#ifndef NRF_LOG_BACKEND_UART_TEMP_BUFFER_SIZE
#define NRF_LOG_BACKEND_UART_TEMP_BUFFER_SIZE 64
#endif

// </e>

// <e> NRF_LOG_ENABLED - nrf_log - Logger
//==========================================================
#ifndef NRF_LOG_ENABLED
#define NRF_LOG_ENABLED 1
#endif
// <h> Log message pool - Configuration of log message pool

2.while循环中没有延时

一般不带操作系统的MCU程序中,都会有一个死循环在运行,而死循环中就是你要运行的业务,
而当你的循环中没有延时之类的处理时,就是你在操作系统中写了一下如下的类似程序

int main(){
	
    while(1){
    
    }
}

运行此类程序,你可以在linux下,用top命令看到你CPU的占用率,基本处理90%以上
而在MCU中运行此此类程序一样的道理,在MCU占用率很高的时候,中断响应就会比较慢,而且当BLE连在外设上时,此时
BLE需要很快的响应的BLE中断,如果没有响应,或者响应的很慢,就会导致超时,那么超时,就直接导致的连接断开,那么你BLE很可能会复位,但也有可能进入不知名的状态,需要你手动复位。

3.程序异常

最常的异常,就是程序异常,导致设备复位,这种情况下,很多人都会怀疑数据速率,我大概测过极限速率,100ms发一包数据,每包字节在128以内,这个保持连接不断,是没有问题的。

打赏作者