OpenEdv-开源电子网

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

IMX6ULL, LCD实验编译报错,inline问题

[复制链接]

2

主题

6

帖子

0

精华

新手上路

积分
26
金钱
26
注册时间
2022-1-20
在线时间
2 小时
发表于 2022-1-20 11:34:19 | 显示全部楼层 |阅读模式
最近刚开始学习linux arm 的QT开发,用的正点原子自带的工程,编译报错同时有警报如图一,显示 undefined reference to `lcd_drawpoint',这个是正点原子的画点函数。经差错好像是因为inline unsigned int lcd_readpoint(unsigned short x, unsigned short y)。这个函数定义的时候用了inline,
百度一下他的用法:
1.inline定义的类的内联函数,函数的代码被放入符号表中,在使用时直接进行替换(像宏一样展开),没有了调用的开销,效率也很高。
2.很明显,类的内联函数也是一个真正的函数,编译器在调用一个内联函数时,会首先检查它的参数的类型,保证调用正确。然后进行一系列的相关检查,就像对待任何一个真正的函数一样。这样就消除了它的隐患和局限性。

3.inline可以作为某个类的成员函数,当然就可以在其中使用所在类的保护成员及私有成员。


                          图一

因为只是想点亮工程测试代码目前并不需要优化,所以第二次尝试直接吧inline删除,编译没有错误,但是函数运行会卡死。led不闪烁,显示器背景色也不会1000ms刷新,于是调用串口输出查询代码卡在哪了,测试发现卡在了图片二的267行的位置。
运行能进入lcd_show_string函数的 while里面,但是会卡死在lcd_showchar的前面,不知道为什么进不去这个函数。本人用的也是ubuntu64位的虚拟机。开始怀疑是代码优化的问题于是吧Makefile 里面的 -O2删除,发现没有作用,还是卡死,除非删除main()里面的lcd_show_string函数,程序才不会卡死

                       图片二
百度了一下原因,感觉没有找到和我出现类似错误的,我怀疑是不是我的gcc编译器有问题就查询了一下版本,gcc version 9.3.0 (Ubuntu 9.3.0-17ubuntu1~20.04) 是9.03版本,我看左神用的是4.9.3的版本,不知道是否跟版本有关?
为了解决这个问题,尝试在makefile中使用-O优化函数,不起作用
最终是在inline的前面重新声明了非inline的原型函数才解决问题。如图三

                           图三,
重新编译错误消失,同时运行时候也不会卡死了屏幕能刷新颜色同时显示版本号等字符串了。
不知有没有人有类似的错,有大佬能大概帮我分析一下原因吗




图1

图1
图片2.png
图片1.png
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

13

主题

644

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1960
金钱
1960
注册时间
2021-4-16
在线时间
500 小时
发表于 2022-1-21 15:26:28 | 显示全部楼层
回复 支持 反对

使用道具 举报

0

主题

4

帖子

0

精华

初级会员

Rank: 2

积分
75
金钱
75
注册时间
2019-7-23
在线时间
18 小时
发表于 2022-1-23 16:17:42 | 显示全部楼层
同问,gcc 9.3.0
回复 支持 反对

使用道具 举报

2

主题

6

帖子

0

精华

新手上路

积分
26
金钱
26
注册时间
2022-1-20
在线时间
2 小时
 楼主| 发表于 2022-1-26 17:01:40 | 显示全部楼层

我的这个做法只能到这个实验管用,到uboot的时候编译uboot又报错了,,,,这回不会解决了,,,有没有人也遇到这样的情况
回复 支持 反对

使用道具 举报

2

主题

6

帖子

0

精华

新手上路

积分
26
金钱
26
注册时间
2022-1-20
在线时间
2 小时
 楼主| 发表于 2022-1-26 17:21:45 | 显示全部楼层

https://blog.csdn.net/angrident/article/details/121701353

可以试试这个连接,这个是ubuntu20.04 版本 吧gcc从9.3.0 降低到5.4的版本的,我正在试
回复 支持 反对

使用道具 举报

0

主题

4

帖子

0

精华

初级会员

Rank: 2

积分
75
金钱
75
注册时间
2019-7-23
在线时间
18 小时
发表于 2022-2-15 21:26:08 | 显示全部楼层
找到办法了,使用  update-alternatives 切换版本 切换到4.9.4的版本在编译就好了
回复 支持 反对

使用道具 举报

0

主题

2

帖子

0

精华

新手上路

积分
21
金钱
21
注册时间
2021-3-2
在线时间
4 小时
发表于 2022-5-8 23:18:37 | 显示全部楼层
MAple32 发表于 2022-2-15 21:26
找到办法了,使用  update-alternatives 切换版本 切换到4.9.4的版本在编译就好了

兄弟 怎么切换的
回复 支持 反对

使用道具 举报

1

主题

7

帖子

0

精华

新手上路

积分
34
金钱
34
注册时间
2020-11-3
在线时间
10 小时
发表于 2022-5-12 14:18:32 | 显示全部楼层
解决了 先删除 再重启就行了 sudo apt autoremove gcc-arm-linux-gnueabihf
回复 支持 反对

使用道具 举报

1

主题

7

帖子

0

精华

新手上路

积分
34
金钱
34
注册时间
2020-11-3
在线时间
10 小时
发表于 2022-5-12 14:18:57 | 显示全部楼层
再次查看arm-linux-gnueabihf-gcc -v 就是4.9.4版本的了
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-11-25 10:56

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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