Невозможно собрать проект atmel studio 6.2 с помощью команды printf

Я новичок в студии Atmel. Я создал новый проект GCC C Execute с устройством ATSAMV71Q21. В файле 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 toolchain / 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 test\test\Debug\sbrkr.c(1,1): ошибка: неопределенная ссылка на _sbrk

2 ответа

Я еще не знаю, как делать то, что вы хотите с голой C-программой (#include "sam.h"), но я могу помочь вам, если вы захотите использовать ASF API.

Сначала вы должны сгенерировать C-ASF-проект. Затем вы добавляете стандартный последовательный ввод-вывод в свой проект с помощью мастера ASF. Правильно сконфигурируйте, и printf, put, ... распечатает программу терминала, подключенную к контроллеру.

#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;
}    

Это работает на Arduino Due, который имеет контроллер SAM3X8E.

Если вы просто хотите исправить эту ошибку ссылки, то вы можете добавить Стандартный последовательный ввод-вывод, перейдя в Мастер Project->ASF и прокрутив вниз до Стандартного последовательного ввода-вывода и нажав Добавить.

Хотя это исправит ошибку компоновщика, он, вероятно, не будет делать то, что вы ожидаете. Где вы пытаетесь распечатать? К вашему встроенному устройству подключен дисплей? Затем вам нужно будет использовать определенный драйвер для этого дисплея и связанный с ним API.

Если вы просто используете printf() в целях отладки при подключении к компьютеру, то я рекомендую использовать отладчик atmel для отслеживания выполнения кода, проверки переменных и т. Д.

Другие вопросы по тегам