2

我在 AVR Freaks 论坛上没有得到答案,想知道这里是否有人可以帮助我。

答案可能就在这个 SO question中,但我不确定为什么它是必要的。

基本上,我有我的第一个 Atmel 项目(AVR studio 6,UC3 处理器)。代码编译和链接,我可以将它加载到 Atmel 板上并在调试器中逐步执行。

但是,当我尝试跳过(或运行直到行后的断点)对 sprintf()、malloc() 或 memcpy() 的(有效)调用时(可能还有更多,我还没有发现), IDE 永远不会返回到我的代码的下一行,只是似乎挂起或永远运行。

[注意] 编译器优化关闭

我是否需要设置一些链接器选项(例如链接静态(我尝试过但没有帮助)?或者使用一些库构建?

让我困惑的是代码编译器和链接——当我调用这些标准函数时,链接的是什么?如果我需要其他东西,我会期待编译器或链接器错误,但没有得到 - 那为什么我的代码不会运行?

抱歉这么愚蠢的 n00nb 问题,但这是我的第一个微控制器项目。

4

3 回答 3

2

我发现我板上的 CPU 是一个工程示例,如果没有新的 io.h 文件,Atmel Studio 不支持。

我从这个问题中发现了这一点: http ://www.avrfreaks.net/index.php?name= PNphpBB2&file =viewtopic&t=106652

很抱歉给您添麻烦了。

于 2013-03-05T05:36:47.040 回答
1

当我调用这些标准函数时,链接了什么?

AVR-libc,移植到AVR平台的C标准库的实现。

那么为什么我的代码不能运行呢?

编译器错误和运行时错误甚至不相关。这两行都是有效的 C 并且它们可以编译,但是,在大多数系统上,我希望它们能够转储核心:

int x = 1 / 0;
*(int *)0 = 41;

所以它可能是:

  • 标准库中的错误(不太可能),或
  • 在线调试器中的错误(非常不可能),或
  • 也许你只是期待一些不应该发生的事情?
于 2013-02-16T07:06:31.450 回答
1

如果您在要跳过的行之后的下一行设置断点,而不是尝试跳过,会发生什么?

另外,如果关闭编译器优化,操作会改变吗?

于 2013-02-16T12:33:26.810 回答