您好!
我需要一些有关如何同步中断和主代码的帮助。
我有一个 UART 连接、在主循环中我处理该数据。 每当一个数据出现时、它就会存储在中断时的环形缓冲器上。 主循环会一直运行、如果环形缓冲区上有新数据、则会处理该数据。 我想实施 LPM、但我看到它存在一些风险。
根据以下代码、如果数据是在"if (get_size_ring _buffer ()< 1)"之后以及在执行此命令之前从 UART 发出的、则"__bis_SR_register (LPM3_bits | GIE)";它将处于 LPM 模式、但环形缓冲区上有需要处理的数据。 如何解决此问题? 有什么建议吗?
while (1) { if (get_size_ring 缓冲区()>0) { process_data(); } if (get_size_ring 缓冲区()< 1) { _bis_SR_register (LPM3_bits | GIE); { #pragma vector=USCI_A1_vector __interrupt void USCI_A1_ISR (void) { uint8_t 数据; 开关(__evo_in_range (UCA1IV、USCI_UART_UCTXCPTIFG)) { USCI_UART_UCRXIFG 案例: 数据= EUSCI_A_UART_receiveData (EUSCI_A1_BASE); 环缓冲区放置(Rb、数据)(&Data) LPM3_EXIT; 中断; } }