找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3732|回复: 17
收起左侧

C语言程序,为啥带上结构体就编译不成功呢?

  [复制链接]
ID:167760 发表于 2021-1-16 16:34 | 显示全部楼层 |阅读模式
求大师们指教,为啥带上结构体就编译不成功呢
1.PNG
2.PNG
回复

使用道具 举报

ID:517466 发表于 2021-1-17 20:00 | 显示全部楼层
单看table的定义实体,更像一个二维数组。结构体的定义和初始化可以这样用的吗?
回复

使用道具 举报

ID:415064 发表于 2021-1-17 21:37 | 显示全部楼层
是要实参化14个keytable吗?语法是错误的,只能一个个定义
回复

使用道具 举报

ID:878235 发表于 2021-1-17 22:43 | 显示全部楼层
type 是不对的
回复

使用道具 举报

ID:752974 发表于 2021-1-18 09:18 | 显示全部楼层
结构体定义没问题,初始化不对过程不对。
回复

使用道具 举报

ID:744327 发表于 2021-1-18 09:40 | 显示全部楼层

结构体使用错误
回复

使用道具 举报

ID:267932 发表于 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}
};


这样试下
回复

使用道具 举报

ID:373388 发表于 2021-1-18 10:24 | 显示全部楼层
你用的什么mcu, 应该是ram不够用了,把table定义成常量试试
回复

使用道具 举报

ID:167760 发表于 2021-1-23 11:48 | 显示全部楼层
zhai1995 发表于 2021-1-18 10:21
struct stu{
                     char *name;
                      int num;

试了一次,效果一样,想做菜单十组能编译,多了也不行
回复

使用道具 举报

ID:167760 发表于 2021-1-23 11:53 | 显示全部楼层
xhaity 发表于 2021-1-18 10:24
你用的什么mcu, 应该是ram不够用了,把table定义成常量试试

发现个规律编译时data超过128就不成功,求教从哪里可以设置吗
回复

使用道具 举报

ID:517951 发表于 2021-1-23 16:51 | 显示全部楼层
51单片机256byte RAM, 这么定义不够用,ram使用要节省再节省
回复

使用道具 举报

ID:626331 发表于 2021-1-23 16:58 | 显示全部楼层
不能这样子定义数组吧
回复

使用道具 举报

ID:879809 发表于 2021-1-23 17:14 | 显示全部楼层
你的data超了。51的data最大120个字节。
回复

使用道具 举报

ID:879809 发表于 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关键字来访问。速度会变的非常慢,但是你要忍,选择错误的内核型号是你的责任。

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:167760 发表于 2021-1-30 16:37 | 显示全部楼层
rundstedt 发表于 2021-1-23 17:22
你既然选用了51这么古老的东西,就应该忍受51的各种不合理结构,在任何地方都不可以设置,除非你换单片机 ...

123.PNG 124.PNG 刚刚开始学,练习做菜单。想别的办法了
回复

使用道具 举报

ID:25310 发表于 2021-2-4 16:27 | 显示全部楼层
使用xdata
回复

使用道具 举报

ID:373388 发表于 2021-2-5 00:38 | 显示全部楼层
code key_table .....   用code关键字或则const关键字,把数据常量定义到flash区,试试

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:130230 发表于 2021-2-5 09:15 | 显示全部楼层
内部ram不够了 用xdata修饰然后在keil里面设置large类型即可
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表