1,把段码放在code里,是为了节省RAM。如果放在前256字节内,查表时只要八位地址即可,所以会快些。ROM读取不会慢。单片机执行的每一条指令都是从ROM区读取的。
ROM区的内容是只读的,所以你不能将改变(程序运行中改变)的数组放进去。
2,单片机源程序首先要经过编译,生成机器码,下载到单片机中才可以运行,编译C程序时,从main()开始编译,如果main()程序中用到main()前面的程序,就会编译进去。然后下载到单片机ROM区。也就是烧到ROM区,在单片机运行中用到的变量,会放在RAM区。
3,局部就量或全局就量,都是放在RAM区的,因为RAM区可以读写,这样才可以保存临时数据。for(i=1;i<9;i++)前面肯定会有定义i,如 char i;单片机碰到char i;就会在RAM区分配一个字节,8bit给i用。然后再执行for(i=1;i<9;i++),这时i是可变的,因为执行的是RAM区的i地址内放的数据。
4,你理解的对,补充一下。全局变量一般占用RAM区较高位,如从32H开始,根据编译器不同而不同。且所占用RAM一直占用。局部变量一般临时存放在REGISTER中,执行速度较快。且当子程序执行完毕,资源回收。
上例是那个for循环就是用的局部变量,存放在寄存器中的,子程序执行完毕,寄存器可用作他用。
希望能回答你的问题。
1,把段码放在code里,是为了节省RAM。如果放在前256
字节
内,查表时只要八位地址即可,所以会快些。ROM读取不会慢。
单片机
执行的每一条
指令
都是从ROM区读取的。
ROM区的内容是只读的,所以你不能将改变(程序运行中改变)的数组放进去。
2,单片机
源程序
首先要经过编译,生成
机器码
,下载到单片机中才可以运行,编译C程序时,从main()开始编译,如果main()程序中用到main()前面的程序,就会编译进去。然后下载到单片机ROM区。也就是烧到ROM区,在单片机运行中用到的
变量
,会放在RAM区。
3,局部就量或全局就量,都是放在RAM区的,因为RAM区可以读写,这样才可以保存临时数据。for(i=1;i<9;i++)前面肯定会有
定义
i,如
char
i;单片机碰到char
i;就会在RAM区分配一个字节,8bit给i用。然后再执行for(i=1;i<9;i++),这时i是可变的,因为执行的是RAM区的i地址内放的数据。
4,你理解的对,补充一下。
全局变量
一般占用RAM区较高位,如从32H开始,根据
编译器
不同而不同。且所占用RAM一直占用。
局部变量
一般临时存放在REGISTER中,执行速度较快。且当
子程序
执行完毕,资源回收。
上例是那个for循环就是用的局部变量,存放在
寄存器
中的,子程序执行完毕,寄存器可用作他用。
希望能回答
你的问题
。
1,把段码放在code里,是为了节省RAM。如果放在前256字节内,查表时只要八位地址即可,所以会快些。ROM读取不会慢。单片机执行的每一条指令都是从ROM区读取的。
ROM区的内容是只读的,所以你不能将改变(程序运行中改变)的数组放进去。
2,单片机源程序首先要经过编译,生成机器码,下载到单片机中才可以运行,编译C程序时,从main()开始编译,如果main()程序中用到main()前面的程序,就会编译进去。然后下载到单片机ROM区。也就是烧到ROM区,在单片机运行中用到的变量,会放在RAM区。
3,局部就量或全局就量,都是放在RAM区的,因为RAM区可以读写,这样才可以保存临时数据。for(i=1;i<9;i++)前面肯定会有定义i,如
char
i;单片机碰到char
i;就会在RAM区分配一个字节,8bit给i用。然后再执行for(i=1;i<9;i++),这时i是可变的,因为执行的是RAM区的i地址内放的数据。
4,你理解的对,补充一下。全局变量一般占用RAM区较高位,如从32H开始,根据编译器不同而不同。且所占用RAM一直占用。局部变量一般临时存放在REGISTER中,执行速度较快。且当子程序执行完毕,资源回收。
上例是那个for循环就是用的局部变量,存放在寄存器中的,子程序执行完毕,寄存器可用作他用。
希望能回答你的问题。