Hallo zusammen,
ich habe folgendes Problem:
Ich habe noch nicht viel mit dem GCC auf der AVR Plattform gearbeitet
und bin mir daher nicht sicher ob das Problem an mir liegt, oder ob ich
da villeicht gerade in einer noch nicht implementierten Sparte vom GCC
rumstochere.
Es gibt eine main.cpp mit folgendem Inhalt
1 | #include <io/uart.h>
|
2 |
|
3 | int main()
|
4 | {
|
5 | debugInit(9600);
|
6 |
|
7 | }
|
Die Datei wird also mit g++ kompiliert. Das ist auch notwendig, also
bitte keine Hinweise, dass ich einfach mit dem gcc kompilieren soll, ich
brauch später C++.
Nun bau ich mir gerade eine Library für einige Funktionen, wie z.B.
Initialisierung fürs UART; linke also diese dazu
Dort gibts es dann folgende Datei io/uart.c:
1 | //[..]
|
2 | void debugInit(unsigned pBaudRate)
|
3 | {
|
4 | setDebugBaudRate(pBaudRate);
|
5 |
|
6 | //enable transmitter/receiver register
|
7 | UCSR0B |= 1 << TXEN0;
|
8 | UCSR0B |= 1 << RXEN0;
|
9 |
|
10 | //set frame format: 8data, 1 stop bits
|
11 | UCSR0C = (1 << USBS0) | (3 << UCSZ00);
|
12 |
|
13 | stdout = &mystdout;
|
14 | }
|
15 | //[..]
|
Und dazu natürlich noch die Header Datei:
1 | #pragma once
|
2 |
|
3 | #include <inttypes.h>
|
4 | #include <stdio.h>
|
5 |
|
6 | void debugInit(unsigned pBaudRate);
|
7 | //[..]
|
Dies wird mit dem GCC kompiliert, also kein C++ an dieser Stelle.
Das problem ist nun, dass der Linker bei obigen Code motz, dass er
debugInit(unsigned pBaudRate); nicht linken konnte.
Kompiliere ich die main.cpp als C Code geht es.
Hat da jemand eine erklärung für? Ich finde einfach meinen Fehler nicht
und bin auch nicht sicher ob es nicht villeicht sogar ein Problem mit
dem Linker an der stelle gibt, wenn C mit C++ geklinkt wird. Wobei das
ja eigentlich egal sein müsste, da der Code zu diesem Zeitpunkt ja
bereits kompiliert ist.
Vielen Dank schonmal
Gruß
Chris