OpenEdv-开源电子网

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

stm32汇编开发还能走多远?

[复制链接]

3

主题

32

帖子

0

精华

初级会员

Rank: 2

积分
66
金钱
66
注册时间
2018-7-12
在线时间
21 小时
发表于 2018-8-23 15:58:10 | 显示全部楼层 |阅读模式



虽然stm32刚入门,我还是决定把我的想法说出来,一方成是希望能起到抛砖引玉的作用,另一方面是希望能够得到观念的更正和提高。

对于stm32库开发,我的想法是,ST公司之所以推出库开发方式,说明库开发方式对ST公司有利,有利才会去做。

我们知道使用汇编的人很少,但汇编有非常高的运行效率。大部分人还是比较难接收汇编方式,因为学习曲线很长,概念很多。

大部分人更易于接收的方式是库开发方式。这就好比一个金字塔,最顶端的人是使用汇编,最多人使用的却是库开发。

ST公司,如果推出库开发方式,如果能被大部分人接收的话,就能够捉住这绝大部分人。从而使用得ST公司的产品更够疯狂被推广。

但,从个人角度来说,最顶尖的高手,一定是没有多余的动作,动作一定是干脆利落,一定是一招致胜。无疑,汇编就是这样一种武器。

另一方面,从PC个人电脑的发展历史来说,在个人电脑领域,无论在哪个层面,占主导的都不是汇编语言。

如果从这个角度出发去看的话,ST公司可能在把握未来,可能在未来会有一系列仿效个人电脑硬件发展的一些类似动作。(比如ST现在已经自己在发展集成开发环境)

所以,使用汇编开发,还能走多远呢?这是我看不透的地方。






正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

3

主题

1907

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4105
金钱
4105
注册时间
2018-8-14
在线时间
696 小时
发表于 2018-8-23 18:13:52 | 显示全部楼层
给你说一个经历, 朋友的公司,有一个用stm103的项目, 搞了两个月, 负责的工程师说CPU跑的不够快, 要升级到407, 结果找我做, 我给他的条件是帮你降级到F0, 收三倍他之前开出的开发费, 这是汇编的与C的分别
回复 支持 1 反对 0

使用道具 举报

70

主题

6758

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
12989
金钱
12989
注册时间
2012-11-26
在线时间
3789 小时
发表于 2018-8-23 16:05:30 | 显示全部楼层
最底层的一定是汇编,但是懂汇编的和学汇编的比较只会越来越少
回复 支持 反对

使用道具 举报

2

主题

168

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
336
金钱
336
注册时间
2018-5-14
在线时间
69 小时
发表于 2018-8-23 16:19:59 | 显示全部楼层
汇编 和 库 不是一个层面上的东西,
STM32的库一般的比较对象是直接寄存器操作;
汇编的比较对象一般是C语言为代表的高级语言。
32位单片机用汇编?程序员不疯,老板也会疯的。
现在编译器的发展,使得用C语言写出来的代码不比直接用汇编大多少,执行效率也不低多少,但工作量明显不是一个层级的。
甚至一个新入行的程序员写的汇编语言代码兴许比用C语言编译后的代码更大,效率更低呢。
回复 支持 反对

使用道具 举报

2

主题

168

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
336
金钱
336
注册时间
2018-5-14
在线时间
69 小时
发表于 2018-8-23 16:30:53 | 显示全部楼层
同样一个项目,一个成熟的程序员用C语言(库方式、寄存器方式均可)可能2个月做好程序,但同样成熟的程序员用汇编,也许得用4个月,而能减少的代码量所减少的成本不见得能超过2元,就按2元算吧,一个成熟的程序员在我们这个好几线的城市月薪也得10K吧,2个月工资就是要1万台的产品量才能收回,还不包括提前上市的先机效应、程序升级维护困难度之类的无形损失。
如果是在低端8位机上,也许2元成本在产品中很明显,但已经用到STM32的情况下,2元在产品整体硬件成本中的占比一般不会太大了。
更何况现在编译器的发展和硬件的发展,很少有项目会使得某芯片C语言不够用必须汇编了。
回复 支持 反对

使用道具 举报

19

主题

246

