Forum: Mikrocontroller und Digitale Elektronik MSP430 Linkerfehler


von Tobi (Gast)


Lesenswert?

Moin,

ich arbeite derzeit mit einem MSP430F2274 und bekomme nach einigen 
Änderungen plötzlich folgenden Fehler:
1
<Linking>
2
"../lnk_msp430f2274.cmd", line 234: error: placement fails for object ".int03",
3
   size 0x4 (page 0).  Available ranges:
4
   INT03        size: 0x2          unused: 0x2          max hole: 0x2       
5
error: errors encountered during linking; "APasdatahub.out" not built

Weiß jemand wodurch so ein Linkerfehler produziert werden kann? Ich habe 
gelesen, dass es sein kann, dass zu wenig Flash vorhanden ist. Ich kann 
mir aber kaum vorstellen, dass ich plötzlich 8KB Code (in einer alten 
Version verbrauche ich schon ca. 8KB also 50%) an einem halben Tag 
getippt haben soll. Es sind auch kaum Daten dazu gekommen (vorallem 
nicht im Flash).


~Tobi

von Achim B. (achimb)


Lesenswert?

Hallo,

koennte es sein das du den int03 Interrupt doppelt definiert hast.
Durchsuch mal deine Headerdateien.
Benutzt du Simpiciti von TI?


Viele Gruesse

Achim

von Tobi (Gast)


Lesenswert?

Ja ich benutze SimpliciTI.

Ich habe auf gerade nochmal im Schaltplan von dem Testboard geguckt und 
es sind tatsächlich zwei Pins vom Funkmodul auf Port2 gelegt und zwar 
GDO0 und GDO2. Dann wird das wohl der Fehler sein.

Problem ist jetzt nur, dass ich noch zusätzlich 3 Buttons an Port2 
angeschlossen habe und ich auf diese im Interrupt reagieren muss.

Gibt es dafür eine bessere Lösung als die ISR in SimpliciTI zu suchen 
und dort umzuschreiben?

von Tobi (Gast)


Lesenswert?

OK ich habe in der mrfi_board.c folgendes gefunden:
1
/**************************************************************************************************
2
 * @fn          MRFI_GpioPort1Isr
3
 *
4
 * @brief       -
5
 *
6
 * @param       -
7
 *
8
 * @return      -
9
 **************************************************************************************************
10
 */
11
BSP_ISR_FUNCTION( BSP_GpioPort1Isr, PORT2_VECTOR )
12
{
13
  /*
14
   *  This ISR is easily replaced.  The new ISR must simply
15
   *  include the following function call.
16
   */
17
  MRFI_GpioIsr();
18
}

Also kann ich einfach diese ISR auskommentieren und in meiner eigenen 
den Aufruf von MRFI_GpioIsr() hinzufügen? Ich kann das leider derzeit 
nicht so einfach schnell testen, da die Elektronikleute meine Hardware 
haben.

Der Kommentar ist zwar eigentlich eindeutig, aber vielleicht hat das ja 
schon mal jemand gemacht und kann bestätigen dass es funktioniert.

von Achim B. (achimb)


Lesenswert?

Hallo

mein Projekt mit Simpliciti ist schon laenger her aber soweit ich mich 
errinnern kann, hatte ich ein globales Simpliciti Verzeichnis und da ich 
Projekte hatte die teilweise den Interrupt benutzten und teilweise nicht 
habe ich die mrfi_board.c bisschen erweitert
1
#ifndef USER_PORT2_VECTOR
2
3
BSP_ISR_FUNCTION( BSP_GpioPort1Isr, PORT2_VECTOR )
4
{
5
  /*
6
   *  This ISR is easily replaced.  The new ISR must simply
7
   *  include the following function call.
8
   */
9
  MRFI_GpioIsr();
10
}
11
#endif
und je nach Projekt hab ich dann ueber die Compilerparameter dann 
USER_PORT2_VECTOR definiert.

und dann wenn ich den Port2 benutzt habe in der Datei main_manyED.c 
dieses hier eingefuegt

am Anfang der Datei dies hier
1
extern MRFI_GpioIsr();

und ganz unten dann dieser Code
1
#pragma vector=PORT2_VECTOR
2
3
__interrupt void port_2_interrupt(void)
4
{
5
  MRFI_GpioIsr();
6
  if ( (P2IE & BIT0)&& (P2IFG & BIT0))
7
    {
8
      timer_count = TBR - timer_count;          // Record the discharge time
9
      P2IFG &= ~BIT0;
10
    }
11
  else if ( (P2IE & BIT1)&& (P2IFG & BIT1))
12
13
[....]
14
15
  else if ( (P2IE & BIT4)&& (P2IFG & BIT4))
16
    {
17
      timer_count = TBR - timer_count;          // Record the discharge time
18
      P2IFG &= ~BIT4;
19
    }
20
  LPM3_EXIT;                                // Exit from low power 3 or 0
21
}

Gruss

Achim

von Tobi (Gast)


Lesenswert?

Ich habe jetzt die ISR in der mrfi_board.c auskommentiert und folgende 
in mein Programm aufgenommen:
1
#pragma vector=PORT2_VECTOR
2
__interrupt void Port2_ISR(void)
3
{
4
    MRFI_GpioIsr();
5
}

Jetzt scheint sich das End Device nach dem ersten Senden aufzuhängen. 
Kommentiere ich meine eigene ISR aus und die in der mrfi_board.c wieder 
ein, dann läuft die Software ohne Probleme.

Die extern Deklaration habe ich bei mir auch hinzugefügt.

Am AP habe ich natürlich die selbe Änderung gemacht. Bis auf die ISR ist 
die funktionierende Software zu der nicht funktionierenden identisch.

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.