标题: C语言程序,为啥带上结构体就编译不成功呢? [打印本页]

作者: dhmawen    时间: 2021-1-16 16:34
标题: C语言程序,为啥带上结构体就编译不成功呢?
求大师们指教,为啥带上结构体就编译不成功呢

1.PNG (162.9 KB, 下载次数: 106)

1.PNG

2.PNG (149.68 KB, 下载次数: 103)

2.PNG

作者: suncat0504    时间: 2021-1-17 20:00
单看table的定义实体,更像一个二维数组。结构体的定义和初始化可以这样用的吗?
作者: wojiaoguogai    时间: 2021-1-17 21:37
是要实参化14个keytable吗?语法是错误的,只能一个个定义
作者: zpmpok001    时间: 2021-1-17 22:43
type 是不对的

作者: munuc_w    时间: 2021-1-18 09:18
结构体定义没问题,初始化不对过程不对。
作者: 烈火    时间: 2021-1-18 09:40

结构体使用错误
作者: zhai1995    时间: 2021-1-18 10:21
struct stu{
                     char *name;
                      int num;
                        char sex;
                        float score;
}class[5] = {
                         {"Li ping", 5, 'M', 45},
                        {"Zhang ping", 4, 'M', 62.5},
                        {"He fang", 1, 'F', 92.5},
                        {"Cheng ling", 2, 'F', 87},
                        {"Wang ming", 3, 'M', 58}
};


这样试下
作者: xhaity    时间: 2021-1-18 10:24
你用的什么mcu, 应该是ram不够用了,把table定义成常量试试
作者: dhmawen    时间: 2021-1-23 11:48
zhai1995 发表于 2021-1-18 10:21
struct stu{
                     char *name;
                      int num;

试了一次,效果一样,想做菜单十组能编译,多了也不行
作者: dhmawen    时间: 2021-1-23 11:53
xhaity 发表于 2021-1-18 10:24
你用的什么mcu, 应该是ram不够用了,把table定义成常量试试

发现个规律编译时data超过128就不成功,求教从哪里可以设置吗
作者: rayin    时间: 2021-1-23 16:51
51单片机256byte RAM, 这么定义不够用,ram使用要节省再节省
作者: iLike.    时间: 2021-1-23 16:58
不能这样子定义数组吧
作者: rundstedt    时间: 2021-1-23 17:14
你的data超了。51的data最大120个字节。
作者: rundstedt    时间: 2021-1-23 17:22
dhmawen 发表于 2021-1-23 11:53
发现个规律编译时data超过128就不成功,求教从哪里可以设置吗

你既然选用了51这么古老的东西,就应该忍受51的各种不合理结构,在任何地方都不可以设置,除非你换单片机,不用51。

51内部RAM是256bytes,但是高128bytes直接寻址访问的是SFR,只有低128字节可用,R0~R7通用寄存器会占用8个字节,实际可用只有120bytes。想用到高128bytes必须加idata修饰,将会用R0、R1间接寻址,速度会变慢,但是你要忍,选择错误的内核型号是你的责任。有的51利用外扩地址空间扩展出更多RAM,那些就必须加xdata关键字来访问。速度会变的非常慢,但是你要忍,选择错误的内核型号是你的责任。
作者: dhmawen    时间: 2021-1-30 16:37
rundstedt 发表于 2021-1-23 17:22
你既然选用了51这么古老的东西,就应该忍受51的各种不合理结构,在任何地方都不可以设置,除非你换单片机 ...

刚刚开始学,练习做菜单。想别的办法了
作者: pcbboy    时间: 2021-2-4 16:27
使用xdata
作者: xhaity    时间: 2021-2-5 00:38
code key_table .....   用code关键字或则const关键字,把数据常量定义到flash区,试试
作者: jizhongbiao    时间: 2021-2-5 09:15
内部ram不够了 用xdata修饰然后在keil里面设置large类型即可





欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1