硬汉嵌入式论坛

 找回密码
 立即注册
查看: 4333|回复: 11
收起左侧

[有问必答] 定时器中断实时性受到打扰

[复制链接]

336

主题

2045

回帖

3058

积分

版主

Rank: 7Rank: 7Rank: 7

积分
3058
发表于 2018-5-10 10:31:30 | 显示全部楼层 |阅读模式
本帖最后由 caicaptain2 于 2018-5-10 11:03 编辑

程序含freertos+emwin。
有个定时器,需要输出对外信号,2us一次中断,中断函数内输出信号。此定时器中断优先级最高,且与rtos任务无关。
发现一个问题,每次emwin界面刷新图标的时候,比如1s一次刷新图标,这个2us间隔的信号就会发生抖动,时间误差0.1us,似乎有些大了。。
需要检查哪些设置?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107463
QQ
发表于 2018-5-10 11:25:12 | 显示全部楼层
这个可能就是所谓的波形效应。之前F407的FSMC对ADC影响很大。

2us相当于500KHz的翻转速度了,使用FSMC总线刷新的时候应该是影响到这个引脚的输出了。

你换个距离FSMC那几个引脚远点的引脚试试,是否好点。
回复

使用道具 举报

336

主题

2045

回帖

3058

积分

版主

Rank: 7Rank: 7Rank: 7

积分
3058
 楼主| 发表于 2018-5-10 14:58:07 | 显示全部楼层
eric2013 发表于 2018-5-10 11:25
这个可能就是所谓的波形效应。之前F407的FSMC对ADC影响很大。

2us相当于500KHz的翻转速度了,使用FSMC总 ...

RA8875的tft驱动和FreeRTOS中有没有关全局中断的地方?
用的安富莱的bsp
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107463
QQ
发表于 2018-5-10 15:06:37 | 显示全部楼层
caicaptain2 发表于 2018-5-10 14:58
RA8875的tft驱动和FreeRTOS中有没有关全局中断的地方?
用的安富莱的bsp

tft驱动里面没有。那个FreeRTOS的源码是有的。
回复

使用道具 举报

336

主题

2045

回帖

3058

积分

版主

Rank: 7Rank: 7Rank: 7

积分
3058
 楼主| 发表于 2018-5-11 10:10:00 | 显示全部楼层
eric2013 发表于 2018-5-10 15:06
tft驱动里面没有。那个FreeRTOS的源码是有的。

FreeRTOS里面这么设置:
#define configKERNEL_INTERRUPT_PRIORITY                 0xff  
#define configMAX_SYSCALL_INTERRUPT_PRIORITY         0xaf

那么定时器中断优先级数字是4,应该RTOS就不会临时关闭它了吧?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107463
QQ
发表于 2018-5-11 10:39:08 | 显示全部楼层
caicaptain2 发表于 2018-5-11 10:10
FreeRTOS里面这么设置:
#define configKERNEL_INTERRUPT_PRIORITY                 0xff  
#define configMAX_SYSCAL ...

这里还涉及到一个优先级分组的问题,详情可以看下我这个FreeRTOS教程的第12章
http://www.armbbs.cn/forum.php?m ... &extra=page%3D1
回复

使用道具 举报

336

主题

2045

回帖

3058

积分

版主

Rank: 7Rank: 7Rank: 7

积分
3058
 楼主| 发表于 2018-5-11 10:42:00 | 显示全部楼层
eric2013 发表于 2018-5-11 10:39
这里还涉及到一个优先级分组的问题,详情可以看下我这个FreeRTOS教程的第12章
http://www.armbbs.cn/ ...

哦这个优先级分组已经是经典配置了, group4了。全部抢占,15级。
回复

使用道具 举报

336

主题

2045

回帖

3058

积分

版主

Rank: 7Rank: 7Rank: 7

积分
3058
 楼主| 发表于 2018-5-14 11:35:11 | 显示全部楼层
caicaptain2 发表于 2018-5-11 10:42
哦这个优先级分组已经是经典配置了, group4了。全部抢占,15级。

此问题还是无解。。。
2us间隔的定时器中断,优先级最高级别,一进中断就输出脉冲,示波器显示,这个脉冲间隔不准,偶尔有0.2us左右的误差,示波器波形显示有抖动。使用了emwin和FreeRTOS,没有查到哪里有影响中断实时性的代码。
回复

使用道具 举报

5

主题

201

回帖

216

积分

高级会员

积分
216
发表于 2018-5-14 13:13:35 | 显示全部楼层
这样的话,就先把其他功能都注释掉。然后一点点的加功能。看是加到某个模块引起的问题。然后再重点去查。
回复

使用道具 举报

336

主题

2045

回帖

3058

积分

版主

Rank: 7Rank: 7Rank: 7

积分
3058
 楼主| 发表于 2018-5-14 13:54:25 | 显示全部楼层
honami520 发表于 2018-5-14 13:13
这样的话,就先把其他功能都注释掉。然后一点点的加功能。看是加到某个模块引起的问题。然后再重点去查。

进入中断函数前需要各种压栈,不同的时候,压栈的数据长度不一样,耗时也不一样,可能是因为这个影响的吗?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107463
QQ
发表于 2018-5-15 05:20:31 | 显示全部楼层
caicaptain2 发表于 2018-5-14 13:54
进入中断函数前需要各种压栈,不同的时候,压栈的数据长度不一样,耗时也不一样,可能是因为这个影响的吗 ...

这里可以忽略不计的。对于cm内核,发生中断的时候,变量不用入栈,有8个寄存器是硬件自动入栈的,如果你的中断服务程序里面有用到其他未入栈的寄存器,编译器做一个入栈出栈处理,这个时间都可以忽略不计。
回复

使用道具 举报

336

主题

2045

回帖

3058

积分

版主

Rank: 7Rank: 7Rank: 7

积分
3058
 楼主| 发表于 2018-5-15 09:28:45 | 显示全部楼层
还在纠结这个问题。 采用的是示波器的余晖功能,波形上看,脉冲的间隔大多是正常的2us,但是居然有间隔小于2us的脉冲存在。。。这个不合情理。因为中断只可能被延时,怎么会被提前呢?
中断捕捉.jpg
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-6-2 17:28 , Processed in 0.189923 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表