0 中断需要执行的程序过长优化问题 - 第2页 - STM32/STM8单片机论坛 - ST MCU意法半导体官方技术支持论坛 - 21ic电子技术开发论坛
打印
[STM32F0]

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

[复制链接]
楼主: norman7890
手机看帖
扫描二维码
随时随地手机跟帖
21
norman7890|  楼主 | 2016-1-12 15:03 | 只看该作者 回帖奖励 |倒序浏览
huangqi412 发表于 2016-1-12 13:55
程序systick中40us进一次中断,中断程序大概耗时38us,   这还只是一个中断,还有其他工作。

如果整个程序 ...

谢谢版主大人亲睐,可惜的是不能换啊。只能一句一句扣时间了

使用特权

评论回复
22
ofourme| | 2016-1-12 16:47 | 只看该作者
建议从程序架构方面下功夫吧。比如,每次进去中断保存上下文的时间都不少的,能否改成状态机?

使用特权

评论回复
23
huang1007| | 2016-1-12 18:02 | 只看该作者
40us的固定周期,38us的复杂算法计算,除了优化算法没有任何办法了,不算其他任何任务cpu占用就是95%了.楼主这个很像之前我做过的变频器,当时是100us的中断,30多us的计算时间.楼主这个除了大幅度优化算法就只能换mcu了,计算这么频繁可以换dsp,而且建议算法占用cpu时间不超过50%,提高稳定性.RTOS切换任务要占用资源,用在这里是雪上加霜

使用特权

评论回复
24
huang1007| | 2016-1-12 18:08 | 只看该作者
粗略看了下楼主的中断计算程序,基本没有用到除法,也没有浮点运算,那么除非能更改整个算法或者算法逻辑有重大问题可以修改,感觉基本没有太多的优化空间.不知道楼主的mcu带不带硬件乘法器.目前看来只有换用带硬件乘法器和更高主频的mcu或者dsp这条路可以走了.你要是说服老大这个芯片做不到,硬件芯片也是可以换的吧

使用特权

评论回复
25
幸福至上| | 2016-1-12 19:38 | 只看该作者
norman7890 发表于 2016-1-12 11:49
Inverter_Input_Voltage=SmpData[VBUS]*SmpVbus_Para>>12;
                Inverter_Input_Voltage=400000;
                Inverter ...

                                                                Inverter_Input_Voltage=SmpData[VBUS]*SmpVbus_Para>>12;
                Inverter_Input_Voltage=400000;
                Inverter_Output_Voltage=((SmpData[VAC]-Vac_Calibration)*SmpVac_Para>>12)+Voltage_Island;
                Inverter_Output_Voltage=KSin_Vac[Inverter_Cnt]-325270;                        
                Inverter_Current=(SmpData[IAC]-Iac_Calibration)*SmpIac_Para>>12;
                Inverter_Current=KSin_Iac[Inverter_Cnt]-25000;     
这几句重复计算并赋值没明白是何意义,感觉像是重复计算了。其它部分也觉得没多大优化空间了。担心总归是担心,实际行不行还是做完了测试吧。实在不行,就只能在MCU主频上想办法,24MHZ不算快....或者能不能更改MCU时钟呢

使用特权

评论回复
26
norman7890|  楼主 | 2016-1-13 09:22 | 只看该作者
幸福至上 发表于 2016-1-12 19:38
Inverter_Input_Voltage=SmpData[VBUS]*SmpVbus_Para>>12;
                Inverter_Input_Volt ...

谢谢谢谢,这个重复计算是我调试的时候用的,没有隐去而已。
时钟是48M的,我再接着改改吧,不过也没啥可改的了感觉。

使用特权

评论回复
27
norman7890|  楼主 | 2016-1-13 09:23 | 只看该作者
huang1007 发表于 2016-1-12 18:08
粗略看了下楼主的中断计算程序,基本没有用到除法,也没有浮点运算,那么除非能更改整个算法或者算法逻辑有重 ...

唉。难的就是换不了芯片啊,也并没有乘除法器。

使用特权

