找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2698|回复: 17
打印 上一主题 下一主题
收起左侧

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

  [复制链接]
跳转到指定楼层
楼主
求大师们指教,为啥带上结构体就编译不成功呢

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

1.PNG

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

2.PNG
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
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 是不对的
回复

使用道具 举报

5#
ID:752974 发表于 2021-1-18 09:18 | 只看该作者
结构体定义没问题,初始化不对过程不对。
回复

使用道具 举报

6#
ID:744327 发表于 2021-1-18 09:40 | 只看该作者

结构体使用错误
回复

使用道具 举报

7#
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}
};


这样试下
回复

使用道具 举报

8#
ID:373388 发表于 2021-1-18 10:24 | 只看该作者
你用的什么mcu, 应该是ram不够用了,把table定义成常量试试
回复

使用道具 举报

9#
ID:167760 发表于 2021-1-23 11:48 | 只看该作者
zhai1995 发表于 2021-1-18 10:21
struct stu{
                     char *name;
                      int num;

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

使用道具 举报

10#
ID:167760 发表于 2021-1-23 11:53 | 只看该作者
xhaity 发表于 2021-1-18 10:24
你用的什么mcu, 应该是ram不够用了,把table定义成常量试试

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

使用道具 举报

11#
ID:517951 发表于 2021-1-23 16:51 | 只看该作者
51单片机256byte RAM, 这么定义不够用,ram使用要节省再节省
回复

使用道具 举报

12#
ID:626331 发表于 2021-1-23 16:58 | 只看该作者
不能这样子定义数组吧
回复

使用道具 举报

13#
ID:879809 发表于 2021-1-23 17:14 | 只看该作者
你的data超了。51的data最大120个字节。
回复

使用道具 举报

14#
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 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

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

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

使用道具 举报

16#
ID:25310 发表于 2021-2-4 16:27 | 只看该作者
使用xdata
回复

使用道具 举报

17#
ID:373388 发表于 2021-2-5 00:38 | 只看该作者
code key_table .....   用code关键字或则const关键字,把数据常量定义到flash区,试试

评分

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

查看全部评分

回复

使用道具 举报

18#
ID:130230 发表于 2021-2-5 09:15 | 只看该作者
内部ram不够了 用xdata修饰然后在keil里面设置large类型即可
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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