Liste der Anhänge anzeigen (Anzahl: 1)
Fehler = "undefined reference to `memcpy' - Array zu gross (STM32F103RB)?
Hallo Kollegen. Da stehe ich mal wieder . . . auf dem Schlauch :(
Also
Olimex STM32 F103 RBT6 -> Flash 128k, SRAM 20k
Aufgabe: Array mit 15 Zeilen x Struct a 31 Byte = ca 500Byte anlegen.
Test-Struct siet so aus
___TasteNumber_____1 Byte
___PortAdresse______4
___PinNumber_______1
Soll aber größer werden
Struct Taster
___TasteNumber_____1 Byte
___PortAdresse______4
___PinNumber_______1
___StatusOld_______1
___StatusCurrent___1
___CanMessage_____8
___DispMessage____15 Bytes
_________________31 Byte * 15 = 465 Byte
Mit 3 Zeilen-Array wurde die Funktion zum Laufen gebracht.
Array auf 15 Zeilen aufzustocken scheitert mit einem Fehler vom Compiler
„undefined reference to `memcpy'“
Meldung kommt wenn Array > als 4 Zeilen wird und dass beim Testen mit Test-Struct.
Ich arbeite in einer eingeschränkten Umgebung. Somit fehlen schon mal ein Paar Standard Bibliotheken. Damit muss ich klar kommen.
Jemand `ne Idee wie man den Fehler umgehen kann????
Anhang 34181
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo
Die Initialisierung sollte aber generell funktionieren.
Es gibt einen sogenannten Startup Code bei "C" der sorgt dafür, dass die initialisierten Variablen auch entsprechend gesetzt werden.
Bei meinem Compiler heisst die z.B. Datei cr_startup_lpc17x_6x.c
Wie die bei Dir heisst, weis ich nicht,
Eventuell ist es in deinem Projekt bei den Optionen des Compiler oder Linker ausgeschaltet.
"Generate Startup Code" Häkchen draussen oder so.
Bei mir sieht das in der Datei so aus:
Die Funktion data_init sorgt für das kopieren der Startupdaten aus dem Flash in den RAM Bereich
die untere Funktion bss_init setzt alle Variablen auf 0
!!!! Nicht erschrecken, darum must Du Dich normalerweise NIE kümmern. Dieser Code für deine Controller
wird normalerweise mitgeliefert und wird nur ähnlich aussehen:
Code:
Beispiel aus meinem Projekt:
//*****************************************************************************
// Functions to carry out the initialization of RW and BSS data sections. These
// are written as separate functions rather than being inlined within the
// ResetISR() function in order to cope with MCUs with multiple banks of
// memory.
//*****************************************************************************
__attribute__ ((section(".after_vectors")))
void data_init(unsigned int romstart, unsigned int start, unsigned int len) {
unsigned int *pulDest = (unsigned int*) start;
unsigned int *pulSrc = (unsigned int*) romstart;
unsigned int loop;
for (loop = 0; loop < len; loop = loop + 4)
*pulDest++ = *pulSrc++;
}
__attribute__ ((section(".after_vectors")))
void bss_init(unsigned int start, unsigned int len) {
unsigned int *pulDest = (unsigned int*) start;
unsigned int loop;
for (loop = 0; loop < len; loop = loop + 4)
*pulDest++ = 0;
}
Ich habe grade mal folgendes probiert, OHNE string.h
Code:
typedef struct
{
char name[10];
unsigned char alter;
} tPerson;
tPerson person[3] =
{
{ "Anton", 20 },
{ "Berta", 30 },
{ "Cesar", 187}
};
int main(void)
{
person[0].name[1] = 'X'; // testweise ändere ich hier den 2. Buchstaben in ein X
Die Struktur wird ordnungsgemäß initialisiert.
Das sehe ich jetzt am Debuggerfenster:
Ich habe nur die eine Zeile ausgeführt, aber es ist schon alles richtig initialisiert. Aus "Anton" wurde "AXton"
Die anderen Teile sind auch alle richtig inititialisert, habe ich mir grade angesehen.
Anhang 34183
Siro
[EDIT]
gefunden auf dieser Seite:
http://stefanfrings.de/stm32/stm32f1.html
Startup-Code
Im Gegensatz zu allen mir bekannten Compilern für 8bit Mikrocontroller befindet sich der Startup-Code und die Interrupt-Vektor Tabelle in editierbaren Dateien (sysmem.c und startup_stm32.s). Der Projekt-Assistent in der IDE legt diese Dateien automatisch an. Für erste Versuche kann man sie unverändert benutzen.
Dein Startup Code scheint in Assembler geschrieben zu sein und befindet sich wohl in der Datei startup_stm32.s
ich habe aber auch noch diese hier gefunden, hier ist der Startup Code in "C"
https://jacobmossberg.se/posts/2018/...c-startup-code
Du must mal schauen wie das in deinem System/Entwicklngsumgebung gemacht wird.
Ich vermute, dass bei Dir lediglich Einstellungen für das Projekt angepasst werden müssen.