帖子

0

精华

高级会员

Rank: 4

积分
608
金钱
608
注册时间
2017-9-21
在线时间
171 小时
发表于 2018-8-23 16:56:15 | 显示全部楼层
人家都帮你设计好了砖头,你还要自己拿泥土去垒墙。
回复 支持 反对

使用道具 举报

9

主题

165

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
251
金钱
251
注册时间
2018-4-6
在线时间
31 小时
发表于 2018-8-23 17:21:34 | 显示全部楼层
汇编表示看不懂,但是我觉得寄存器比库函数代码简单
回复 支持 反对

使用道具 举报

18

主题

323

帖子

1

精华

高级会员

Rank: 4

积分
935
金钱
935
注册时间
2017-12-11
在线时间
196 小时
发表于 2018-8-23 17:29:46 来自手机 | 显示全部楼层
对于单片机,mcu,跨界处理器,应用处理器,用好汇编,顶多也就只能在51单片机那个层次有优势,跑应用汇编的优势很低,很低,就像使用寄存器并不一定能比库优势,而且还要自已写底层,代价很高,但效益却很低。高手并不是一定得用汇编,高手应是能用好一却,我们所见的编程语言,能够全方位的突破问题之所在,只有这样才能突破编程语言,编程平台的界线,拥有突破一切障碍的能力
回复 支持 反对

使用道具 举报

15

主题

406

帖子

0

精华

高级会员

Rank: 4

积分
795
金钱
795
注册时间
2015-3-26
在线时间
151 小时
发表于 2018-8-23 17:30:09 | 显示全部楼层
寸步难行
回复 支持 反对

使用道具 举报

0

主题

28

帖子

0

精华

高级会员

Rank: 4

积分
761
金钱
761
注册时间
2018-7-25
在线时间
276 小时
发表于 2018-8-23 17:45:37 | 显示全部楼层
如3楼说的,汇编跟库不应该摆一起讨论。汇编是一种语言,应该跟C语言比较。
汇编的效率比C语言是要高一些,但也没有一个很大的差异。现在的项目都非常复杂了,不像以前的8051,资源不多的芯片,用汇编或许还可以应付。
用汇编开发周期势必会很长,这还不是最致命的。当项目复杂后,汇编语言就不适用了,程序的复杂度无法想象,所以有些安全关键性领域是不建议用汇编的。
再一个是可移植性,如果一个算法库用汇编来写,当换到别的平台后基本上可以说是要重写一遍了,这个也没法接受。
只有在极致追求效率的时候才会用汇编来写,像很多RTOS只是任务调度上下文切换用汇编来写,否则一个用汇编写的RTOS估计几个人会选择使用。
回复 支持 反对

使用道具 举报

3

主题

32

帖子

0

精华

初级会员

Rank: 2

积分
66
金钱
66
注册时间
2018-7-12
在线时间
21 小时
 楼主| 发表于 2018-8-23 19:19:22 | 显示全部楼层
edmund1234 发表于 2018-8-23 18:13
给你说一个经历, 朋友的公司,有一个用stm103的项目, 搞了两个月, 负责的工程师说CPU跑的不够快, 要升 ...

回复 支持 反对

使用道具 举报

31

主题

1953

帖子

3

精华

论坛元老

Rank: 8Rank: 8

积分
4462
金钱
4462
注册时间
2018-5-11
在线时间
932 小时
发表于 2018-8-23 20:15:03 | 显示全部楼层
汇编和C语言比较,
使用库函数和直接操作寄存器比较。
我的开源链接 https://github.com/ShuifaHe/STM32.git  请关注,点赞支持哦。
回复 支持 反对

使用道具 举报

头像被屏蔽

12

主题

167

帖子

0

精华

禁止访问

积分
517
金钱
517
注册时间
2017-5-30
在线时间
110 小时
发表于 2018-8-23 21:52:38 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
签名被屏蔽
回复 支持 反对

使用道具 举报

头像被屏蔽

12

主题

167

帖子

0

精华

禁止访问

积分
517
金钱
517
注册时间
2017-5-30
在线时间
110 小时
发表于 2018-8-23 22:16:11 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
签名被屏蔽
回复 支持 反对

