上溢与下溢

堆栈的上溢与下溢

由于堆栈区域是在堆栈定义时就确定了的,因而堆栈工作过程中有可能产生溢出。堆栈溢出有两种情况可能发生:如堆栈已满,但还想再存入信息,这种情况称为堆栈上溢;另一种情况是,如堆栈已空,但还想再取出信息,这种情况称为堆栈下溢。不论上溢或下溢,都是不允许的。因此在编制程序时,如果可能发生堆栈溢出,则应在程序中采取保护措施。这可以通过给SP规定上、下限,在进栈或出栈操作前先做SP和边界值的比较,如溢出则作溢出处理,以避免破坏其他存储区或使程序出错的情况发生。

 

缓冲区的上溢和下溢

上溢就是缓冲器满,还往里写;下溢就是缓冲器空,还往外读.

使用硬件相似的数据处理.一般都是数据进来,处理后立即发出去的形式.所以一般有一个数据进,一个数据出,2个接口.

硬件处理基本都要求实时.数据进来,处理之后马上发处理,这个时间要求非常短,一般要求控制在好多毫秒以内,才能达到实时的要求.一般硬件每秒钟能够处理的数据大小,在设计的时候就固定了.不能像软件那样,可以通过增加CPU来提升处理能力.而且硬件的缓存的容量也是在设计的时候就固定了,不能像软件那样,随意申请内存来用.
所以硬件的缓存都不会太大.缓存的数据太大,会造成等待数据处理延时太高.达不到实时的要求.
硬件每秒能够处理的数据也是固定的.
硬件在处理数据的时候,一般是要等待缓冲区有足够的数据可以处理,然后开始处理.
如果数据输入的速度,固定保持在理想状态,那么缓冲区就会一直有数据供给硬件平稳的进行处理.
输入一直输入数据,硬件一直有数据在处理,输出一直在输出处理好的数据.缓冲区的数据容量,一直保持在某个范围.

如果指数据发送太快,硬件处理不过来,缓存已经装不下那么多数据,开始丢弃这些数据,放弃处理.这就是指上溢.
如果数据发送太慢,缓冲区的数据都处理空了,输入数据还没过来,硬件还在等待缓冲区有足够数据可以处理,输出接口就在要求发送处理好的数据出去,就是指下溢.

  • 21
    点赞
  • 66
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
STM32F103的TIM2定时器是一种基于32位计数器的定时器,它可以用于执行定时操作或生成特定的PWM信号。 上溢下溢是指计数器在递增过程中达到最大值或最小值后继续增加或减少的情况。对于STM32F103的TIM2定时器而言,计数器的最大值为2^32-1,最小值为0,当计数器值从最大值增加到0,或者从最小值减少到最大值时,便产生了上溢下溢事件。 通过配置相关中断使能位,我们可以在计数器上溢下溢的时候触发中断,从而执行特定的操作。中断的触发可以通过以下步骤实现: 1. 配置TIM2的计数值和预分频值,决定计数器的递增速度。 2. 配置TIM2的中断使能位,使能上溢下溢中断。 3. 配置NVIC使能TIM2中断,相关中断向量表使能TIM2中断。 4. 实现中断服务程序(ISR),在中断发生时执行特定的操作。 例如,如果我们希望每当TIM2的计数器发生上溢时触发中断,并在中断服务程序中执行某些操作,可以按照以下步骤进行配置和实现: 1. 配置TIM2的计数值和预分频值,例如将计数器配置为每秒递增1次。 2. 开启TIM2的上溢中断使能位。 3. 开启中断控制器使能TIM2中断。 4. 编写TIM2的中断服务程序,例如在上溢中断发生时,执行某些操作。 总之,通过配置和使用STM32F103的TIM2定时器的上溢下溢中断,我们可以实现按需定时操作或生成特定的PWM信号。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值