搜索
bottom↓
回复: 40

主程序中的代码会影响中断的实时性吗?

[复制链接]

出0入0汤圆

发表于 2014-9-20 15:59:53 | 显示全部楼层 |阅读模式
我用一个定时器实现占空比50%的方波输出,在定时器中断中翻转电平。
以下是实验的过程:
1、配置好定时器后,在中断中翻转电平,此时得到的方波形状很好,很干净。
2、配置好定时器,在main函数中增加一个接收串口数据的函数,这时得到的方波上升沿出很干净,但下降沿老出现拖尾现象,下降沿时间有200ns左右的误差。
3、配置好定时器,在main函数中去掉串口那个程序,改在main函数中一直做死循环延时;类是for(; ; ;){X--;}.此时波形也很好无拖尾。
以上三次实验整个代码都只有定时器一个外部中断,并且我测试得一次中断处理占用的时间为200ns左右,所以估计第二次实验肯定时不时有一个中断大小的处理,因为我也没有开其他外部中断,所以估计是NVIC的中断。

现在初步分析,是主程序中运行串口检测函数时,有NVIC中断插入影响了实时性,但又不知道是什么原因?为什么我一直跑一个延时delay代码的时候又没有那个中断?

阿莫论坛20周年了!感谢大家的支持与爱护!!

曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……

出0入8汤圆

发表于 2014-9-20 16:03:33 | 显示全部楼层
把这个定时器的优先级设到最高。 允许中断嵌套。

出10入284汤圆

发表于 2014-9-20 16:14:41 | 显示全部楼层
中断至少要 等当前的指令执行完 才会响应

出0入0汤圆

发表于 2014-9-20 16:20:26 | 显示全部楼层
听1楼的

出0入0汤圆

发表于 2014-9-20 16:31:59 | 显示全部楼层
优先级设为最高

出0入0汤圆

发表于 2014-9-20 16:51:42 | 显示全部楼层
2楼正解。。。。

出0入8汤圆

发表于 2014-9-20 16:59:37 | 显示全部楼层
坐等解决结果

出0入0汤圆

发表于 2014-9-20 17:16:35 | 显示全部楼层
在NVIC中断程序中加个断点看看会不会进去

出0入0汤圆

发表于 2014-9-20 17:17:08 | 显示全部楼层
有可能是进入中断前执行的指令的周期指令不同造成的

出0入0汤圆

发表于 2014-9-20 17:28:25 | 显示全部楼层
不知道您串口怎么用的    不过必须先把定时器中断设置为最高

出0入0汤圆

发表于 2014-9-20 17:42:45 | 显示全部楼层
推荐串口使用DMA来输出

出0入0汤圆

发表于 2014-9-20 17:45:29 | 显示全部楼层
自古1楼出高手

出0入0汤圆

发表于 2014-9-20 18:27:56 来自手机 | 显示全部楼层
Mark一下,帮顶

出0入0汤圆

 楼主| 发表于 2014-9-20 19:40:13 | 显示全部楼层
整个程序除了中断<0的中断不能控制外,我就这么一个定时器中断,另外。。串口是采用轮询机制,没有用到中断

出0入0汤圆

 楼主| 发表于 2014-9-20 19:41:25 | 显示全部楼层
EngKing 发表于 2014-9-20 17:42
推荐串口使用DMA来输出

我将来的代码除了串口外还需要跑别的函数,所以搞清楚问题的根本是关键。

出0入0汤圆

 楼主| 发表于 2014-9-20 19:43:06 | 显示全部楼层
chengz 发表于 2014-9-20 17:17
有可能是进入中断前执行的指令的周期指令不同造成的

M3的片子,跑100M,就算指令周期引起 误差应该不大于10ns,我这里有200ns抖动。

出0入0汤圆

 楼主| 发表于 2014-9-20 19:43:56 | 显示全部楼层
modbus 发表于 2014-9-20 17:16
在NVIC中断程序中加个断点看看会不会进去

这个可以试一下,我下周验证下。

出0入0汤圆

 楼主| 发表于 2014-9-20 19:44:39 | 显示全部楼层
qtds67 发表于 2014-9-20 16:31
优先级设为最高

我就这么一个中断,当然 优先级早设为最高了。

出0入0汤圆

 楼主| 发表于 2014-9-20 19:45:43 | 显示全部楼层

哥们,我就是1楼,我是来提问的。

出0入0汤圆

发表于 2014-9-20 22:18:51 来自手机 | 显示全部楼层
难道是外设寄存器访问有延迟,这个可能性也不大啊,不过好像就没看到有哪个用户手册提到访问内存映射寄存器的时间一般是多少

出0入0汤圆

 楼主| 发表于 2014-9-21 10:15:17 | 显示全部楼层
