OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 5852|回复: 4

code声明在其他c文件主函数extern无法正常运行的问题

[复制链接]

17

主题

97

帖子

0

精华

高级会员

Rank: 4

积分
822
金钱
822
注册时间
2020-7-21
在线时间
85 小时
发表于 2021-6-18 21:17:47 | 显示全部楼层 |阅读模式
1金钱
本帖最后由 16424740 于 2021-6-19 10:50 编辑

最近做了一个52板子的可爱的LCD显示的音乐盒,能实现播放、暂停、切歌、停止并重新播放以及弹奏功能,并且会在LCD1602显示状态。
目前已经基本开发完成,我们采用了多文件编程的形式,并且配了大量注释,有很高的可移植性。目前尝试完成升降调的开发。完成后考虑开源

但是我们开发过程中遇到过一些问题:

我们用u16 code存储歌曲数据。本来在ROM这个文件夹里有musicLib这个c文件是打算用来存储歌曲信息的。但是code定义的变量在主函数extern u16 code Astronomia[]后,编译器不会报错,但实际上并不能正常播放。必须将code 的数据全部移到main.c才能正常使用。这导致了main.c有三百多行代码,我们自己看着也头疼。

因此希望有相关开发经验或者了解keil编译原理的大神能够解释一下这个问题,能否有相应的解决方案。

游客,如果您要查看本帖隐藏内容请回复




发光

发光
背面.jpg
正面.jpg

keil界面

keil界面

正面

正面

背面

背面

运行快照

运行快照

最佳答案

查看完整内容[请看2#楼]

从51黑科技问到了解决方案:在main.c文件里,定义一个 u16 *pdata = &Astronomia[0]; 应该考虑用指针来解决问题。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

17

主题

97

帖子

0

精华

高级会员

Rank: 4

积分
822
金钱
822
注册时间
2020-7-21
在线时间
85 小时
 楼主| 发表于 2021-6-18 21:17:48 | 显示全部楼层
从51黑科技问到了解决方案:在main.c文件里,定义一个 u16 *pdata = &Astronomia[0]; 应该考虑用指针来解决问题。
回复

使用道具 举报

17

主题

97

帖子

0

精华

高级会员

Rank: 4

积分
822
金钱
822
注册时间
2020-7-21
在线时间
85 小时
 楼主| 发表于 2021-6-19 10:47:54 | 显示全部楼层
在其他论坛提出的了问题,有网友建议用h文件引用,不过这样会带来一个新的问题。即该h文件只能被引用一次,不知道有没有更好的方案
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165309
金钱
165309
注册时间
2010-12-1
在线时间
2108 小时
发表于 2021-6-19 23:12:12 | 显示全部楼层
声明成const 数组试试看?
回复

使用道具 举报

17

主题

97

帖子

0

精华

高级会员

Rank: 4

积分
822
金钱
822
注册时间
2020-7-21
在线时间
85 小时
 楼主| 发表于 2021-6-20 07:47:32 来自手机 | 显示全部楼层
正点原子 发表于 2021-6-19 23:12
声明成const 数组试试看?

亲测无效
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-23 02:30

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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