单片机c语言的一些疑问
首先是const定义的数组我看他们说const定义的数组省内存怎么个什么法如果要省内存直接定义为code不就得了直接去了rom不是更省内存.还有就是c语言的变量不是需要内...
首先是const定义的数组我看他们说 const定义的数组省内存 怎么个什么法 如果要省内存直接定义为code不就得了直接去了rom不是更省内存. 还有就是c语言的变量不是需要内存吗, 单片机是怎么分配内存的,是把写好的程序放进单片机让后用程序指针一条一条的指,如果发现有变量就分配内存 还是在Keil 软件中编译时就分好了那些因该是放在内存中,那些是放在rom中.
展开
1个回答
展开全部
首先是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不是更省内存.
答:
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语言学,会碰到这些问题。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询