使用道具 举报

3

主题

32

帖子

0

精华

初级会员

Rank: 2

积分
66
金钱
66
注册时间
2018-7-12
在线时间
21 小时
 楼主| 发表于 2018-8-23 22:20:37 | 显示全部楼层
NULLFF 发表于 2018-8-23 21:52
看我的贴子:
http://bbs.mydigit.cn/read.php?tid=2495912&page=1
http://bbs.mydigit.cn/read.php?tid= ...

键盘扫描现在我用外部中断,感觉非常好,零失误,零误击,

配合编码芯片,可扩展按键,非常爽
回复 支持 反对

使用道具 举报

3

主题

32

帖子

0

精华

初级会员

Rank: 2

积分
66
金钱
66
注册时间
2018-7-12
在线时间
21 小时
 楼主| 发表于 2018-8-23 22:23:39 | 显示全部楼层
哆啦A萌 发表于 2018-8-23 16:56
人家都帮你设计好了砖头,你还要自己拿泥土去垒墙。

意思是,如果使用到时我还是要用汇编造一套轮子?
回复 支持 反对

使用道具 举报

2

主题

756

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4163
金钱
4163
注册时间
2017-10-24
在线时间
251 小时
发表于 2018-8-24 09:25:59 | 显示全部楼层
汇编和高级语言编程各有各的应用场景,撇开应用场景谈谁更有前途谁更好之类的就是在耍流氓。

如果一个工程要求极高的实时性,功能上不是特别复杂,并且成本敏感,那么可能的情况下就选择汇编。
如果一个工程要求的开发时间短,老板希望你尽快赶出样机;或者要求实现的功能复杂,啥都要有,那么不用想了高级语言。我甚至可以考虑用C++。

如果自己需要定制一个任务调度系统,或者就是操作系统,那么内核任务的切换,临界区的进入和退出,切换任务时当前任务执行状态的保存和新任务状态的恢复,这些功能是高级语言哪怕是C所难以做到的。大部分操作系统也都是用了C和汇编结合的方式。汇编语言的特性决定了这样的工作最适合用汇编的方法实现,但也同时限制了对于大型应用的应用——不然为什么计算机前辈们会不辞辛劳地将编程方法从BASIC ,C/C++,fortran,pascal,java这些早期的高级语言发展到现在的Python,Delphi,Ruby?

我觉得意法半导体开发出标准库和HAL库是绝壁正确的选择,不然STM32学习时间成本太高,很多人会望而却步。现在的编程思想就是,用最快的时间实现我想要的功能。STM32本身也确实有足够的资源可以应对普通的应用。
回到楼主的问题,在这个前提下,汇编开发几乎不可能得到大范围的应用,事实上除了写一些操作系统底层功能之外我还真没看到过有人真正地用汇编写实际工程的代码(也可能是和我的环境在学校里有关系)。并且C语言还有汇编没有的移植性,更是可以大大加速开发过程。另外说C慢的,你们有用过编译器的优化功能吗?

PS:如果自己玩,随便啦,自己想用啥用啥,用出优越感也没人说你。不过我也想说,确实汇编大法好,那种感觉是芯片把自己的心脏暴露给你,通过指令似乎能够看到背后的各种译码器选择器加法器,就是直接在操作硬件。不过要说开发,我站在高级语言这边。

十六进制带我飞。
回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
13
金钱
13
注册时间
2021-11-21
在线时间
1 小时
发表于 2021-11-21 17:13:15 | 显示全部楼层
edmund1234,你好,我想用STM32F030F4P6开发一个工程,需要用到定时器和ADC,在定时中要输出最高300KHz的可变波形,现在用C编程,只能到220KHz左右,想用汇编来做,但是没有弄过(51汇编以前熟),想请帮忙
回复 支持 反对

使用道具 举报

0

主题

8

帖子

0

精华

初级会员

Rank: 2

积分
196
金钱
196
注册时间
2016-4-3
在线时间
30 小时
发表于 2022-10-28 10:09:33 | 显示全部楼层
除了GCC都是收费软件,汇编谁能说个收费的出来。
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-2-25 22:17

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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