主程序中的代码会影响中断的实时性吗?
我用一个定时器实现占空比50%的方波输出,在定时器中断中翻转电平。以下是实验的过程:
1、配置好定时器后,在中断中翻转电平,此时得到的方波形状很好,很干净。
2、配置好定时器,在main函数中增加一个接收串口数据的函数,这时得到的方波上升沿出很干净,但下降沿老出现拖尾现象,下降沿时间有200ns左右的误差。
3、配置好定时器,在main函数中去掉串口那个程序,改在main函数中一直做死循环延时;类是for(; ; ;){X--;}.此时波形也很好无拖尾。
以上三次实验整个代码都只有定时器一个外部中断,并且我测试得一次中断处理占用的时间为200ns左右,所以估计第二次实验肯定时不时有一个中断大小的处理,因为我也没有开其他外部中断,所以估计是NVIC的中断。
现在初步分析,是主程序中运行串口检测函数时,有NVIC中断插入影响了实时性,但又不知道是什么原因?为什么我一直跑一个延时delay代码的时候又没有那个中断? 把这个定时器的优先级设到最高。 允许中断嵌套。 中断至少要 等当前的指令执行完 才会响应 听1楼的 优先级设为最高 2楼正解。。。。 坐等解决结果 在NVIC中断程序中加个断点看看会不会进去 有可能是进入中断前执行的指令的周期指令不同造成的 不知道您串口怎么用的 不过必须先把定时器中断设置为最高 推荐串口使用DMA来输出 自古1楼出高手 Mark一下,帮顶 整个程序除了中断<0的中断不能控制外,我就这么一个定时器中断,另外。。串口是采用轮询机制,没有用到中断 EngKing 发表于 2014-9-20 17:42
推荐串口使用DMA来输出
我将来的代码除了串口外还需要跑别的函数,所以搞清楚问题的根本是关键。 chengz 发表于 2014-9-20 17:17
有可能是进入中断前执行的指令的周期指令不同造成的
M3的片子,跑100M,就算指令周期引起 误差应该不大于10ns,我这里有200ns抖动。 modbus 发表于 2014-9-20 17:16
在NVIC中断程序中加个断点看看会不会进去
这个可以试一下,我下周验证下。 qtds67 发表于 2014-9-20 16:31
优先级设为最高
我就这么一个中断,当然 优先级早设为最高了。 huangyiting1990 发表于 2014-9-20 16:20
听1楼的
哥们,我就是1楼,我是来提问的。 难道是外设寄存器访问有延迟,这个可能性也不大啊,不过好像就没看到有哪个用户手册提到访问内存映射寄存器的时间一般是多少 myxiaonia 发表于 2014-9-20 22:18
难道是外设寄存器访问有延迟,这个可能性也不大啊,不过好像就没看到有哪个用户手册提到访问内存映射寄存器 ...
这个很有可能,我只跑延时程序就不会出现这问题,串口任务确实是操作了寄存器,如果是有NVIC中断,那延时函数应该也会出现拖尾。 myxiaonia 发表于 2014-9-20 22:18
难道是外设寄存器访问有延迟,这个可能性也不大啊,不过好像就没看到有哪个用户手册提到访问内存映射寄存器 ...
M3是哈佛结构,共地址的,相当于所有的外设都挂在总线上,定时器也算是一外设,是不是这块也会出现冲突?,要真是这样 M3做实时性很高的东西就有够困难了。。。。。
我就是需要做一个实时性要求<1.5us的东西才遇到这个麻烦的。 2楼说的有道理 一般不会,,看你有没有开看门狗,或者程序有没有加while(1) 要不把例程发上来吧,看上去你还没加上业务相关代码,到这里还是外设相关的东西,应该不会泄露你的秘密 myxiaonia 发表于 2014-9-21 13:29
要不把例程发上来吧,看上去你还没加上业务相关代码,到这里还是外设相关的东西,应该不会泄露你的秘密 ...
例程要能发就好了,我们的代码都加密了,发上来都是乱码。 不会 也有可能串口库函数中用到了关全局中断的指令 请问楼主 你的头像那只是什么狗?能告诉一下吗~~我看《后会无期》里面的好像是这种 cumtgao 发表于 2014-9-21 17:37
例程要能发就好了,我们的代码都加密了,发上来都是乱码。
截图? linux-0405209 发表于 2014-9-22 22:06
请问楼主 你的头像那只是什么狗?能告诉一下吗~~我看《后会无期》里面的好像是这种 ...
电影里面提到过,好像叫阿拉斯加雪橇犬 xionggehao 发表于 2014-9-23 07:47
电影里面提到过,好像叫阿拉斯加雪橇犬
你怎么换头像呢?以前的很好看~~ 先关注下这个问题 linux-0405209 发表于 2014-9-23 09:11
你怎么换头像呢?以前的很好看~~
你确定没有认错人?我不是楼主 xionggehao 发表于 2014-9-24 21:49
你确定没有认错人?我不是楼主
我认错人了~~呵呵·~~ xionggehao 发表于 2014-9-23 07:47
电影里面提到过,好像叫阿拉斯加雪橇犬
哈士奇是种傻狗 主循环不会影响中断吧 优先级设为最高一 linux-0405209 发表于 2014-9-22 22:06
请问楼主 你的头像那只是什么狗?能告诉一下吗~~我看《后会无期》里面的好像是这种 ...
二哈...... 关注一下 按楼上说的把中断优先级提到最高,在看下代码中是否有关中断~一般主程序不会影响中断的
页:
[1]