评论回复
28
norman7890|  楼主 | 2016-1-13 09:25 | 只看该作者
huangqi412 发表于 2016-1-12 14:01
25K计算频率,而且要复杂式子。有点像开关电源之类,但是F0没有高精度的PWM模块啊,数字电源不是要高分辨率 ...

哈哈,识货啊。F0可以用timer发PWM波啊

使用特权

评论回复
29
yhn1973| | 2016-1-13 10:09 | 只看该作者
如果能保证最大不超过38us的话也还可以,把40us中断优先级设为最高,1ms中断次之,10ms中断最低

使用特权

评论回复
30
huangqi412| | 2016-1-13 10:14 | 只看该作者
huang1007 发表于 2016-1-12 18:08
粗略看了下楼主的中断计算程序,基本没有用到除法,也没有浮点运算,那么除非能更改整个算法或者算法逻辑有重 ...

M0+好像是有乘法指令的吧  

使用特权

评论回复
评分
参与人数 1威望 +1 收起 理由
norman7890 + 1 很给力!
31
huangqi412| | 2016-1-13 10:18 | 只看该作者
楼主不如贴出原理图框架  还有程序功能和主流程  可能有人能帮你想想办法改动。

使用特权

评论回复
32
幸福至上| | 2016-1-13 11:01 | 只看该作者
norman7890 发表于 2016-1-13 09:22
谢谢谢谢,这个重复计算是我调试的时候用的,没有隐去而已。
时钟是48M的,我再接着改改吧,不过也没啥可 ...

看楼下的评论又想了下,你那个计算式里面也没啥除法或者浮点数运算,算法本身优化程度不大。如楼下的一个朋友说的,40us中断和10ms中断,肯定存在一个优先级的问题,开启中断嵌套不知是否可行呢,即40us拥有最高中断优先权,如果正在执行10ms中断的时候40us中断到了,则可直接嵌套执行40us中断。从电脑CPU的角度来看,你这个算是CPU占用率快满了。

使用特权

评论回复
33
whtwhtw| | 2016-1-13 11:36 | 只看该作者
norman7890 发表于 2016-1-12 11:49
Inverter_Input_Voltage=SmpData[VBUS]*SmpVbus_Para>>12;
                Inverter_Input_Voltage=400000;
                Inverter ...

把汉字补上,我们看的时候会轻松很多,最好多加点注释,比如哪部分实现哪些功能等

使用特权

评论回复
34
hyg1984| | 2016-1-13 22:28 | 只看该作者
看了程序, 不用尝试在指令上节省了。

如果你能想到很好的算法, 或者转变一下思路, 肯定能行的通, 因为发现你的算法,太复杂了

使用特权

评论回复
35
sl3340| | 2016-1-14 09:05 | 只看该作者
就编译器而言给楼主一个优化建议,keil下可以设置优化等级LEVEL3 然后OPTIMIZE FOR TIME。

还有就是将这部分代码保存在RAM中可以加快程序读取速率。

另外,既然是PWM为什么不用查表算法,每次都计算你当自己是DSP啊。

使用特权

评论回复
36
norman7890|  楼主 | 2016-1-14 09:31 | 只看该作者
幸福至上 发表于 2016-1-13 11:01
看楼下的评论又想了下,你那个计算式里面也没啥除法或者浮点数运算,算法本身优化程度不大。如楼下的一个 ...

是这样的,这两天又节省了2us,1ms10ms中断优先级肯定低于systick的,勉强够用了吧

使用特权

评论回复
37
norman7890|  楼主 | 2016-1-14 09:33 | 只看该作者
huangqi412 发表于 2016-1-13 10:18
楼主不如贴出原理图框架  还有程序功能和主流程  可能有人能帮你想想办法改动。 ...

哈哈,谢谢。现在改到36us了,别的中断优先级改低也勉强够用了,就是很紧凑

使用特权

评论回复
38
捉虫天师| | 2016-1-21 10:04 | 只看该作者
程序结构需要改进,有时候问题可以简单化的。

使用特权

评论回复
39
23jiekou| | 2016-1-25 15:29 | 只看该作者

使用特权

评论回复
40
zhuotuzi| | 2016-1-30 10:36 | 只看该作者
建议你把中断程序优化下,写到其他位置,和中断分离,这样扫描的周期 会短点

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则