学习STM32一定要用到汇编语言吗?我只会C语言怎么办?

如题所述

学stm32汇编不是必须会用的,但是如果懂汇编,会使你写的c程序有更好的执行效率。

内容拓展:

一、在嵌入式开发中C语言和汇编两种语言相比。汇编作为低级语言,是仅次于机器语言和硬件联系最紧密的语言;而C语言,严格的说也只能算是半个高级语言,相对于其他高级语言来说。

二、这两者比较直观的差异是:汇编语言的实时性非常好,但可读性差,可移植性不强;相反,C语言的可读性强,可移植性高,但实时性相对汇编比较差。

三、利用C语言编写单片机程序,不用考虑程序的初始化地址,不用考虑ACC,PSW以及工作寄存器的保护,不用考虑溢出进位CY。而汇编这些都需要考虑到。

四、当然c语言的简单与方便这是汇编不能比的,个人觉得把单片机c语言和汇编语言结合来编成是最好的。在需要很精确的地方就嵌套一个汇编的子程序,其他就用c语言。

温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2018-02-26
在嵌入式开发中C语言和汇编两种语言相比。汇编作为低级语言,是仅次于机器语言和硬件联系最紧密的语言;而C语言,严格的说也只能算是半个高级语言,相对于其他高级语言来说。这两者比较直观的差异是:汇编语言的实时性非常好,但可读性差,可移植性不强;相反,C语言的可读性强,可移植性高,但实时性相对汇编比较差。
  利用C语言编写单片机程序,不用考虑程序的初始化地址,不用考虑ACC,PSW以及工作寄存器的保护,不用考虑溢出进位CY。而汇编这些都需要考虑到。
  比如我在编写温度计程序的时候遇到了这个问题,因为以前是用汇编写的,现在翻译成C,在处理负数转换的时候遇到了问题。因为如果温度计转换芯片读出来的是负数,他是以反码的形式表示的,需要对其取反加一。这样就不得不考虑加一后可能溢出的情况。在汇编里这种情况处理起来很简单,低位字节的加法用ADD指令,高位字节用ADDC,这样,如果低位有溢出,CY会置一,高字节ADDC在计算时会将进位CY计算在内。但在C里面就不是这回事了。低字节有溢出,不会影响高字节的加法,这样计算的结果是错误的。请教了下高手,解决方法可以嵌入汇编,也可以直接使用ACC和CY,即每次高位的加法前要先判断CY的值,为1则多加1,为0则正常加法。因为在引用的reg51.h的头文件里包含了这些寄存器和标志位的定义。
当然c语言的简单与方便这是汇编不能比的,我个人觉得把单片机c语言和汇编语言结合来编成是最好的。在需要很精确的地方就嵌套一个汇编的子程序,其他就用c语言。
  所以说,学stm32汇编不是必须的,但是如果懂汇编,会使你写的c程序有更好的执行效率。追问

感谢仁兄一段肺腑之言!

第2个回答  推荐于2017-11-27
其实说真的,不会汇编完全没什么,因为STM32编程是用库函数来编的,我也不汇编,我也是刚开始自学STM32,感觉跟学51思路是差不多的,只是STM32的资源丰富,有一大堆寄存器,比51多上百倍,你想记住,我觉得几乎不可能,当然你写库函数其实就是在对寄存器进行配置,只不过是间接地配置而已,如果你要自学STM32的话,我建议你买“正点原子”的战舰版,讲得很详细,400块左右吧,我买的是奋斗的STM32,也是400多,但是教程没有正点原子讲得好追问

什么叫正点原子,开发板吗

追答

淘宝店铺嘛

追问

正常的话一块芯片多少钱

追答

你不可能只买芯片吧,你只买芯片没有开发板有什么用,没有外设你怎么学?你如何仿真?单是芯片大概是十几块钱左右吧

追问

那你说选用那种开发板比较好

追答

就我说那个啊,正点原子的战舰版的或者mini版的,战舰版的外设多一点,当然也会贵一点,外设多呢学得就全面,至于买哪种你自己看

追问

带不 带驱动软件?

追答

有很多例子的啊,有代码

追问

下载单片机用的驱动软件有没有

本回答被提问者和网友采纳
第3个回答  2016-01-10
STM32现在可以用官方提供的C函数库开发,大大缩短开发时间,不过函数库只是用来配置外设,关键的算法还是得自己写。至于汇编一般用于解决C语言无法解决的问题,如初始化C语言运行环境(这个其实厂商提供的启动文件帮我们搞定了),操作堆栈(操作系统里的上下文切换需要用到汇编),对速度要求特别高的算法等。建议还是学一下汇编,毕竟如果要移植操作系统的话,不懂汇编是不行的,而且懂汇编的话,写C就知道怎么写效率会高一些。
相似回答