找回密码
 注册
关于网站域名变更的通知
查看: 506|回复: 4
打印 上一主题 下一主题

单片机有没有必要用汇编讲

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2021-8-6 09:47 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
单片机有没有必要用汇编讲4 T/ ~8 |# b* M0 B

该用户从未签到

2#
发表于 2021-8-6 11:03 | 只看该作者
程序这事可以分为控制和算法。因为单片机资源有限,主要面向控制。越高级的语言越适合做算法,而越低级的语言越适合做控制。对单片机这种主要就是玩控制的,还是汇编好用一些。毕竟很多操作都有直接对应的指令,而用C模拟则很闹心。尽管编译器会一定程度上优化为对应的汇编指令。举一个AVR单片机的例子吧。给一个GPIO引脚输出高电平或低电平。C代码:PORTB |= _BV(PB0)ORTB &= ~_BV(PB0);汇编代码:SBI PORTB,PB0CBI PORTB,PB0可见汇编控制引脚简单明了,而C则因为没有直接控制位的办法而不得不很繁琐的写出来。尽管两者最重生成的机器码可以是一样的。随着程序复杂性的提高,高级语言的优点才能体现出来。但至少能读懂汇编还是很有意义的。几年前我在STM32上写程序,调用串口就总是失败。后来上示波器发现下位机的串口频率有误。但C代码跟官方库完全一样。抓狂之下反汇编了C生成的ELF文件,又跟踪了几天才发现是C启动前的startup脚本被我修改掉了,去掉了bss段的初始化。而ST的官方标准库则依赖这个预先初始化的数组。而正是此次过程,我硬着头皮看了一些ARM thumb汇编,还搞清楚了C语言main函数之前的那些事情。如果只是老老实实的用C是没发解决这个问题的。所以我的建议就是,学会用汇编写小型程序的能力,能看懂反汇编结果,了解几个基本的汇编级优化方法。其余上规模的程序用C搞定。

该用户从未签到

3#
发表于 2021-8-6 11:27 | 只看该作者
用C语言,是学习“单片机编程”。用汇编,才是学习“单片机”的正确姿势,虽然这看上去相当old-fashion了,但是当你试着用汇编去写点东西,尤其是在有数据采集和处理的应用里面,手动管理一把通用寄存器和RAM的时候,自然会明白什么是单片机、计算机体系结构和编译器还有程序设计等等一堆相关的东西,还有C语言真正伟大之处。单片机不是凭空造出来的,写汇编学习“单片机”,其实就是帮你理清楚这一票东西。当然了,如果只追求会用的话,的确不需要学汇编

该用户从未签到

4#
发表于 2021-8-6 13:10 | 只看该作者
我的观点是:汇编要学,但是坚持用C来编程。如果需要使用特定的汇编指令,研究一下能否通过C编译得到。如果实在没有办法用C,那么再想办法提取处不可替代的部分用汇编实现。学会如何用C来产生需要的汇编指令。学会如何用C代码编译出优化的汇编指令。学会如何合理把汇编指令嵌入到C代码当中。如果能够做到上面这几条,那么几乎可以消灭99%的汇编代码
; j) L1 a7 [' K$ }+ D7 U

该用户从未签到

5#
发表于 2021-9-9 08:40 | 只看该作者
看情况了,两钟语言都需要
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-7-20 06:31 , Processed in 0.125000 second(s), 23 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

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