[STM32F0] 中断需要执行的程序过长优化问题

[复制链接]
 楼主| norman7890 发表于 2016-1-11 16:08 | 显示全部楼层 |阅读模式
  程序systick中40us进一次中断,中断程序大概耗时38us,除此之外,每过1ms会有耗时4us的中断,还有10ms的中断。担心中断时间不够,程序出问题。
  请教各路大神,如何精简程序,38us的那个程序,大致都是加减乘除等计算,有没有什么有效的程序精简办法。左移右移还有减少除法之类的都用过了。
 楼主| norman7890 发表于 2016-1-11 16:09 | 显示全部楼层
huangcunxiake 发表于 2016-1-11 16:31 | 显示全部楼层
进入中断后,先关掉总中断啊。干完了活,再开
luofeng2g 发表于 2016-1-11 17:46 | 显示全部楼层
复杂算法放后台执行,中断激活后台任务就行了
捉虫天师 发表于 2016-1-11 20:48 | 显示全部楼层
解决这个问题最简单的方法就是用RTOS来做,通过线程来解决冲突。
捉虫天师 发表于 2016-1-11 20:50 | 显示全部楼层
1建议你把中断程序优化下,写到其他位置,和中断分离,这样扫描的周期 会短点
2另外,你可以考虑用定时中断啊,这样避免了中断程序没扫描完,中断就被复位。
3程序一般控制毫秒控制肯定能达到工业使用要求的,你也可以把定时时间加长点。
ofourme 发表于 2016-1-11 21:32 来自手机 | 显示全部楼层
你这个cpu的占用率也太高了吧,40微秒的时间中断程序就占用了38微秒。建议优化中断程序或是换芯片。还有,程序实时性要求有那么高吗?一定要用中断?
Bingoes 发表于 2016-1-11 22:57 | 显示全部楼层
优化算法,或者再换性能更高的芯片。。。40us每次的中断,38us的每次中断处理时间,单单从字面的描述上来看就感觉够呛了。。。
sl3340 发表于 2016-1-12 09:11 | 显示全部楼层
这个问题其实是两方面问题,第一,你的CPU能不能满足你的代码实时性的要求。第二,你的代码是否需要这个实时性。

第一个问题,可以优化这些代码或者更换更高主频的器件。

第二个问题,不需要这么强的实时性就降低代码运行的次数,systick中的代码如果不需要25KHz的调用次数可以降低一点。
 楼主| norman7890 发表于 2016-1-12 10:15 | 显示全部楼层
luofeng2g 发表于 2016-1-11 17:46
复杂算法放后台执行,中断激活后台任务就行了

不管放在那儿,它总是需要耗时的,而中断控制对象所需的实时性很高。
 楼主| norman7890 发表于 2016-1-12 10:16 | 显示全部楼层
捉虫天师 发表于 2016-1-11 20:48
解决这个问题最简单的方法就是用RTOS来做,通过线程来解决冲突。

RTOS是什么,我去查查,谢谢。
 楼主| norman7890 发表于 2016-1-12 10:17 | 显示全部楼层
捉虫天师 发表于 2016-1-11 20:50
1建议你把中断程序优化下,写到其他位置,和中断分离,这样扫描的周期 会短点
2另外,你可以考虑用定时中断 ...

systick的没法挪到别的位置,控制对象实时性很高。而且必须是40us啊,这都是硬件设计好了的
 楼主| norman7890 发表于 2016-1-12 10:18 | 显示全部楼层
ofourme 发表于 2016-1-11 21:32
你这个cpu的占用率也太高了吧,40微秒的时间中断程序就占用了38微秒。建议优化中断程序或是换芯片。还有, ...

确实很高,硬件电路都设计好了,而且不允许换芯片
 楼主| norman7890 发表于 2016-1-12 10:20 | 显示全部楼层
sl3340 发表于 2016-1-12 09:11
这个问题其实是两方面问题,第一,你的CPU能不能满足你的代码实时性的要求。第二,你的代码是否需要这个实 ...

用的f051的R8的片子,只能尽力去满足,已经不能再改芯片了。而且控制对象确实需要这种实时性
yhn1973 发表于 2016-1-12 11:16 | 显示全部楼层
你把你那个38us的运算式子贴出来,看看有没办法优化。
whtwhtw 发表于 2016-1-12 11:36 | 显示全部楼层
如果中断程序实时性要求不高的情况下,中断后给个信号量就行了,程序放在中断外面执行
如果中断程序实时性要求高,就要优化设计了,可以肯定的说,你的程序有问题

评论

完全赞同  发表于 2016-1-12 19:07
 楼主| norman7890 发表于 2016-1-12 11:53 | 显示全部楼层
yhn1973 发表于 2016-1-12 11:16
你把你那个38us的运算式子贴出来,看看有没办法优化。

主频48M,这是程序计算最多的一部分,还有些没贴,这部分耗时20us。
changmiao 发表于 2016-1-12 12:37 | 显示全部楼层
norman7890 发表于 2016-1-12 10:16
RTOS是什么,我去查查,谢谢。

RTOS是实时操作系统,任务调度之类的也会占用资源,你用了之后只会死的更快。如果38us的计算是每次必须执行的话,只能是提高主频,加快CPU的执行速度了。什么放到后台执行不但没有解决问题,还可能导致错过该次运算。
huangqi412 发表于 2016-1-12 13:55 | 显示全部楼层
程序systick中40us进一次中断,中断程序大概耗时38us,   这还只是一个中断,还有其他工作。

如果整个程序不能有大的优化空间,或者这个中断函数不能有大的优化空间,唯一办法就是换单片机了。。。
huangqi412 发表于 2016-1-12 14:01 | 显示全部楼层
25K计算频率,而且要复杂式子。有点像开关电源之类,但是F0没有高精度的PWM模块啊,数字电源不是要高分辨率PWM模块么。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

15

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部