MSP430 Error: Placement fails for object

#1704288
Lesenswert?

Hallo zusammen,

Ich versuche gerade unten stehendes Beispielprogramm von TI auf meinen 
MSP430F5438 zum Laufen zu bekommen.

Zum Compilieren verwende ich Code Composer Studio Core Edition, Version: 
4.1.0.02006.

Beim Linken erhalte ich immer folgenden Fehler:
1
"../lnk_msp430f5438.cmd", line 186: error: placement fails for object ".int55",
2
   size 0x4 (page 0).  Available ranges:
3
   INT55        size: 0x2          unused: 0x2          max hole: 0x2

Programm:
1
#include "msp430x54x.h"
2

3
#define   Num_of_Results   8
4

5
volatile unsigned int A0results[Num_of_Results];
6
volatile unsigned int A1results[Num_of_Results];
7
volatile unsigned int A2results[Num_of_Results];
8
volatile unsigned int A3results[Num_of_Results];
9

10
void main(void)
11
{
12
  WDTCTL = WDTPW+WDTHOLD;                   // Stop watchdog timer
13
  P6SEL = 0x0F;                             // Enable A/D channel inputs
14
  ADC12CTL0 = ADC12ON+ADC12MSC+ADC12SHT0_8; // Turn on ADC12, extend sampling time
15
                                            // to avoid overflow of results
16
  ADC12CTL1 = ADC12SHP+ADC12CONSEQ_3;       // Use sampling timer, repeated sequence
17
  ADC12MCTL0 = ADC12INCH_0;                 // ref+=AVcc, channel = A0
18
  ADC12MCTL1 = ADC12INCH_1;                 // ref+=AVcc, channel = A1
19
  ADC12MCTL2 = ADC12INCH_2;                 // ref+=AVcc, channel = A2
20
  ADC12MCTL3 = ADC12INCH_3+ADC12EOS;        // ref+=AVcc, channel = A3, end seq.
21
  ADC12IE = 0x08;                           // Enable ADC12IFG.3
22
  ADC12CTL0 |= ADC12ENC;                    // Enable conversions
23
  ADC12CTL0 |= ADC12SC;                     // Start convn - software trigger
24
  
25
  __bis_SR_register(LPM0_bits + GIE);       // Enter LPM0, Enable interrupts
26
  __no_operation();                         // For debugger
27
  
28
}
29

30
#pragma vector=ADC12_VECTOR
31
__interrupt void ADC12ISR (void)
32
{
33
  static unsigned int index = 0;
34

35
  switch(__even_in_range(ADC12IV,34))
36
  {
37
  case  0: break;                           // Vector  0:  No interrupt
38
  case  2: break;                           // Vector  2:  ADC overflow
39
  case  4: break;                           // Vector  4:  ADC timing overflow
40
  case  6: break;                           // Vector  6:  ADC12IFG0
41
  case  8: break;                           // Vector  8:  ADC12IFG1
42
  case 10: break;                           // Vector 10:  ADC12IFG2
43
  case 12:                                  // Vector 12:  ADC12IFG3
44
    A0results[index] = ADC12MEM0;           // Move A0 results, IFG is cleared
45
    A1results[index] = ADC12MEM1;           // Move A1 results, IFG is cleared
46
    A2results[index] = ADC12MEM2;           // Move A2 results, IFG is cleared
47
    A3results[index] = ADC12MEM3;           // Move A3 results, IFG is cleared
48
    index++;                                // Increment results index, modulo; Set Breakpoint1 here
49
    
50
    if (index == 8)
51
    {
52
      (index = 0);
53
    }
54
  case 14: break;                           // Vector 14:  ADC12IFG4
55
  case 16: break;                           // Vector 16:  ADC12IFG5
56
  case 18: break;                           // Vector 18:  ADC12IFG6
57
  case 20: break;                           // Vector 20:  ADC12IFG7
58
  case 22: break;                           // Vector 22:  ADC12IFG8
59
  case 24: break;                           // Vector 24:  ADC12IFG9
60
  case 26: break;                           // Vector 26:  ADC12IFG10
61
  case 28: break;                           // Vector 28:  ADC12IFG11
62
  case 30: break;                           // Vector 30:  ADC12IFG12
63
  case 32: break;                           // Vector 32:  ADC12IFG13
64
  case 34: break;                           // Vector 34:  ADC12IFG14
65
  default: break; 
66
  }  
67
}

Scheinbar gibt es Probleme mit dem Interrupt. Ich verstehe nicht, wie 
ich das Problem beheben kann. Hat jemand eine Idee?

Besten Dank
Nico
#1704853
Lesenswert?

Erstmal vielen Dank für die Antworten.

Das Linker-File habe ich angehängt. Hier ein paar Ausschnitte, die sich 
auf den Fehler beziehen:

Zeile 97 :
1
INT55: origin = 0xFFFE, length = 0x0002

Zeile 186:
1
.int55   : {} > INT55

Übrigens habe ich vergessen zu erwähnen, dass ich den MSP auf einem 
Experimentierboard verwende (MSP-EXP430F548).
Angehängte Dateien:
#1705608
Lesenswert?

Nico,

zum Test habe ich gerade deinen Quellcode in die Datei eines 
Beispielprojekts kopiert, auf MSP430F5438 eingestellt und übersetzen 
lassen. Es funktioniert alles fehlerfrei. Ich benutze allerdings die 
aktuelle Version: 4.1.2.00027.

Wie hast du denn dein Projekt erstellt?

Vielleicht ist irgendeine Option unpassend eingestellt, oder dein 
benutzter Code Composer hat ein Problem.

Versuche doch mal eines der mitgelieferten Beispielprojekte als 
Grundlage zu benutzen. Wenn das nicht hilft, würde ich den aktuellen 
Code Composer bei TI herunterladen und installieren.

Ciao, Yagan
#1706368
Lesenswert?

Modifizierte cmd und CCS Update haben leider nichts geholfen, aber 
inzwischen konnte ich den Fehler finden.

Es handelt sich offenbar um einen Konflikt mit den Headerfiles, die das 
Board verwendet, auf dem ich meinen MSP betreibe. Ohne die Header läuft 
die A/D Wandlung.

Danke für eure Mühe :-)
#1706413
Lesenswert?

Koennte es sein das in deinen Header Dateien der ADC12 Interrupt schon 
definiert ist.
Das selbe Problem hatte ich bei der Benutzung von den RF2500 und dem 
Simpliciti Protokoll. Dort war in den Simpliciti Code schon der Port 2 
Interrupt definiert, den ich dann in meinen Source code nochmal neu 
definiert habe. Nach der Auskommentierung der eine Interruptfunktion und 
Uebernahme des Codes. Funktioniert wieder alles wie gewuenscht.


Gruss

Achim
Gast #1774010
Lesenswert?

" ../lnk_msp430f5438.cmd ", line 176: error: for object placement fails 
. " int45 "
   size 0x4 (page 0). Available ranges:
   INT45 size: 0x2 unused : 0x2 max hole: 0x2
error: errors encountered during linking; " TrackBocs.out "built not

.....

Hi all,
I have a very similar problem as explained above Nico ..

Can some one help me to get rid of it ..
Please reply in english ....

Regards, WA
#1775930
Lesenswert?

@WA:

If you use headers from Texas Instrument for the experimenter board, 
some of the interrupt vectors will already be in use. If you use the 
same vector in your code (which is what i meant by saying 
"double-defined") you will get the error message.

In this case: try to find out which vectors are in use and use another 
interrupt vector in your code which is not used by the experimenter 
board

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren