轮询 和 中断 的比较

我们首先区别一下中断和轮询

中断和轮询是  嵌入式 的两个基本的编程的思想和 概念



轮询:

while(1){
   
     if(按键按下){
                                                 
                 执行程序;
              }
 }

/*

周期连续 的检测外部事件的发生
消耗大量cpu的处理时间
轮询过程需要和其他代码结合
由于cpu可能需要处理其他事件(可能是无关紧要的),可能丢失关键事件
*/

轮询的坏处


周期连续 的检测外部事件的发生
消耗大量cpu的处理时间
轮询过程需要和其他代码结合
由于cpu可能需要处理其他事件(可能是无关紧要的),可能丢失关键事件

 

中断

Interrupt();//中断函数

while(1){
     
     //死循环代码
}

/*

由一种类似于硬件的,电路的机制来判断是否发生外部事件并通知Cpu
专用的中断服务程序来处理事件

*/

中断流程图

中断是一个需要cpu 立刻执行的内部/外部事件

内部事件;定时器定时时间到

               AD变换结束

外部按键:按键动作

                 发生外部通信

中断发生时,将主函数所用到的寄存器自动压入堆栈

中断执行完成之后

寄存器器出栈

 

### 定时器的基本工作原理 定时器在计算机系统中是一个非常关键的组件,广泛应用于单片机、操作系统、网络通信等领域。其基本原理是通过计数器对时钟信号进行计数,当计数值达到预设值(重装载值)时,触发某种行为,如中断或更新状态标志。 #### 轮询方式实现定时器 轮询是一种主动检测机制。在该模式下,CPU会周期性地检查定时器的状态寄存器,判断是否达到了设定的时间点。这种方式不需要中断控制器的支持,适用于简单的应用场景。 **特点:** - 实现简单,逻辑清晰。 - 占用CPU资源较多,因为需要不断查询状态。 - 不适合实时性要求高的场合。 ```c // 示例:使用轮询方式检测定时器溢出标志 while (1) { if (TIM_GetFlagStatus(TIMx, TIM_FLAG_Update) == SET) { // 执行定时任务 TIM_ClearFlag(TIMx, TIM_FLAG_Update); // 清除标志位 } } ``` #### 中断方式实现定时器 中断是一种被动响应机制。当定时器计数到预设值时,硬件会自动向CPU发送中断请求,CPU响应中断并跳转到相应的中断服务程序(ISR)执行任务[^1]。 **特点:** - 高效利用CPU资源,只有在事件发生时才处理。 - 提高了系统的实时性响应速度。 - 需要配置中断优先级中断服务函数。 ```c // 示例:配置定时器中断 void TIMx_IRQHandler(void) { if (TIM_GetITStatus(TIMx, TIM_IT_Update) != RESET) { // 执行定时任务 TIM_ClearITPendingBit(TIMx, TIM_IT_Update); } } // 在主程序中启用全局中断定时器中断 NVIC_EnableIRQ(TIMx_IRQn); TIM_ITConfig(TIMx, TIM_IT_Update, ENABLE); ``` ### 轮询中断区别与原理详解 | 特性 | 轮询方式 | 中断方式 | |------------------|----------------------------------|-----------------------------------| | **CPU利用率** | 较低,持续占用 | 较高,仅在事件发生时响应 | | **实时性** | 差,依赖轮询间隔 | 好,立即响应 | | **实现复杂度** | 简单,无需中断配置 | 相对复杂,需设置中断服务函数 | | **适用场景** | 简单控制、非实时任务 | 实时性强的任务、多任务调度 | 在嵌入式系统中,合理选择定时器的工作方式非常重要。例如,在STM32系列单片机中,定时器通常挂载在APB1或APB2总线上,具体频率取决于系统时钟配置[^2]。Java中的`Timer`类也提供了基于线程的定时任务调度机制,但其底层本质上也是通过线程休眠来模拟定时行为[^3]。 此外,在Web开发中,短轮询技术虽然也被称为“定时器”,但它实际上是客户端定期发起HTTP请求以获取服务器端数据更新的方式,这与硬件定时器完全不同,且存在资源浪费延迟问题[^4]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值