打印
[STM32F0]

FreeRtos硬件定时器中断变慢

[复制链接]
5537|12
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
maiweiqi|  楼主 | 2016-1-21 14:41 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
请问,我在freertos中配置了TIM17定时器产生50us的时基,但跑起来时发现实际的中断时间是8ms。
这是什么回事?同一样的代码,我用裸奔的程序测试的确是50us的。
沙发
airwill| | 2016-1-21 14:46 | 只看该作者
我估计是你是通过中断服务里检测中断时间的吧, 应该是中断过于频繁或或中断服务的负荷过重, 拖了时间了.
如果是这样, 那这是个严重不可靠的软件设计, 赶紧想办法降低中断服务的工作量.

使用特权

评论回复
板凳
maiweiqi|  楼主 | 2016-1-21 14:51 | 只看该作者
airwill 发表于 2016-1-21 14:46
我估计是你是通过中断服务里检测中断时间的吧, 应该是中断过于频繁或或中断服务的负荷过重, 拖了时间了.
...

void TIM17_IRQHandler(void)
{
    TIM17->ARR = 2399;
        Pt_CHA_Status->DigitalTimerBase ++;
        Pt_CHB_Status->DigitalTimerBase ++;
    TIM17->SR = ((uint16_t)(~TIM_IT_Update));
}
中断服务程序里面就只是对两个数进行自加而已。没有其他的操作了。
整个程序我就只是开了一个硬件中断,就是TIM17.

使用特权

评论回复
地板
airwill| | 2016-1-21 14:58 | 只看该作者
那只能考虑 freertos 的问题了, 比如你可能把系统 Tick 的时间设置得过短了

使用特权

评论回复
5
maiweiqi|  楼主 | 2016-1-21 15:05 | 只看该作者
airwill 发表于 2016-1-21 14:58
那只能考虑 freertos 的问题了, 比如你可能把系统 Tick 的时间设置得过短了

单片机是STM32F030,48m的时钟,1ms的TICK,不至于影响定时器中断吧?因为刚学习FreeRTOS,不知道rtos有没有接管了硬件定时器。也不知道直接用硬件中断会不会影响系统任务切换……。如果50us的中断也产生不了,那就没法搞了………………:L

使用特权

评论回复
6
maiweiqi|  楼主 | 2016-1-21 22:55 | 只看该作者
本帖最后由 maiweiqi 于 2016-1-21 23:12 编辑
airwill 发表于 2016-1-21 14:58
那只能考虑 freertos 的问题了, 比如你可能把系统 Tick 的时间设置得过短了

看到SYSTICK任务调度中断那里有个portSET_INTERRUPT_MASK_FROM_ISR();而且其他很多功能都出现了portSET_INTERRUPT_MASK_FROM_ISR();
估计是在任务调度的时候把硬件中断都屏蔽了。:L

使用特权

评论回复
7
diweo| | 2016-1-22 08:09 | 只看该作者
《FreeRTOS实用指南》第3章多看几遍吧。

使用特权

评论回复
8
airwill| | 2016-1-22 08:21 | 只看该作者
RTOS 通常用 Systick 作为系统 tick 的发生器, 不过其它的中断服务也会有简单的接管

使用特权

评论回复
9
m564522634| | 2016-1-22 11:25 | 只看该作者
中断的优先级问题,你操作系统有一个系统时间的中断。 这个中断可能会抢占你的中断响应速度。 你开个50usr 的中断做什么呀

使用特权

评论回复
10
maiweiqi|  楼主 | 2016-1-22 12:25 | 只看该作者
m564522634 发表于 2016-1-22 11:25
中断的优先级问题,你操作系统有一个系统时间的中断。 这个中断可能会抢占你的中断响应速度。 你开个50usr  ...

因为有两路的单线串行数据要接收,想用一个定时器来产生两个时基分别给那两条线来计算时间。类似于红外的接收程序,信号不稳定的时候会产生一些几十到几百微秒的噪声,要判断错误,所以时间要比较精确。
我现在用两个计数器来计算时间,没有问题了。
只是疑惑的是看见系统时间中断的配置已经是配置到最低优先级的呀。那样的话timer的硬件中断应该是可以抢占系统的时间中断吧?
因为刚接触freertos,所以不知它有没有干预硬件中断。

使用特权

评论回复
11
maiweiqi|  楼主 | 2016-1-22 12:28 | 只看该作者
diweo 发表于 2016-1-22 08:09
《FreeRTOS实用指南》第3章多看几遍吧。

嗯,看了,按照它的方法用信号量写了中断服务的任务,时间是接近了,但是速度还是跟不上。把其他中断开后后变得更慢了,是中断得太频繁了么?

使用特权

评论回复
12
dongnanxibei| | 2016-1-30 11:33 | 只看该作者
中断过于频繁或或中断服务的负荷过重

使用特权

评论回复
13
ccw1986| | 2016-1-30 16:09 | 只看该作者
你的systick的优先级是不是最高?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

4

主题

86

帖子

3

粉丝