Eclipse CDT: Linkerfehler

Gast #4763688
Lesenswert?

Habe folgenden Code unter Eclipse CDT erstellt
1
#include "stm32f4xx_hal.h"
2
#include "stm32f4xx_hal_gpio.h"
3
#include "stm32f4xx_hal_uart.h"
4

5
static void SystemClock_Config(void);
6
int main(void) {
7
  HAL_Init();
8

9

10

11
  unsigned char message[] = "Hello UART!\n";
12

13
  SystemClock_Config();
14
  __HAL_RCC_GPIOA_CLK_ENABLE();
15

16

17
  GPIO_InitTypeDef GPIOinit;
18
  GPIOinit.Pin = GPIO_PIN_0 | GPIO_PIN_1;
19
  GPIOinit.Mode = GPIO_MODE_AF_PP;
20
  GPIOinit.Pull = GPIO_PULLUP;
21
  GPIOinit.Speed = GPIO_SPEED_FAST;
22
  GPIOinit.Alternate = GPIO_AF8_UART4;
23
  HAL_GPIO_Init(GPIOD, &GPIOinit);
24

25
  UART_HandleTypeDef uart4;
26
  uart4.Instance = UART4;
27
  uart4.Init.BaudRate = 9600;
28
  uart4.Init.WordLength = UART_WORDLENGTH_8B;
29
  uart4.Init.StopBits = UART_STOPBITS_1;
30
  uart4.Init.Parity = UART_PARITY_NONE;
31
  uart4.Init.Mode = UART_MODE_TX_RX;
32
  HAL_UART_Init(&uart4);
33

34
  HAL_UART_Transmit(&uart4, message, 12, 100);
35

36
  while (1) {
37

38
  }
39
}
(Clock Config ist in der Uebersicht weggelassen)
Sources und Includes fuer die HAL-Library sind im Suchfad vorhanden.
Wenn ich nun bauen lasse, werden alle Typedefs erkannt, und die Sources 
fuer Clock Config, GPIO usw. sauber kompiliert. Der Linker beschwert 
sich danach allerdings, dass er kein Objectfile fuer die UART-Funktionen 
finden kann.

Suche nun schon ewig, wie ich Eclipse dazu bringen kann, den Code fuer 
den UART auch automatisch mit zu kompilieren, finde aber nix. Was mache 
ich falsch?
In der Shell kompilieren und das Objectfile per Hand an der richtigen 
Stelle ablegen ginge zwar, ist aber sicher nicht die elganteste Loesung.
Gast #4763829
Lesenswert?

Das hier kommt vom Linker:
1
/home/myhost/workspace/stm32_playground/Debug/../src/main.c:98: undefined reference to `HAL_UART_Init'
2
collect2: error: ld returned 1 exit status
3
make: *** [makefile:64: stm32_playground.elf] Fehler 1
Gast #4763875
Lesenswert?

Eclipse CDT mit dem STM32-Plugin legt beim Anlegen eines Projekts die 
komplette HAL-Library in einen Unterordner:

system/src/stm32f4-hal

Der Ordner ist auch im Suchpfad vom Compiler, und die Dateien fuer RCC 
und GPIO werden dort auch geunden. Index Rebuild habe ich probiert, 
macht leider keinen Unterschied.
#4768370
Lesenswert?

Eclipse unterscheidet bei Ordnern im Projekt zwischen normalen und 
Source-Ordnern. Nur in letzteren werden Source-Dateien auch kompiliert.

Schau dir halt mal die Ordnertypen an.

Oliver
P.S. Das gilt natürlich nur für von Eclipse gemanagte Projekte. Bei 
makefileprojekt musst du halt ins makefile schauen, und das entsprechend 
anpassen.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren