

136个人同意答案
程序可以分为控件和算法. 由于MCU资源有限,因此主要面向控制. 高级语言更适合算法,而低级语言更适合控制.
主要用于播放单片机的控制,但最好组装. 毕竟,许多操作都有直接对应的指令,并且用C模拟非常麻烦. 尽管编译器会在一定程度上针对相应的汇编指令进行优化.

以AVR微控制器为例. 将高电平或低电平输出到GPIO引脚.
C代码:
PORTB | = _BV(PB0);
PORTB&=〜_BV(PB0);

组装代码:
SBI PORTB单片机汇编,PB0
CBI PORTB,PB0
可以看出,汇编控制引脚简单明了,但是必须编写C非常麻烦,因为无法直接控制这些位. 尽管生成最多的机器代码可以相同.

随着程序复杂度的增加,可以体现出高级语言的优势. 但是至少阅读该程序集是有意义的.
几年前,我在STM32上编写了一个程序,并且调用串行端口始终失败. 后来,示波器发现下位计算机的串行端口频率错误. 但是C代码与官方库完全相同. 在疯狂的情况下,我反汇编了C生成的ELF文件,并跟踪了几天,发现我修改了C启动之前的启动脚本,并删除了bss部分的初始化. ST的官方标准库依赖于此预初始化的数组. 正是这个过程,我敢于阅读一些ARM thumb程序集,并在C语言的主要功能之前弄清楚了那些东西. 如果只是说实话,就不会使用C来解决此问题.
因此,我的建议是学习在汇编语言中编写小型程序的能力单片机汇编,了解反汇编结果以及理解几种基本的汇编级优化方法的能力. 其余这些规模较大的程序都用C语言处理.
编辑于2016-01-06


75个人同意答案
用C语言学习“ SCM编程”.
组装是学习“ SCM”的正确姿势. 尽管这看起来很过时,但是当您尝试使用汇编语言编写某些东西时,尤其是在具有数据采集和处理功能的应用程序中,手动操作管理通用寄存器和RAM时,您自然会了解什么是单芯片计算机. 架构,编译器和程序设计,以及许多相关的东西,以及C语言的真正优势.
SCM不是凭空制造的. 编写汇编程序以学习“ SCM”实际上是帮助您解决此问题. 当然,如果您只想使用它,则确实不需要学习汇编.
编辑于2015-12-29
本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/dianqi/article-192505-1.html
如果不理睬