单片机C语言与汇编的区别

①、单片机C语言,其变量的内存开辟是如何进行的?难道是编译器,在编译过程中智能地加入分配与回收的代码?关键之处在于我所做的程序,如何保证其没有内存溢出错误?如果我进行的是递归运算,这样的话,内存需求是很难自己计算的。
②、单片机C语言在变量定义上是否会受到约束?比如浮点型数据的乘除运算,通过汇编还写,代码相当复杂,如果直接C语言来写,岂不过份简单?
③、单片机C语言生成的hex文件中,指令及数据的ROM的地址分布是否编译器自动分配?可否用户进行分配?

目前就是这些问题,我有一定C语言基础,看过单片机C语言程序以后,发现其本质上可能就是多了些特殊的宏定义,然而似乎没有什么其它的本质区别。借了两本关于单片机C的书,粗略看了下没看到我想知道的重点……
还请各位高手给予解释!

1:
c语言写的单片机程序,先由1个程序(好像是c51.exe)编译,编译完成后,变量的存储空间大小已经安排好,只是还没分配具体地址(地址浮动),接下来有另一个程序(好像是a51.exe)进行连接,连接以后,具体地址确定
回收代码?应该是回收存储空间
如果变量过多,编译会提示数据段too large,要保证其没有内存溢出错误,主要考虑堆栈是否溢出,要靠经验
单片机c语言一般禁止递归,如果一定要,需要加修饰符ree....(笔记的怎么拼了,书上有的),中断函数禁止递归。一般都避免用递归运算,单片机毕竟不是PC,会影响速度的,要递归的话,用DSP芯片更合适,总之,要会挑合适的芯片
2:
变量的大小(位数)一般和芯片累加器的位数一样,比如51常用8位的,因为它是8位单片机
单片机可以定义位变量,但是不可以定义位数组
用c语言写只是看着简单,实际生成的代码量是最多的,用于控制的单片机几乎不用浮点数运算,不仅慢还麻烦还占地方,如果是DSP芯片,本身有适合的硬件结构,会好很多
3:
一般是自动分配的,
可以c语言和汇编语言混合编程,也可以用Keil C在线汇编

多看几本书,多多练习
Keil C可以反汇编,有兴趣可以研究研究
温馨提示:答案为网友推荐,仅供参考
相似回答