我没有在AVR Freaks论坛上得到答案,并想知道这里是否有人可以帮助我。
答案可能位于this SO question,但我不确定为什么有必要。
基本上,我有我的拳头Atmel项目(AVR studio 6,UC3处理器)。代码编译和链接,我可以将其加载到Atmel板并在调试器中逐步完成。
但是,当我尝试跳过(或运行直到后面的一个断点)对sprintf(),malloc()或memcpy()的(有效)调用(可能还有更多,我还没有发现),IDE永远不会返回到我的代码的下一行,只是看起来挂起或永远运行。
[注意]编译器优化已关闭
我是否需要设置一些链接器选项(例如链接静态(我尝试过它并没有帮助)?或者使用某些库构建?
让我感到困惑的是代码编译器和链接 - 当我调用这些标准函数时,链接的内容是什么?如果我需要其他东西,我会期望编译器或链接器错误,但没有 - 所以为什么我的代码不会运行?
很抱歉这个愚蠢的n00nb问题,但这是我的第一个微控制器项目。
答案 0 :(得分:2)
我发现我的主板上的CPU是工程样本,没有新的io.h文件,Atmel Studio不支持。
我从这个问题中得出结论:http://www.avrfreaks.net/index.php?name=PNphpBB2&file=viewtopic&t=106652
很抱歉让你感到困扰。
答案 1 :(得分:1)
当我调用这些标准函数时会链接什么?
AVR-libc,即移植到AVR平台的C标准库的实现。
那么为什么我的代码会运行?
编译器错误和运行时错误甚至没有关系。这两行都是有效的C并且它们可以编译,但是,在大多数系统中,我希望它们能够转储核心:
int x = 1 / 0;
*(int *)0 = 41;
所以它可能是:
答案 2 :(得分:1)
如果您在要跳过的行之后的下一行设置断点,会发生什么?
另外,如果关闭编译器优化,操作会改变吗?