Forum: Mikrocontroller und Digitale Elektronik IAR: Error[e16]: Segment INTVEC


von Tim (Gast)


Lesenswert?

Hallo!

Habe im IAR Workbench für MSP einen einfachen Beispielcode von Ti 
eingefügt (http://focus.ti.com/docs/prod/folders/print/msp430f247.html) 
und von USCI0 auf USCI1 umgeändert.
Der code sieht jetzt wie folgt aus:
1
#include "msp430x24x.h"
2
3
void main(void)
4
{
5
  WDTCTL = WDTPW + WDTHOLD;                 // Stop WDT
6
  
7
  // set SCLK to calibrated 1 MHz DCO
8
  BCSCTL1                         =       CALBC1_1MHZ;
9
  DCOCTL                          =       CALDCO_1MHZ;
10
  
11
  // setup ACLK source and parameters, external crystal is 32.768 kHz
12
  //BCSCTL3                         =       LFXT1S_0 | XT2S_0 |      XCAP_1;
13
    
14
  if (BCSCTL1 == 0xFF)                      // Check flash erasure
15
    while(1);                               // If DCO constants invalid,trap CPU   
16
  P3SEL = 0x60;                             // P3.6,7 = USCI_1 TXD/RXD
17
  UCA1CTL1 |= UCSSEL_2;                     // SMCLK
18
  UCA1BR0 = 8;                              // 1MHz 115200
19
  UCA1BR1 = 0;                              // 1MHz 115200
20
  UCA1MCTL = UCBRS2 + UCBRS0;               // Modulation UCBRSx = 5
21
  UCA1CTL1 &= ~UCSWRST;                     // **Initialize USCI state machine**
22
  IE2 |= UCA1RXIE;                          // Enable USCI_A0 RX interrupt
23
  
24
  //  __bis_SR_register(LPM0_bits + GIE);       // Enter LPM0, interrupts enabled
25
}
26
27
// Echo back RXed character, confirm TX buffer is ready first
28
#pragma vector=USCIAB1RX_VECTOR
29
__interrupt void USCI1RX_ISR(void)
30
{
31
  while (!(IFG2&UCA1TXIFG));                // USCI_A0 TX buffer ready?
32
  UCA1TXBUF = UCA1RXBUF;                    // TX -> RXed character
33
}
Beim Compilieren erhalte ich vom Linker folgende Fehlermeldung
1
Error[e16]: Segment INTVEC (size: 0x24 align: 0x1) is too long for segment definition. At least 0x4 more bytes needed. The problem occurred while  
2
processing the segment placement command "-Z(CODE)INTVEC=FFE0-FFFF", where at the moment of placement the available memory ranges were  
3
"CODE:ffe0-ffff" 
4
   Reserved ranges relevant to this placement: 
5
   ffe0-ffff            INTVEC

Kann mir jemand sagen, wo der Fehler liegt?

Danke für die Hilfe!

Gruß
Tim

von Michael L. (hasimaus)


Lesenswert?

Hallo Tim,

naja, die Antwort steht doch schon in der Fehlermeldung.
Der compilierte Code ist 0x24 Bytes lang, also 36 Bytes.
In der Definition für dieses Segment (INTVEC) sind jedoch nur
32 Bytes vorgesehen, also ist der Code 0x04 Bytes too long.

Code kürzen oder mehr Platz reservieren wäre mein Vorschlag.
Gruß

von Pothead (Gast)


Lesenswert?

Manchmal hat IAR solche Anwandlungen. Kopiere das Linkerskript mal in 
deinen Programmordner und verweise IAR darauf (Options (Kontextmenü) -> 
Linker -> Config -> Linker Command File). Aber vorher solltest du 
kontrollieren, ob du auch den richtigen Controller eingestellt hast (... 
-> General Options -> Device).

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.