news 2026/4/30 13:38:11

嵌入式: 为什么中断服务函数必须尽快执行完毕?

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
嵌入式: 为什么中断服务函数必须尽快执行完毕?

实验现象:

USART3_IRQHandler中的回调函数里存在打印日志操作(耗时多),当上位机一次性发送多个字节数据包时,会存在吞包行为如下如图所示

static void bl_rx_handler(const uint8_t *data, uint32_t size) { while (size--) { printf("recv: %02X\n", *data); // 打印日志 packet_buffer[packet_index++] = *data++; // 填入数据包数组 } } void USART3_IRQHandler(void) { if (USART_GetITStatus(USART3, USART_IT_RXNE) != RESET) { if (rx_callback) { uint8_t data = (uint8_t)USART_ReceiveData(USART3); rx_callback(&data, 1); } USART_ClearITPendingBit(USART3, USART_IT_RXNE); } } int fputc(int ch, FILE *f) { USART_SendData(USART1, (uint8_t)ch); while (USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET); return ch; } bl_usart_register_rx_callback(bl_rx_handler);

现象分析:

  • 串口3中USART_ReceiveData接收第一个字节数据后,RXNE变为0

  • 进入回调函数—打印日志,此时TDR读取第二个数据,RXNE为1……不断读取并覆盖DR

    • 打印日志即 串口1的波特率(115200)通常远低于 CPU 主频(168MHz)上位机以波特速率向单片机发送数据包,单片机以字节(1+8+1 位)的速率接收数据并进入串口中断10 / 115200 s内需要跳出中断,以接收下一个字节数据

串口接收数据流程:

移位寄存器 TDR → 数据寄存器 DR → 读取后 RXNE清零

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/30 13:38:04

League-Toolkit:英雄联盟全能工具箱的完整实用指南

League-Toolkit:英雄联盟全能工具箱的完整实用指南 【免费下载链接】League-Toolkit An all-in-one toolkit for LeagueClient. Gathering power 🚀. 项目地址: https://gitcode.com/gh_mirrors/le/League-Toolkit 想要提升英雄联盟游戏体验&…

作者头像 李华
网站建设 2026/4/30 13:36:45

抠图工具在线有哪些?2026年最好用的免费抠图工具推荐

最近被朋友问了好几次"有什么好用的抠图工具吗",说实话,现在的抠图工具真的太多了,但要说哪个最好用、最省事儿,我得好好掰扯掰扯。我自己用抠图工具已经有三四年的经验了,从最开始的Photoshop到后来的各种在…

作者头像 李华
网站建设 2026/4/30 13:36:05

如何3倍加速你的视觉模型:DCNv4可变形卷积终极实践指南

如何3倍加速你的视觉模型:DCNv4可变形卷积终极实践指南 【免费下载链接】DCNv4 [CVPR 2024] Deformable Convolution v4 项目地址: https://gitcode.com/gh_mirrors/dc/DCNv4 如果你正在寻找一种能显著提升计算机视觉模型性能的终极解决方案,那么…

作者头像 李华
网站建设 2026/4/30 13:35:52

MiMo开放平台 邀请链接

我在用 MiMo 开放平台体验 小米顶尖模型 MiMo V2.5等 ,通过我的邀请码注册为新用户,即得 10 API 体验金。邀请码:P6DQ9H。注册:https://platform.xiaomimimo.com?refP6DQ9H(注册后点控制台左下方入口填入,…

作者头像 李华
网站建设 2026/4/30 13:33:08

基于物理引导的FIR滤波和对比学习的小样本旋转机械故障诊断(PyTorch)

算法是一种基于可训练FIR滤波与多任务2分类学习的旋转机械故障诊断方法,通过设计具有明确频域物理意义的带通FIR滤波器组,结合门控机制与混合权重自动筛选关键故障频率分量;采用一对多2分类学习器结构为每个故障类别提取专属特征,…

作者头像 李华