Как собрать проект с локальной библиотекой на платформеio?

Проблема: не могу понять, почему проект не строится с использованием локальной библиотеки.

При создании проекта на моем терминале появляется следующая ошибка:

Linking .pio/build/genericSTM32F103C8/firmware.elf
.pio/build/genericSTM32F103C8/src/main.o: In function `main':
main.c:(.text.startup.main+0x2): undefined reference to `clock_setup'
collect2: error: ld returned 1 exit status
*** [.pio/build/genericSTM32F103C8/firmware.elf] Error 1

Дерево моего проекта выглядит так:

Дерево проекта

В соответствии с файлом readme для platformio lib я добавил следующее в src / main.c

#include <clock.h>

Моя конфигурация для платформы io:

[env:genericSTM32F103C8]
platform = ststm32
board = genericSTM32F103C8
framework = libopencm3
debug_tool = custom
debug_server =
  $PLATFORMIO_CORE_DIR/packages/tool-openocd/bin/openocd
  -f 
  /usr/local/share/openocd/scripts/interface/stlink-v2.cfg
  -f
  $PLATFORMIO_CORE_DIR/packages/tool-openocd/scripts/target/stm32f1x.cfg
  lib_ldf_mode = chain+

clock.h содержит:

#include <libopencm3/stm32/rcc.h>

BEGIN_DECLS

static void clock_setup(void);

END_DECLS

clock.c содержит:

#include <libopencm3/stm32/rcc.h>
#include "clock.h"

static void clock_setup(void)
{
    /* Extenal 16 MHz clock set to 72MHz using PLL */
    rcc_clock_setup_in_hse_16mhz_out_72mhz();

    /* Enable clock for DI DO ADC UART */
    rcc_periph_clock_enable(RCC_GPIOA);
    rcc_periph_clock_enable(RCC_GPIOB);
    rcc_periph_clock_enable(RCC_GPIOC);

    /* Enable AFIO clock. */
    rcc_periph_clock_enable(RCC_AFIO);

    /* Enable Timer clock. */
    rcc_periph_clock_enable(RCC_TIM3);
    rcc_periph_clock_enable(RCC_TIM4);

    /* Enable UART clock. */
    rcc_periph_clock_enable(RCC_USART1);
    rcc_periph_clock_enable(RCC_USART2);

    /* Enable I2C clock. */
    rcc_periph_clock_enable(RCC_I2C2);

    /* Enable SPI2 clock. */
    rcc_periph_clock_enable(RCC_SPI2);

}

person mattyyy    schedule 14.06.2020    source источник
comment
Заменить static void clock_setup (void) на void clock_setup (void) static означает, что функцию нельзя увидеть вне файла.   -  person YvonBlais    schedule 15.06.2020
comment
@YvonBlais По-прежнему, похоже, это не работает.   -  person mattyyy    schedule 15.06.2020
comment
Вы заменили его в .h и .c? И правильно ли вы включили clock.h? Существует большая разница между #include <clock.h> и #include "clock.h" Может быть, добавить #include "lib/CLOCK/src/clock.h или, если вы действительно хотите использовать нотацию <>: добавить lib/CLOCK/src/ к пути компоновщика?   -  person Tarick Welling    schedule 16.06.2020


Ответы (1)


Моя текущая папка lib выглядит так, и теперь LDF platformio может найти мои локальные библиотеки.

├── clock
│   ├── clock.c
│   └── clock.h
├── di
│   ├── di.c
│   └── di.h
├── do
│   ├── do.c
│   └── do.h
├── i2c
│   ├── adc_i2c.c
│   └── adc_i2c.h
├── spi
│   ├── spi.c
│   └── spi.h
└── uart
    ├── debug_uart.c
    ├── debug_uart.h
    ├── display_uart.c
    ├── display_uart.h
    ├── modbus_uart.c
    └── modbus_uart.h
person mattyyy    schedule 16.06.2020