OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 5798|回复: 21

新手分享下 STM32的程序如何高效执行

[复制链接]

5

主题

48

帖子

0

精华

初级会员

Rank: 2

积分
76
金钱
76
注册时间
2016-9-13
在线时间
5 小时
发表于 2016-9-29 18:15:48 | 显示全部楼层 |阅读模式
如题:
图1:   10000次的循环,通用编程方式 QQ图片20160929180945.png
           程序执行一个循环,竟然要 7 个指令,我不知道 STM32 的哪个指令是多少个指令周期,此方法可见不可取。。。。同其他MCU

图2:  修改 FOR 为 while,递减 QQ图片20160929180941.png
          程序指令一个循环,4条语句,效率整整高出了接近 50% 。。。。。。。同其他MCU 的汇编

图3: 其他单片机的汇编指令, QQ图片20160929180937.png
        如图,2条指令搞定,


新手不理解如何编写才是最高效的,高手勿喷谢谢,一起讨论下。。。。。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

5

主题

48

帖子

0

精华

初级会员

Rank: 2

积分
76
金钱
76
注册时间
2016-9-13
在线时间
5 小时
 楼主| 发表于 2016-9-29 18:22:15 | 显示全部楼层
额。。。。。大家都不喜欢这个吗???
回复 支持 反对

使用道具 举报

11

主题

1044

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3721
金钱
3721
注册时间
2011-5-23
在线时间
2012 小时
发表于 2016-9-29 18:35:40 | 显示全部楼层
最终的实际价值是什么?
RT-Thread RTOS 音频,WIFI,蓝牙
回复 支持 反对

使用道具 举报

30

主题

1170

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1993
金钱
1993
注册时间
2016-2-16
在线时间
527 小时
发表于 2016-9-29 19:06:10 | 显示全部楼层
现在芯片的频率完全是够的,不要纠结这些细节,高不高效一般是复杂的算法需要的时间,或者是数据传送时间是否满足要求这些
回复 支持 反对

使用道具 举报

6

主题

1097

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3571
金钱
3571
注册时间
2014-12-2
在线时间
365 小时
发表于 2016-9-29 20:22:07 | 显示全部楼层
1、图1整个循环虽然7条指令, 但参与循环的只有5条;

2、显然你是打算用51跟STM32相提并论,
STM32:大多数指令都是单周期的,而且有三级流水线。
51:每12个时钟周期才构成一个机器周期,而且指令一般都是2周期,4周期,甚至更多。

