MSP430如何将数组定义在 ROM中,因为数组过大不能放在RAM中。 5
展开全部
不知道你写过51的汇编没有,在汇编语言中定义一个八位二进制数组是这样的:
table DB 00H,00H;这样就定义了一个含两个0的数组。在使用数组数据是命令是这样的:
MOVC r1,table;r1是RAM里的一个寄存器,这里的MOVC是ROM向RAM送数据时的专用指令,所以很清楚,你在程序中定义数组的话,数组其实就是被定义在ROM里的。这一点其实也好理解,因为ROM是程序存储器,数组也是程序一部分,也会被编译,当然会在ROM里了。这种问题如果写过汇编就很清楚了,所以学单片机汇编还是很有用的。因为还就没写汇编程序了,所以可能会有点小的记忆错误,求大神不喷。
table DB 00H,00H;这样就定义了一个含两个0的数组。在使用数组数据是命令是这样的:
MOVC r1,table;r1是RAM里的一个寄存器,这里的MOVC是ROM向RAM送数据时的专用指令,所以很清楚,你在程序中定义数组的话,数组其实就是被定义在ROM里的。这一点其实也好理解,因为ROM是程序存储器,数组也是程序一部分,也会被编译,当然会在ROM里了。这种问题如果写过汇编就很清楚了,所以学单片机汇编还是很有用的。因为还就没写汇编程序了,所以可能会有点小的记忆错误,求大神不喷。
追问
我找到原因了,数组是放在ROM中的,执行时会拷贝到RAM中,使用const修饰就可以了。
追答
吧编译器通常不为普通const常量分配存储空间,而是将它们保存在符号表中,这使得它成为一个编译期间的常量,没有了存储与读内存的操作。但是在运行过程中,还是会在RAM中有一份拷贝,只是只有一份,如果没有修饰的话,可能会有好几份。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询