系统调用无法在Atmel AVR Studio(带ASF)中运行

时间:2013-02-16 07:02:04

标签: c standard-library avr-gcc atmel avr-studio6

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

答案可能位于this SO question,但我不确定为什么有必要。

基本上,我有我的拳头Atmel项目(AVR studio 6,UC3处理器)。代码编译和链接,我可以将其加载到Atmel板并在调试器中逐步完成。

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

[注意]编译器优化已关闭

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

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

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

3 个答案:

答案 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)

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

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