你举了一个51的汇编例子,且不说1000不能赋值给A(@1000是什么意思?,应该是#1000吧),因为A是8位的。
51做循环至少需要一个指令(DJNZ R0, LOOP)2个机器周期,即24个时钟。
而STM32仅需要5个时钟(其实可以裁剪得更少),

而且51是8位的,

所以说,STM32跟51不可同日而语,
指令集不同,单纯地看汇编指令条数没太大的参考意义。
坚决不用寄存器,拒绝重复造轮子。
回复 支持 反对

使用道具 举报

33

主题

984

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
8017
金钱
8017
注册时间
2014-8-13
在线时间
1594 小时
发表于 2016-9-29 20:49:35 | 显示全部楼层
xkwy 发表于 2016-9-29 20:22
1、图1整个循环虽然7条指令, 但参与循环的只有5条;

2、显然你是打算用51跟STM32相提并论,

赞一个。

其实我也想说这个问题了。
汇编指令条数多少不是关键,
决定速度快慢的关键是

∑流程的周期数*周期时长

指令条数多少没什么意义的。

如果某MCU某一条指令A运行需要2ms,B需要1ms,
C、D、E、F各需要2ns,

完成某个动作,有2个方案
方案甲:AABA(4条指令)
方案乙:CDEFFFEDDDCDEDFDCCDDEDD * 10(230条指令)

从指令条数上看,方案乙指令条数太多。

从速度上看,方案乙快太多。

当然,现实中,很少有2条指令时间差距上千倍的(也还是有的,比如某些异步的协处理器指令,但是这些并非常规指令,而且其作用往往能代替N多条常规指令【运算部位不一样】,而且比这N条常规指令要快的多)。

而且实际上还有不同的MCU,甚至不同指令集的不同MCU,这些效率比较起来就更加不能单考虑指令数量多少了。更准确的运行时长统计方法应该是
∑流程的周期数*周期时长
然后,时长短的效率高。

当然,这是针对一个已经固定了的动作或者算法,实际上还有某些MCU的A指令比另一些MCU的A指令快,但是B指令却慢一些的情况。


其实上面乱七八糟的说那么多,就是想说 ,,,,我TM也不知道我要说什么了,大家随便看看吧


回复 支持 反对

使用道具 举报

6

主题

1097

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3571
金钱
3571
注册时间
2014-12-2
在线时间
365 小时
发表于 2016-9-29 20:53:49 | 显示全部楼层
mack13013 发表于 2016-9-29 20:49
赞一个。

其实我也想说这个问题了。

同样计算0.1*0.1,STM32F1比STM32F4慢的不是一点点,即便同主频。

因为STM32F4是ARM Cortex-M4内核,而且有独立浮点计算单元。
坚决不用寄存器,拒绝重复造轮子。
回复 支持 反对

使用道具 举报

24

主题

695

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1666
金钱
1666
注册时间
2016-4-29
在线时间
266 小时
发表于 2016-9-29 21:02:06 | 显示全部楼层
以前和现在不能比,以前写程序得精打细算,现在的RAM多大?ROM多大?时钟又多大?简直没法比
不过,研究一下是可以的,学习总没有坏处,相信有用的着的时候
回复 支持 反对

使用道具 举报

72

主题

2711

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3505
金钱
3505
注册时间
2014-8-4
在线时间
696 小时
发表于 2016-9-29 22:15:08 | 显示全部楼层
对这样的帖子仅代表个人点个赞
以我资质之鲁钝,当尽平心静气、循序渐进、稳扎稳打之力。
回复 支持 反对

使用道具 举报

5

主题

48

帖子

0

精华

初级会员

Rank: 2

积分
76
金钱
76
注册时间
2016-9-13
在线时间
5 小时
 楼主| 发表于 2016-9-30 08:34:59 | 显示全部楼层
aozima 发表于 2016-9-29 18:35
最终的实际价值是什么?

不是炫任何东西,也不是发表什么,只是想在学习的时候,养成良好的习惯,这样习惯性编写出来的程序才是高效,尽管 STM32速度很快了,

可能这是从汇编转过来的一个通病吧,追求到极致,然后变为自己的习惯
回复 支持 反对

使用道具 举报

5

主题

48

帖子

0

精华

初级会员

Rank: 2

积分
76
金钱
76
注册时间
2016-9-13
在线时间
5 小时
 楼主| 发表于 2016-9-30 08:35:16 | 显示全部楼层
憨厚诚实大叔 发表于 2016-9-29 19:06
现在芯片的频率完全是够的,不要纠结这些细节,高不高效一般是复杂的算法需要的时间,或者是数据传送时间是 ...

呵呵,可能是个人习惯吧
回复 支持 反对

使用道具 举报

5

主题

48

帖子

0

精华

初级会员

Rank: 2

积分
76
金钱
76
注册时间
2016-9-13
在线时间
5 小时
 楼主| 发表于 2016-9-30 08:35:54 | 显示全部楼层
xkwy 发表于 2016-9-29 20:22
1、图1整个循环虽然7条指令, 但参与循环的只有5条;

2、显然你是打算用51跟STM32相提并论,

只是想用最短的程序空间和代码写出最高效的程序而已,没别的意思
回复 支持 反对

使用道具 举报

5

主题

48

帖子

0

精华

初级会员

Rank: 2

积分
76
金钱
76
注册时间
2016-9-13
在线时间
5 小时
 楼主| 发表于 2016-9-30 08:36:17 | 显示全部楼层
mack13013 发表于 2016-9-29 20:49
赞一个。

其实我也想说这个问题了。

只是想用最短的程序空间和代码写出最高效的程序而已,没别的意思

至于几级流水线什么的,我不懂。。。
回复 支持 反对

使用道具 举报

5

主题

48

帖子

0

精华

初级会员

Rank: 2

积分
76
金钱
76
注册时间
2016-9-13
在线时间
5 小时
 楼主| 发表于 2016-9-30 08:36:42 | 显示全部楼层
xkwy 发表于 2016-9-29 20:53
同样计算0.1*0.1,STM32F1比STM32F4慢的不是一点点,即便同主频。

因为STM32F4是ARM Cortex-M4内核, ...

嗯。。。我新手,没研究到那么深。。
回复 支持 反对

使用道具 举报

5

主题

48

帖子

0

精华

初级会员

Rank: 2

积分
76
金钱
76
注册时间
2016-9-13
在线时间
5 小时
 楼主| 发表于 2016-9-30 08:37:09 | 显示全部楼层
d1z1y2 发表于 2016-9-29 21:02
以前和现在不能比,以前写程序得精打细算,现在的RAM多大?ROM多大?时钟又多大?简直没法比
不过,研究一 ...

我就是这个意思,只是想学习而已,
回复 支持 反对

使用道具 举报

5

主题

48

帖子

0

精华

初级会员

Rank: 2

积分
76
金钱
76
注册时间
2016-9-13
在线时间
5 小时
 楼主| 发表于 2016-9-30 08:39:04 | 显示全部楼层
龙之谷 发表于 2016-9-29 22:15
对这样的帖子仅代表个人点个赞

嗯,我是新手,可能我的写程序的习惯比较偏激,从汇编开始,我就会去想怎么程序高效执行,代码怎么做,然后,把这些在实际的程序中实现,然后养成编程习惯。

回复 支持 反对

使用道具 举报

17

主题

132

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
367
金钱
367
注册时间
2016-9-27
在线时间
53 小时
发表于 2016-9-30 08:39:36 | 显示全部楼层
谁然看着很吊的样子,但是感觉不实用
回复 支持 反对

使用道具 举报

5

主题

48

帖子

0

精华

初级会员

Rank: 2

积分
76
金钱
76
注册时间
2016-9-13
在线时间
5 小时
 楼主| 发表于 2016-9-30 08:42:44 | 显示全部楼层
是否实用,看个人了,我说了,只是想养成习惯而已,没其他什么意思
回复 支持 反对

使用道具 举报

24

主题

695

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1666
金钱
1666
注册时间
2016-4-29
在线时间
266 小时
发表于 2016-9-30 12:18:44 | 显示全部楼层
程序的高效性是一个程序的品质之一,越是底层的东西越是这样,为楼主点个赞
回复 支持 反对

使用道具 举报

2

主题

1446

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
2246
金钱
2246
注册时间
2010-12-16
在线时间
202 小时
发表于 2016-9-30 13:24:44 | 显示全部楼层
从 10000 减到 0 有惊喜哦 .

曾经也在研究这些小技巧 , 但越到后面越觉得 , 架构什么的比这个重要多了 , 同样的一天 , 研究什么东西人的效率最高才是关键 , 东西效率高低是一个很小的方面而已 .
技术讨论请发帖 , 需要我回复请点左下的 < 回复 > 让系统通知我 . 本人不通过其他方式返回任何参数.
回复 支持 反对

使用道具 举报

5

主题

48

帖子

0

精华

初级会员

Rank: 2

积分
76
金钱
76
注册时间
2016-9-13
在线时间
5 小时
 楼主| 发表于 2016-9-30 17:51:53 | 显示全部楼层
shihantu 发表于 2016-9-30 13:24
从 10000 减到 0 有惊喜哦 .

曾经也在研究这些小技巧 , 但越到后面越觉得 , 架构什么的比这个重要多了 , ...

可能您是做大系统的人,我是没做过大系统的,所以不置评论。。。。
看个人的习惯了
就像现在写高层语言一样,不会去纠结这个程序多执行几条指令会延迟什么什么的。
我明白你的意思
所以,我说了,这个只是个人的一个习惯而已,
回复 支持 反对

使用道具 举报

2

主题

1446

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
2246
金钱
2246
注册时间
2010-12-16
在线时间
202 小时
发表于 2016-9-30 19:09:14 | 显示全部楼层
horsonlee 发表于 2016-9-30 17:51
可能您是做大系统的人,我是没做过大系统的,所以不置评论。。。。
看个人的习惯了
就像现在写高层语言 ...

一边说自己是新手 , 一边展示自己的发现 .

一边以自己是新手为理由拒绝别人的意见 , 一边以个人习惯为理由不认同别人的观点 .

这很萌新 .

佩服 9L 的远见 .
技术讨论请发帖 , 需要我回复请点左下的 < 回复 > 让系统通知我 . 本人不通过其他方式返回任何参数.
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-5-25 23:43

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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