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

发布网友 发布时间:2022-04-24 01:42

我来回答

4个回答

热心网友 时间:2023-10-19 10:33

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

内容拓展:

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

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

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

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

热心网友 时间:2023-10-19 10:34

在嵌入式开发中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程序有更好的执行效率。追问感谢仁兄一段肺腑之言!

热心网友 时间:2023-10-19 10:34

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

热心网友 时间:2023-10-19 10:35

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

热心网友 时间:2023-10-19 10:33

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

内容拓展:

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

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

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

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

热心网友 时间:2023-10-19 10:34

在嵌入式开发中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程序有更好的执行效率。追问感谢仁兄一段肺腑之言!

热心网友 时间:2023-10-19 10:34

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

热心网友 时间:2023-10-19 10:35

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

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com