Forum: Mikrocontroller und Digitale Elektronik Startup Code bei ARM unter IAR-EW


von Maddin (Gast)


Lesenswert?

Hallo,

ich versuche vergebens ein selbst geschriebenes Programm auf einem 
LPC1766 stabil zum laufen zu kriegen. Ich habe mir verschiedene 
Beispielprogramme angesehen und bereits zum laufen bekommen. Dabei 
werden jedesmal startup codes verwendet und ich versuche nun entweder 
ohne diese auszukommen oder diese für meinen Fall zu verwenden.

Wenn ich ohne Startupcode compiliere und flashe, dann wird Programmcode 
ausgeführt der noch von vorherigen Beispielprogrammen im Speicher 
liegt.Beispiel:
Ich überspiele ein Programm, dass ein Testbild auf einem LCD anzeigt. 
Nun flashe ich mein eigenes Programm und es wird das selbe Testbild 
dargestellt.

Ich fing nun an langsam die Einstellungen des Compilers/linkers aus den 
Beispielprogrammen zu übernehmen. Nur verhält sich mein Controller dabei 
völlig anders.
Zum Beispiel wird im Beispielprojekt unter linker-configuration file die 
start und end-Adresse des Roms jeweils auf 0x00000000 gesetzt. Den Sinn 
verstehe ich dabei nicht, jedoch den Compiler Error der anmerkt:

Error[Lp011]: section placement failed: unable to allocate space for 
sections/blocks with a total estimated minimum size of 0x36c bytes in 
<[0x00000000-0x00000000]> (total uncommitted space 0x1).

Macht Sinn, nur warum funktioniert dies im Beispielprogramm.

Ich verstehe bis dato nicht, an welche Stelle der Projektdaten ein Bezug 
zwischen der main() und dem startup code vorliegt. Wieso startet ein 
Beispielprogramm korrekt und mein selbst geschriebener Code mit den 
selben Compiler/Linker Einstellungen und dem selben startup code verhält 
sich völlig anders. An welche Stelle muss ich dem Compiler/Linker 
mitteilen wo mein Code beginnt....

Ich stehe auf dem Schlauch

von Dussel (Gast)


Lesenswert?

Fehler in Zeile 42.

von Maddin (Gast)


Angehängte Dateien:

Lesenswert?

Dussel schrieb:
> Fehler in Zeile 42.

Deswegen habe ich Zeile 42 freigelassen. Also bitte noch mal 
nachdenken!!

Vielleicht würde es helfen, wenn du sagst welche Informationen du 
benötigst um zu helfen?! Der Code...?? Aber bitte für dich, damit du dir 
die Zähne ausbeißen kannst:
1
int main(void)
2
{
3
  int i=0;
4
  InitClock();
5
6
  PIN_LED1_DIR_OUT;
7
  PIN_LED2_DIR_OUT;
8
  LED1_OFF;
9
  LED2_OFF;
10
11
  while(1)
12
  {
13
    ToggleLED(1);
14
    ToggleLED(2);
15
16
    for(i=0;i<0xFFFF;i++);
17
    for(i=0;i<0xFFFF;i++);
18
    for(i=0;i<0xFFFF;i++);
19
    for(i=0;i<0xFFFF;i++);
20
    for(i=0;i<0xFFFF;i++);
21
    for(i=0;i<0xFFFF;i++);
22
    for(i=0;i<0xFFFF;i++);
23
    for(i=0;i<0xFFFF;i++);
24
    for(i=0;i<0xFFFF;i++);
25
    for(i=0;i<0xFFFF;i++);
26
    for(i=0;i<0xFFFF;i++);
27
    for(i=0;i<0xFFFF;i++);
28
  }
29
}
Bevor sich hier Leute beschweren bzw. bevor jemand nach den defines 
fragt: Es geht hier nicht um meinen Code! Denn:

Konnte das Problem etwas eingrenzen. Nutze ich beigefügten Startup code 
und linker-skript dann läuft das Programm wenn ich mit IAR debugge und 
starte. Wenn ich jedoch den Controller per reconnect starte, dann wird 
ein anderes Programm ausgeführt. Mich wurmt, dass ich den Hintergrund 
nicht verstehe das anscheinend 2 vollständige Programm im Speiche 
vorhanden sind und ich nicht weiß wo/wann/wie ich festlege wo der 
Controller bei Programmstart anlaufen soll.

von Dussel (Gast)


Lesenswert?

Maddin schrieb:
> int i=0;
Du willst tatsächlich int von 0x0000 bis 0xfffe laufen lassen?
Welchen Wertebereich deckt int ab?
Versuch's mal mit unsigned int oder u_int16, das müsste passen.

von holger (Gast)


Lesenswert?

>Du willst tatsächlich int von 0x0000 bis 0xfffe laufen lassen?

Wieso nicht?

>Welchen Wertebereich deckt int ab?

Auf einem ARM sinds 32Bit.

von Maddin (Gast)


Lesenswert?

holger schrieb:
> Auf einem ARM sinds 32Bit.

Richtig.

Und auch wenn der Unterschied ein essentieller sein sollte, glaube ich, 
dass eine Diskusion darüber (für mein Verständnis) in die Falsche 
Richtung geht.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.