This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

Modifying IAR Linker file to CCS

Other Parts Discussed in Thread: MSP430F2410

Hi ,

I need to modify Linker file in CCS_5.5.0 for msp430f2410 same like IAR linker file(which is working fine).

Below are the IAR Linker file and CCS Linker file..

==============================

IAR

==============================================

// ************************************************
//
// XLINK configuration file for MSP430F2410
//
// Copyright 1996-2010 IAR Systems AB
//
// $Revision: 1.1 $
//
// ************************************************

// ---------------------------------------------------------
// Description
//

//
// Usage:
//
//   xlink [file file ...] -f lnk430f2410.xcl
//
// -----------------------------------------------
// Device summary
//

//
// Core:                           MSP430
//
// Interrupt vectors:              32 (16 unused)
//
// Peripheral units:                  0-01FF
//
// Information memory (FLASH):     1000-10FF
//
// Read/write memory (RAM):        1100-20FF
//
// Read-only memory (FLASH):       2100-FFFF
//     -Unused                     2100-21FF
//     -Interval Data              2200-32FF (Must be on a segment boundary)
//     -Security Keys              3300-34FF
//     -Code                       3500-FFDD (FFC0-FFDD unused interrupt vectors)
//     -BSL Security Key           FFDE-FFDF
//     -Interrupt Vectors          FFE0-FFFF
//


// -----------------------------------------------
// Segments
//

// -------------------------------------
// Data read/write segments (RAM)
//

//
// segment         Usage
// -------         --------------------------
// DATA16_Z        Data initialized to zero
// DATA16_I        Data initialized by copying from DATA16_ID
// DATA16_N        Data defined using __no_init
// DATA16_HEAP     The heap used by 'malloc' and 'free'
// CSTACK          Runtime stack
// TLS16_I         Thread-local storage for main thread
//                 (require custom runtime library)
//


// -------------------------------------
// Program and data read-only segments (FLASH)
//

//
// segment         Usage
// -------         --------------------------
// DATA16_C        Constant data, including string literals
// DATA16_ID       initializers for DATA<nn>_I
// INFO            Information memory
// INFOA           Information memory, bank A
// INFOB           Information memory, bank B
// INFOC           Information memory, bank C
// INFOD           Information memory, bank D
// CSTART          Program startup code
// CODE            Program code
// ISR_CODE        Program code for interrupt service routines
// DIFUNCT         Dynamic initialization vector used by C++
// CHECKSUM        Checksum byte(s) generated by the -J option
// INTVEC          Interrupt vectors
// RESET           The reset vector
// TLS16_ID        Thread-local initializers for main thread
//                 (require custom runtime library)
//
// Notes:
//
// * The INFOx and INFO segments overlap, this allows data either to be
//   placed in a specific bank or anywhere in the info memory.
//
// * The INTVEC and RESET segments overlap. This allows an application to
//   either use the reset vector provided by the runtime library, or
//   provide a reset function by defining an interrupt function associated
//   with the reset vector.
//


// ---------------------------------------------------------
// Configuation
//

// -----------------------------------------------
// Stack and heap sizes
//

// Uncomment for command line use
-D_STACK_SIZE=350
-D_DATA16_HEAP_SIZE=0


// -----------------------------------------------
// Define cpu
//

-cmsp430

// ---------------------------------------------------------
// Placement directives
//

// -----------------------------------------------
// Read/write memory
//

-Z(CONST)DATA16_P=1100-20FF
-Z(DATA)DATA16_I,DATA16_Z,DATA16_N,DATA16_HEAP+_DATA16_HEAP_SIZE=1100-20FF
-Z(DATA)CSTACK+_STACK_SIZE#


// -----------------------------------------------
// Read-only memory
//

// -------------------------------------
// Information memory
//

-Z(CONST)INFO=1000-10FF
-Z(CONST)INFOA=10C0-10FF
-Z(CONST)INFOB=1080-10BF
-Z(CONST)INFOC=1040-107F
-Z(CONST)INFOD=1000-103F

// ---------------------------------------------------------
// Interval Data
// ---------------------------------------------------------

-Z(CODE)IDR_SEGS=2200-33FF

// ---------------------------------------------------------
// Security Keys
// ---------------------------------------------------------

-Z(CODE)SEC_KEY_SEG=3400-35FF

// -------------------------------------
// Constant data
//
-P(CONST)DATA16_C,DATA16_ID,TLS16_ID,DIFUNCT,CHECKSUM=2100-21FF,3600-FFDD


// -------------------------------------
// Code
//

-Z(CODE)CSTART,ISR_CODE,CODE_ID=2100-21FF,3600-FFDD
-P(CODE)CODE=2100-21FF,3600-FFDD

// -------------------------------------
// BSL Security Key

-Z(CODE)BSLSKEY=FFDE-FFDF

// -------------------------------------
// Interrupt vectors (FFC0-FFDF not used)
//

-Z(CODE)INTVEC=FFE0-FFFF
-Z(CODE)RESET=FFFE-FFFF

==============================================

CCS

===============================================

/* ============================================================================ */

/* Copyright (c) 2013, Texas Instruments Incorporated */

/* All rights reserved. */

/* */

/* Redistribution and use in source and binary forms, with or without */

/* modification, are permitted provided that the following conditions */

/* are met: */

/* */

/* * Redistributions of source code must retain the above copyright */

/* notice, this list of conditions and the following disclaimer. */

/* */

/* * Redistributions in binary form must reproduce the above copyright */

/* notice, this list of conditions and the following disclaimer in the */

/* documentation and/or other materials provided with the distribution. */

/* */

/* * Neither the name of Texas Instruments Incorporated nor the names of */

/* its contributors may be used to endorse or promote products derived */

/* from this software without specific prior written permission. */

/* */

/* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" */

/* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, */

/* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR */

/* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR */

/* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, */

/* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, */

/* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; */

/* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, */

/* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR */

/* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, */

/* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */

/* ============================================================================ */

/******************************************************************************/

/* lnk_msp430f2410.cmd - LINKER COMMAND FILE FOR LINKING MSP430F2410 PROGRAMS */

/* */

/* Usage: lnk430 <obj files...> -o <out file> -m <map file> lnk.cmd */

/* cl430 <src files...> -z -o <out file> -m <map file> lnk.cmd */

/* */

/*----------------------------------------------------------------------------*/

/* These linker options are for command line linking only. For IDE linking, */

/* you should set your linker options in Project Properties */

/* -c LINK USING C CONVENTIONS */

/* -stack 0x0100 SOFTWARE STACK SIZE */

/* -heap 0x0100 HEAP AREA SIZE */

/* */

/*----------------------------------------------------------------------------*/

 

/****************************************************************************/

/* SPECIFY THE SYSTEM MEMORY MAP */

/****************************************************************************/

MEMORY

{

SFR : origin = 0x0000, length = 0x0010

PERIPHERALS_8BIT : origin = 0x0010, length = 0x00F0

PERIPHERALS_16BIT : origin = 0x0100, length = 0x0100

RAM : origin = 0x1100, length = 0x1000

INFOA : origin = 0x10C0, length = 0x0040

INFOB : origin = 0x1080, length = 0x0040

INFOC : origin = 0x1040, length = 0x0040

INFOD : origin = 0x1000, length = 0x0040

FLASH : origin = 0x2100, length = 0xDEBE

INT00 : origin = 0xFFC0, length = 0x0002

INT01 : origin = 0xFFC2, length = 0x0002

INT02 : origin = 0xFFC4, length = 0x0002

INT03 : origin = 0xFFC6, length = 0x0002

INT04 : origin = 0xFFC8, length = 0x0002

INT05 : origin = 0xFFCA, length = 0x0002

INT06 : origin = 0xFFCC, length = 0x0002

INT07 : origin = 0xFFCE, length = 0x0002

INT08 : origin = 0xFFD0, length = 0x0002

INT09 : origin = 0xFFD2, length = 0x0002

INT10 : origin = 0xFFD4, length = 0x0002

INT11 : origin = 0xFFD6, length = 0x0002

INT12 : origin = 0xFFD8, length = 0x0002

INT13 : origin = 0xFFDA, length = 0x0002

INT14 : origin = 0xFFDC, length = 0x0002

INT15 : origin = 0xFFDE, length = 0x0002

INT16 : origin = 0xFFE0, length = 0x0002

INT17 : origin = 0xFFE2, length = 0x0002

INT18 : origin = 0xFFE4, length = 0x0002

INT19 : origin = 0xFFE6, length = 0x0002

INT20 : origin = 0xFFE8, length = 0x0002

INT21 : origin = 0xFFEA, length = 0x0002

INT22 : origin = 0xFFEC, length = 0x0002

INT23 : origin = 0xFFEE, length = 0x0002

INT24 : origin = 0xFFF0, length = 0x0002

INT25 : origin = 0xFFF2, length = 0x0002

INT26 : origin = 0xFFF4, length = 0x0002

INT27 : origin = 0xFFF6, length = 0x0002

INT28 : origin = 0xFFF8, length = 0x0002

INT29 : origin = 0xFFFA, length = 0x0002

INT30 : origin = 0xFFFC, length = 0x0002

RESET : origin = 0xFFFE, length = 0x0002

}

/****************************************************************************/

/* SPECIFY THE SECTIONS ALLOCATION INTO MEMORY */

/****************************************************************************/

SECTIONS

{

.bss : {} > RAM /* GLOBAL & STATIC VARS */

.data : {} > RAM /* GLOBAL & STATIC VARS */

.sysmem : {} > RAM /* DYNAMIC MEMORY ALLOCATION AREA */

.stack : {} > RAM (HIGH) /* SOFTWARE SYSTEM STACK */

.text : {} > FLASH /* CODE */

.cinit : {} > FLASH /* INITIALIZATION TABLES */

.const : {} > FLASH /* CONSTANT DATA */

.cio : {} > RAM /* C I/O BUFFER */

.pinit : {} > FLASH /* C++ CONSTRUCTOR TABLES */

.init_array : {} > FLASH

/* C++ CONSTRUCTOR TABLES */

.mspabi.exidx : {} > FLASH

/* C++ CONSTRUCTOR TABLES */

.mspabi.extab : {} > FLASH

/* C++ CONSTRUCTOR TABLES */

.infoA : {} > INFOA

/* MSP430 INFO FLASH MEMORY SEGMENTS */

.infoB : {} > INFOB

.infoC : {} > INFOC

.infoD : {} > INFOD

/* MSP430 INTERRUPT VECTORS */

RESERVED0 : { * ( .int00 ) } > INT00 type = VECT_INIT

RESERVED1 : { * ( .int01 ) } > INT01 type = VECT_INIT

RESERVED2 : { * ( .int02 ) } > INT02 type = VECT_INIT

RESERVED3 : { * ( .int03 ) } > INT03 type = VECT_INIT

RESERVED4 : { * ( .int04 ) } > INT04 type = VECT_INIT

RESERVED5 : { * ( .int05 ) } > INT05 type = VECT_INIT

RESERVED6 : { * ( .int06 ) } > INT06 type = VECT_INIT

RESERVED7 : { * ( .int07 ) } > INT07 type = VECT_INIT

RESERVED8 : { * ( .int08 ) } > INT08 type = VECT_INIT

RESERVED9 : { * ( .int09 ) } > INT09 type = VECT_INIT

RESERVED10 : { * ( .int10 ) } > INT10 type = VECT_INIT

RESERVED11 : { * ( .int11 ) } > INT11 type = VECT_INIT

RESERVED12 : { * ( .int12 ) } > INT12 type = VECT_INIT

RESERVED13 : { * ( .int13 ) } > INT13 type = VECT_INIT

RESERVED14 : { * ( .int14 ) } > INT14 type = VECT_INIT

RESERVED15 : { * ( .int15 ) } > INT15 type = VECT_INIT

USCIAB1TX : { * ( .int16 ) } > INT16 type = VECT_INIT

USCIAB1RX : { * ( .int17 ) } > INT17 type = VECT_INIT

PORT1 : { * ( .int18 ) } > INT18 type = VECT_INIT

PORT2 : { * ( .int19 ) } > INT19 type = VECT_INIT

RESERVED20 : { * ( .int20 ) } > INT20 type = VECT_INIT

ADC12 : { * ( .int21 ) } > INT21 type = VECT_INIT

USCIAB0TX : { * ( .int22 ) } > INT22 type = VECT_INIT

USCIAB0RX : { * ( .int23 ) } > INT23 type = VECT_INIT

TIMERA1 : { * ( .int24 ) } > INT24 type = VECT_INIT

TIMERA0 : { * ( .int25 ) } > INT25 type = VECT_INIT

WDT : { * ( .int26 ) } > INT26 type = VECT_INIT

COMPARATORA : { * ( .int27 ) } > INT27 type = VECT_INIT

TIMERB1 : { * ( .int28 ) } > INT28 type = VECT_INIT

TIMERB0 : { * ( .int29 ) } > INT29 type = VECT_INIT

NMI : { * ( .int30 ) } > INT30 type = VECT_INIT

.reset : {} > RESET

/* MSP430 RESET VECTOR */

}

/****************************************************************************/

/* INCLUDE PERIPHERALS MEMORY MAP */

/****************************************************************************/

-l msp430f2410.cmd

==================================================================

I need to know how i can make the IAR linker code compatible with CCS.

 

  • Hi!

    The linker configuration files of IAR Embedded Workbench and CCS are vastly different, so there is no simple conversion you can make. However, most of the content of the IAR file deal with standard segments, and you don't have to convert them. The ones that remain are your special segments, the ones I found are:

      -Z(CODE)IDR_SEGS=2200-33FF
      -Z(CODE)SEC_KEY_SEG=3400-35FF
      -Z(CODE)BSLSKEY=FFDE-FFDF

    You probably have definitions in you application that place constants or code in these segments. (You might would like to change the segment names, as the IAR conversion is to use capital letters and CCS use dot + lower letters (like ".text").)

    Unfortunately, I don't know CCS well enough to tell you how to write the above lines in their syntax.

        -- Anders Lindgren, IAR Systems (Author of the IAR compiler for MSP430)

  • I am seeing two different but not continuous regions assigned for code segment.(2100-21FF,3600-FFDD)

     -Z(CODE)CSTART,ISR_CODE,CODE_ID=2100-21FF,3600-FFDD

    -P(CODE)CODE=2100-21FF,3600-FFDD

    How can i modify this in CCS linker file for the same behaviour?

**Attention** This is a public forum