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.
![Klicke auf die Grafik für eine größere Ansicht
Name: Anton.jpg
Hits: 9
Größe: 79,7 KB
ID: 34183](https://www.roboternetz.de/community/attachment.php?s=31df451ef43eae0b77d02ffbc87f6436&attachmentid=34183&d=1559754602&thumb=1)
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.
Lesezeichen