cumtgao 发表于 2014-9-20 15:59:53

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

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

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

kebaojun305 发表于 2014-9-20 16:03:33

把这个定时器的优先级设到最高。 允许中断嵌套。

brother_yan 发表于 2014-9-20 16:14:41

中断至少要 等当前的指令执行完 才会响应

huangyiting1990 发表于 2014-9-20 16:20:26

听1楼的

qtds67 发表于 2014-9-20 16:31:59

优先级设为最高

CH_anyin 发表于 2014-9-20 16:51:42

2楼正解。。。。

轻风 发表于 2014-9-20 16:59:37

坐等解决结果

modbus 发表于 2014-9-20 17:16:35

在NVIC中断程序中加个断点看看会不会进去

chengz 发表于 2014-9-20 17:17:08

有可能是进入中断前执行的指令的周期指令不同造成的

4058665 发表于 2014-9-20 17:28:25

不知道您串口怎么用的    不过必须先把定时器中断设置为最高

EngKing 发表于 2014-9-20 17:42:45

推荐串口使用DMA来输出

star_tale 发表于 2014-9-20 17:45:29

自古1楼出高手

CharlesLu 发表于 2014-9-20 18:27:56

Mark一下,帮顶

cumtgao 发表于 2014-9-20 19:40:13

整个程序除了中断<0的中断不能控制外,我就这么一个定时器中断,另外。。串口是采用轮询机制,没有用到中断

cumtgao 发表于 2014-9-20 19:41:25

EngKing 发表于 2014-9-20 17:42
推荐串口使用DMA来输出

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

cumtgao 发表于 2014-9-20 19:43:06

chengz 发表于 2014-9-20 17:17
有可能是进入中断前执行的指令的周期指令不同造成的

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

cumtgao 发表于 2014-9-20 19:43:56

modbus 发表于 2014-9-20 17:16
在NVIC中断程序中加个断点看看会不会进去

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

cumtgao 发表于 2014-9-20 19:44:39

qtds67 发表于 2014-9-20 16:31
优先级设为最高

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

cumtgao 发表于 2014-9-20 19:45:43

huangyiting1990 发表于 2014-9-20 16:20
听1楼的

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

myxiaonia 发表于 2014-9-20 22:18:51

难道是外设寄存器访问有延迟,这个可能性也不大啊,不过好像就没看到有哪个用户手册提到访问内存映射寄存器的时间一般是多少

cumtgao 发表于 2014-9-21 10:15:17

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

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

cumtgao 发表于 2014-9-21 10:20:20

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

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

pandong 发表于 2014-9-21 11:17:16

2楼说的有道理

853728579 发表于 2014-9-21 12:22:02

一般不会,,看你有没有开看门狗,或者程序有没有加while(1)

myxiaonia 发表于 2014-9-21 13:29:01

要不把例程发上来吧,看上去你还没加上业务相关代码,到这里还是外设相关的东西,应该不会泄露你的秘密

cumtgao 发表于 2014-9-21 17:37:21

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

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

zhaotyue 发表于 2014-9-22 21:31:04

不会         

modbus 发表于 2014-9-22 22:03:53

也有可能串口库函数中用到了关全局中断的指令

linux-0405209 发表于 2014-9-22 22:06:43

请问楼主 你的头像那只是什么狗?能告诉一下吗~~我看《后会无期》里面的好像是这种

little_Monkey 发表于 2014-9-22 23:20:31

cumtgao 发表于 2014-9-21 17:37
例程要能发就好了,我们的代码都加密了,发上来都是乱码。

截图?   

xionggehao 发表于 2014-9-23 07:47:40

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

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

linux-0405209 发表于 2014-9-23 09:11:41

xionggehao 发表于 2014-9-23 07:47
电影里面提到过,好像叫阿拉斯加雪橇犬

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

一夕nandy 发表于 2014-9-23 10:30:19

先关注下这个问题

xionggehao 发表于 2014-9-24 21:49:47

linux-0405209 发表于 2014-9-23 09:11
你怎么换头像呢?以前的很好看~~

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

linux-0405209 发表于 2014-9-25 03:03:20

xionggehao 发表于 2014-9-24 21:49
你确定没有认错人?我不是楼主

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

myxiaonia 发表于 2014-9-25 08:29:56

xionggehao 发表于 2014-9-23 07:47
电影里面提到过,好像叫阿拉斯加雪橇犬

哈士奇是种傻狗

傻彪5213 发表于 2014-10-20 16:31:48

主循环不会影响中断吧

rabbit512 发表于 2014-10-20 16:35:45

优先级设为最高一

cumtgao 发表于 2014-10-21 17:30:21

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

二哈......

dadaohyb 发表于 2014-10-21 17:39:17

关注一下

cece_co 发表于 2014-10-21 17:40:18

按楼上说的把中断优先级提到最高,在看下代码中是否有关中断~一般主程序不会影响中断的
页: [1]
查看完整版本: 主程序中的代码会影响中断的实时性吗?