单片机 C语言 关于数组的问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了单片机 C语言 关于数组的问题相关的知识,希望对你有一定的参考价值。

#include <reg52.h>
#define uchar unsigned char //声明uchar就是unsigned char
#define uint unsigned int //声明uint就是unsigned int
uchar code table1[]="I LOVE YOU!";
uchar code table2[]=" 51-MIC.";

/* uchar code table3[]="Hello everyone!"
uchar code table4[]="Welcome to here!" */

sbit lcden=P2^2; //1602 E脚
sbit lcdrs=P2^0; // RS脚
sbit lcdrw=P2^1; // R/W脚
uchar num ;

这个程序把table3,table4注释掉后没什么问题,不释掉就会报 error C183: unmodifiable lvalue
请问这是为什么
程序太长不能全部上传,以上只是最前面一部分

你注释的内容没有分号,去掉注释你把分号加上了么?追问

不是这个问题,在百度找了相关问题,我刚把code写成data就没事了,为什么
刚加了;号也可以,这又是为什么

追答

加code意味着你是把程序存放于rom之中,程序运行中无法修改,所以会提示你那个错误。怀疑设置问题,你可以考虑下,在[]之间加个空格,改为[ ],养成好习惯了。

参考技术A table3和table4定义后面没有分号;
定义没有什么问题,提示是不能修改的左值,是不是你程序里面使用到了table3和table4?修改了table3和table4里面的数据?追问

程序后面还没写完,我想是没后面没加;号(刚加上去就好了)
还有就是我把code换成data也没事,不知道这是为什么

追答

code换成data一般没事,除非你RAM空间爆了。code含义是该变量放在代码区,也就是Flash ROM区,data含义是数据区,RAM区。如果不需要修改字符串行数据,建议用code,因为ROM区一般比RAM区大很多。

参考技术B 后面少“;”追问

程序后面还没写完,我想是没后面没加;号(刚加上去就好了)
还有就是我把code换成data也没事,不知道这是为什么

追答

code 是说数据放在ROM中
data 是放在RAM中,的直接数据区

以上是关于单片机 C语言 关于数组的问题的主要内容,如果未能解决你的问题,请参考以下文章

单片机C语言数组最多能定义多少个元素?

51单片机C语言编程问题,关于指针的运用问题,菜鸟求解求。

有关于单片机C语言,小问题,下面这段程序有个num参数,前面没有赋值,后面直接num++,是否num默认为0

单片机C语言里怎么定义BYTE型的数组?

单片机c语言程序中,数组最多能有几个元素?为啥我定定义了一个全局的数组,unsigned cha

Keil 单片机C语言编译软件的使用(涉及指针数组)