硬汉嵌入式论坛

 找回密码
 立即注册
查看: 5289|回复: 8
收起左侧

[MDK] 我确定MDK编译器有问题,请帮忙看下

[复制链接]

41

主题

215

回帖

338

积分

高级会员

积分
338
发表于 2021-4-9 20:49:19 | 显示全部楼层 |阅读模式
具体现象为:函数main只有一个空函数a,此函数来自文件a.c。即使这样代码也不能正常运行。解决方法:最后勾选编译选项One Elf per section解决。
我唯一能怀疑的就是:我包含了太多库文件。
我一直相信这辈子我不可能遇到编译错误,但事实就是这么残酷。
MDK版本是5.2x

对比map文件
不勾选One Elf per section:,只在Global Symbols里面有,其它地方都没有。
勾选One Elf per section:出现在Memory Map of the image中


One ELF Section per Function option tells the compiler to put all functions into their own individual ELF sections. This allows the linker to remove unused functions. An ELF code section typically contains the code for a number of functions. The linker is normally only able to remove unused ELF sections, not unused functions.

回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106997
QQ
发表于 2021-4-10 08:17:06 | 显示全部楼层
上简单的测试工程
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106997
QQ
发表于 2021-4-10 11:09:52 | 显示全部楼层
snakeemail 发表于 2021-4-10 11:04
函数aaa定义在w25qxx.c中。请搜索map表中,函数aaa。

方便的话,请使用我们的程序模板上加入个aaa函数测试下,第3方程序我不好做评论。
回复

使用道具 举报

41

主题

215

回帖

338

积分

高级会员

积分
338
 楼主| 发表于 2021-4-10 11:32:47 | 显示全部楼层
我理解不方便。只是想求个思路。非常感谢回答。我目前只能想到看map文件,后面再怎么弄,没有思路。
V6_006_uart.zip (2.68 MB, 下载次数: 1)

我把上面删掉。我用v6的例子,加了个aaa();看map文件,同样只有符号表里面出现。



回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106997
QQ
发表于 2021-4-10 14:02:25 | 显示全部楼层
snakeemail 发表于 2021-4-10 11:32
我理解不方便。只是想求个思路。非常感谢回答。我目前只能想到看map文件,后面再怎么弄,没有思路。

...

帮你测试了下,勾上或者不勾上,测试都没有问题
QQ截图20210410140229.png
回复

使用道具 举报

41

主题

215

回帖

338

积分

高级会员

积分
338
 楼主| 发表于 2021-4-10 17:53:55 | 显示全部楼层
谢谢版主。主要还是求思路。
我的思路如下:
我在单位一步一步排除,最后的结果就是只要在main初始化的时候,删除这个来自其它文件的函数,就可以正常了。
常识告诉我,不可能一个空函数都过不了。
最后只能怀疑编译器选项,改了这个就跑过去了。
要找根本原因,看来还是要看汇编。
回复

使用道具 举报

210

主题

1045

回帖

1685

积分

至尊会员

More we do, more we can do.

积分
1685
发表于 2021-4-13 18:59:02 | 显示全部楼层
楼主定位到编译器做错了什么?有小工程重现问题吗
回复

使用道具 举报

41

主题

215

回帖

338

积分

高级会员

积分
338
 楼主| 发表于 2021-7-15 10:16:28 | 显示全部楼层
emwin 发表于 2021-4-13 18:59
楼主定位到编译器做错了什么?有小工程重现问题吗

我同事弄的。我帮他看。
问题是:一个空函数,什么也没有做,然后程序就是不正常初始化。
小工程看不出来,也不会有问题。
回复

使用道具 举报

0

主题

125

回帖

125

积分

初级会员

积分
125
发表于 2021-7-16 15:42:08 | 显示全部楼层
空函数很多时会被编译器优化成NOP
回复

使用道具 举报

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

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-13 18:45 , Processed in 0.252075 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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