0

我是 Atmel Studio 的新手。我使用 ATSAMV71Q21 设备创建了新的 GCC C Execute 项目。在 main.c 文件中添加了 printf 然后运行构建并得到一堆“未定义的引用(_write,_fsta 等)错误。我尝试了 Atmel 的“入门”示例,它运行良好。我该如何解决这个问题?下面是代码和错误消息。感谢您的帮助。

#include "sam.h"
#include <stdio.h>
#include <stdbool.h>

int main(void)
{
    /* Initialize the SAM system */
    SystemInit();

    while (1) 
    {
        printf("abc");
        //TODO:: Please write your application code 
    }
}

d:/atmel/atmel 工具链/arm gcc/native/4.8.1443/arm-gnu-toolchain/bin/../lib/gcc/arm-none-eabi/4.8.4/../../.. /../arm-none-eabi/lib/armv7e-m\libc.a(lib_a-sbrkr.o):在函数“_sbrk_r”中:D:\Atmel\samv71_softpack_1.4_for_astudio_6_2\studio\Atmel\samv71_Xplained_Ultra\examples\测试\测试\调试\sbrkr.c(1,1):错误:未定义的对“_sbrk”的引用

4

2 回答 2

2

我还不知道如何使用简单的 C 程序 ( ) 来做您想做的事情#include "sam.h",但如果您愿意使用 ASF API,我可以为您提供帮助。

您必须首先生成一个 C-ASF 项目。然后使用 ASF 向导将标准串行 I/O 添加到项目中。正确配置,printf, puts, ... 将打印到连接到控制器的终端程序。

#include <asf.h>
#include "stdio_serial.h"

static void configure_console(void)
{
    const usart_serial_options_t uart_serial_options = {
        .baudrate = CONF_UART_BAUDRATE,
        .paritytype = CONF_UART_PARIT
    };

    /* Configure console UART. */
    sysclk_enable_peripheral_clock(CONSOLE_UART_ID);
    stdio_serial_init(CONF_UART, &uart_serial_options);
}

int main(void) 
{
    /* Insert system clock initialization code here (sysclk_init()). */
    sysclk_init();
    board_init();

    configure_console();

    while (1) {
        printf("abc");
    }

    return 0;
}    

这适用于具有 SAM3X8E 控制器的 Arduino Due。

于 2016-01-19T11:09:18.677 回答
0

如果您只想修复该链接错误,则可以通过转到 Project->ASF 向导并向下滚动到标准串行 I/O 并单击添加来添加标准串行 I/O。

虽然这将修复链接器错误,但它可能不会像您期望的那样。您要打印到哪里?是否有显示器连接到您的嵌入式设备?然后,您需要为该显示器及其关联的 api 使用特定的驱动程序。

如果您只是在连接到 PC 时使用 printf() 进行调试,那么我建议您使用 atmel 调试器来跟踪代码执行、检查变量等。

于 2015-11-24T15:50:24.817 回答