myxiaonia 发表于 2014-9-20 22:18
难道是外设寄存器访问有延迟,这个可能性也不大啊,不过好像就没看到有哪个用户手册提到访问内存映射寄存器 ...

这个很有可能,我只跑延时程序就不会出现这问题,串口任务确实是操作了寄存器,如果是有NVIC中断,那延时函数应该也会出现拖尾。

出0入0汤圆

 楼主| 发表于 2014-9-21 10:20:20 | 显示全部楼层
myxiaonia 发表于 2014-9-20 22:18
难道是外设寄存器访问有延迟,这个可能性也不大啊,不过好像就没看到有哪个用户手册提到访问内存映射寄存器 ...

M3是哈佛结构,共地址的,相当于所有的外设都挂在总线上,定时器也算是一外设,是不是这块也会出现冲突?,要真是这样 M3做实时性很高的东西就有够困难了。。。。。
我就是需要做一个实时性要求<1.5us的东西才遇到这个麻烦的。

出30入0汤圆

发表于 2014-9-21 11:17:16 | 显示全部楼层
2楼说的有道理

出0入0汤圆

发表于 2014-9-21 12:22:02 | 显示全部楼层
一般不会,,看你有没有开看门狗,或者程序有没有加  while(1)  

出0入0汤圆

发表于 2014-9-21 13:29:01 | 显示全部楼层
要不把例程发上来吧,看上去你还没加上业务相关代码,到这里还是外设相关的东西,应该不会泄露你的秘密

出0入0汤圆

 楼主| 发表于 2014-9-21 17:37:21 | 显示全部楼层
myxiaonia 发表于 2014-9-21 13:29
要不把例程发上来吧,看上去你还没加上业务相关代码,到这里还是外设相关的东西,应该不会泄露你的秘密 ...

例程要能发就好了,我们的代码都加密了,发上来都是乱码。

出0入0汤圆

发表于 2014-9-22 21:31:04 来自手机 | 显示全部楼层
不会           

出0入0汤圆

发表于 2014-9-22 22:03:53 | 显示全部楼层
也有可能串口库函数中用到了关全局中断的指令

出0入0汤圆

发表于 2014-9-22 22:06:43 | 显示全部楼层
请问楼主 你的头像那只是什么狗?能告诉一下吗~~我看《后会无期》里面的好像是这种

出0入0汤圆

发表于 2014-9-22 23:20:31 | 显示全部楼层
cumtgao 发表于 2014-9-21 17:37
例程要能发就好了,我们的代码都加密了,发上来都是乱码。

截图?     

出700入102汤圆

发表于 2014-9-23 07:47:40 | 显示全部楼层
linux-0405209 发表于 2014-9-22 22:06
请问楼主 你的头像那只是什么狗?能告诉一下吗~~我看《后会无期》里面的好像是这种 ...


电影里面提到过,好像叫  阿拉斯加雪橇犬

出0入0汤圆

发表于 2014-9-23 09:11:41 | 显示全部楼层
xionggehao 发表于 2014-9-23 07:47
电影里面提到过,好像叫  阿拉斯加雪橇犬

你怎么换头像呢?以前的很好看~~

出0入0汤圆

发表于 2014-9-23 10:30:19 | 显示全部楼层
先关注下这个问题

出700入102汤圆

发表于 2014-9-24 21:49:47 | 显示全部楼层
linux-0405209 发表于 2014-9-23 09:11
你怎么换头像呢?以前的很好看~~

你确定没有认错人?我不是楼主

出0入0汤圆

发表于 2014-9-25 03:03:20 | 显示全部楼层
xionggehao 发表于 2014-9-24 21:49
你确定没有认错人?我不是楼主

我认错人了~~呵呵·~~

出0入0汤圆

发表于 2014-9-25 08:29:56 | 显示全部楼层
xionggehao 发表于 2014-9-23 07:47
电影里面提到过,好像叫  阿拉斯加雪橇犬

哈士奇是种傻狗

出0入0汤圆

发表于 2014-10-20 16:31:48 | 显示全部楼层
主循环不会影响中断吧

出0入0汤圆

发表于 2014-10-20 16:35:45 | 显示全部楼层
优先级设为最高一

出0入0汤圆

 楼主| 发表于 2014-10-21 17:30:21 | 显示全部楼层
linux-0405209 发表于 2014-9-22 22:06
请问楼主 你的头像那只是什么狗?能告诉一下吗~~我看《后会无期》里面的好像是这种 ...

二哈......

出0入0汤圆

发表于 2014-10-21 17:39:17 | 显示全部楼层
关注一下

出0入0汤圆

发表于 2014-10-21 17:40:18 | 显示全部楼层
按楼上说的把中断优先级提到最高,在看下代码中是否有关中断~一般主程序不会影响中断的
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-8-25 10:15

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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