单片机c语言的一些疑问

来源:百度知道 编辑:UC知道 时间:2024/06/26 02:00:33
首先是const定义的数组我看他们说 const定义的数组省内存 怎么个什么法 如果要省内存直接定义为code不就得了直接去了rom不是更省内存.

还有就是c语言的变量不是需要内存吗, 单片机是怎么分配内存的,是把写好的程序放进单片机让后用程序指针一条一条的指,如果发现有变量就分配内存 还是在Keil 软件中编译时就分好了那些因该是放在内存中,那些是放在rom中.

首先是const定义的数组我看他们说 const定义的数组省内存 怎么个什么法 如果要省内存直接定义为code不就得了直接去了rom不是更省内存.

答:
const定义的数组省内存?没这个说法。
const定义的数组只是在运行时不允许改变而已。
如:
const char data aqq[3]={1,2,3};
如果执行这句:
aqq[1]++;则出错。如果在定义时加上code则定义在代码区:
const code aqq[23]={1,2,3};

还有就是c语言的变量不是需要内存吗, 单片机是怎么分配内存的,是把写好的程序放进单片机让后用程序指针一条一条的指,

答:
单片机分配内存实际上很复杂:
定义的数据不同,分配内存的方式就不同。比如Int/ char /long int等数据类型,定义时看似简单,事实上编译器要化很多代码为它们分配不同的数据空间。因在汇编语言里没有这些数据类型,你把C语言转变成汇编,就要把C的数据让汇编能“理解”。比如INT占两个字节,char占一个字节。在代码里就要制定这样的“规则”来进行数据传递。
至于是放在ROM还是RAM里,要看定义时的方式:加了CODE就在ROM里,否则在RAM里。

如果发现有变量就分配内存 还是在Keil 软件中编译时就分好了那些因该是放在内存中,那些是放在rom中.

答:
在Keil 软件中编译时就分好了那些应该是放在内存中,那些是放在rom中.

但是在RAM里变量的存放就复杂了。程序要根据不同的状态决定怎样分配空间,而且在运行中这些分配方式还可能改变。比如一些变量在用过一遍后程序发现不再用了,就会把它的存储区抹去以节约空间。这叫“覆盖”。

如果楼主一开始学了汇编语言,理解起来比较容易。一开始就从C语言学,会碰到这些问题。

const定义的是常量,为了省内存,一般加code定义,从而将它放进ROM中去.C语言中,变量是有生