SLAU646F September   2015  – June 2020

 

  1.   Read This First
    1.     How to Use This User's Guide
    2.     Related Documentation
    3.     If You Need Assistance
    4.     Trademarks
  2. 1Introduction
  3. 2Installing MSP430 GCC Toolchain
    1. 2.1 Installing MSP430 GCC in CCS Releases Before v7.2
    2. 2.2 Installing MSP430 GCC as Stand-Alone Package
  4. 3Using MSP430 GCC Within CCS
    1. 3.1 Create New Project
    2. 3.2 Debug Using MSP-FET, MSPFET430UIF, eZ-FET, eZ430
    3. 3.3 Build Options for MSP430 GCC
      1. 3.3.1  GNU Compiler
      2. 3.3.2  GNU Compiler: Runtime
      3. 3.3.3  GNU Compiler: Symbols
      4. 3.3.4  GNU Compiler: Directories
      5. 3.3.5  GNU Compiler: Optimization
      6. 3.3.6  GNU Compiler: Preprocessor
      7. 3.3.7  GNU Compiler: Assembler
      8. 3.3.8  GNU Compiler: Debugging
      9. 3.3.9  GNU Compiler: Diagnostic Options
      10. 3.3.10 GNU Compiler: Miscellaneous
      11. 3.3.11 GNU Linker
      12. 3.3.12 GNU Linker: Basic
      13. 3.3.13 GNU Linker: Libraries
      14. 3.3.14 GNU Linker: Symbols
      15. 3.3.15 GNU Linker: Miscellaneous
      16. 3.3.16 GNU Objcopy Utility
    4. 3.4 CCS Compared to MSP430 GCC
  5. 4MSP430 GCC Stand-Alone Package
    1. 4.1 MSP430 GCC Stand-Alone Package Folder Structure
    2. 4.2 Package Content
    3. 4.3 MSP430 GCC Options
    4. 4.4 MSP430 Built-in Functions
    5. 4.5 Using MSP430 GCC Support Files
    6. 4.6 Quick Start: Blink the LED
      1. 4.6.1 Building with a Makefile
      2. 4.6.2 Building Manually with gcc
      3. 4.6.3 Debugging
        1. 4.6.3.1 Starting GDB Agent
          1. 4.6.3.1.1 Using the GUI
          2. 4.6.3.1.2 Using the Command Line
        2. 4.6.3.2 Debugging With GDB
          1. 4.6.3.2.1 Running a Program in the Debugger
          2. 4.6.3.2.2 Setting a Breakpoint
          3. 4.6.3.2.3 Single Stepping
          4. 4.6.3.2.4 Stopping or Interrupting a Running Program
      4. 4.6.4 Creating a New Project
    7. 4.7 GDB Settings
      1. 4.7.1 Console Application
      2. 4.7.2 Optional Parameters for msp430.dat
      3. 4.7.3 GUI Application
      4. 4.7.4 Attaching the Debugger
      5. 4.7.5 Configuring the Target Voltage
      6. 4.7.6 Resetting the Target
      7. 4.7.7 Halting the Target
  6. 5MSP430 GCC Features
    1. 5.1 C/C++ Attributes
      1. 5.1.1 GCC Function Attribute Support
      2. 5.1.2 GCC Data Attribute Support
      3. 5.1.3 GCC Section Attribute Support
    2. 5.2 Hints for Reducing the Size of MSP430 GCC Programs
      1. 5.2.1 The -mtiny-printf Option
      2. 5.2.2 The -ffunction-sections and -fdata-sections Options
      3. 5.2.3 Making Large Programs Fit Across Upper and Lower Memory
      4. 5.2.4 NOP Instructions Surrounding Interrupt State Changes
    3. 5.3 C Runtime Library (CRT) Startup Behavior
    4. 5.4 Using printf with MSP430 GCC
    5. 5.5 Link-time Optimization (LTO)
    6. 5.6 The __int20 Type and Pointers in the Large Memory Model
  7. 6Building MSP430 GCC From Sources
    1. 6.1 Required Tools
    2. 6.2 Building MSP430 GCC (Mitto Systems Limited)
      1. 6.2.1 Building a Native MSP430 GCC Toolchain
      2. 6.2.2 Building the MSP430 GCC Toolchain for Windows
    3. 6.3 Building MSP430 GCC Stand-Alone Full Package
  8. 7MSP430 GCC and MSPGCC
    1. 7.1 Calling Convention
    2. 7.2 Other Portions of the ABI
  9. 8Appendix
    1. 8.1 GCC Intrinsic Support
    2. 8.2 NOP Instructions Required Between Interrupt State Changes
  10. 9References
  11.   Revision History

GCC Function Attribute Support

The following attributes may be applied to function declarations:

  • critical

    Disable interrupts on entry, and restore the previous interrupt state on exit.

  • interrupt or interrupt(x)

    Make the function an interrupt service routine for interrupt "x". This attribute can also be used without an argument. If no argument is used, the function is not linked to an interrupt, but the function will have properties that are associated with interrupts.

    To define an interrupt, use the following syntax:

    void __attribute__ ((interrupt(INTERRUPT_VECTOR))) INTERRUPT_ISR (void)

    Example:

    void __attribute__ ((interrupt(UNMI_VECTOR))) UNMI_ISR (void) 
    { // isr }

    You can also use the following macro defined in the iomacros.h file, which is automatically included when using msp430.h from the MSP430 GCC support files:

    #define __interrupt_vec(vec)__attribute__((interrupt(vec)))

    Example:

    void __interrupt_vec(UNMI_VECTOR) UNMI_ISR (void) 
    {}
  • location(address)

    Can be applied to declarations of functions or static/global data. It instructs the linker to place the section containing the function or data object at the specified address if possible.

    For accurate placement, objects with this location attribute should be in their own sections. This can be achieved by using the GCC command-line options -f{function,data}-sections or by applying the "section" attribute to the object’s declaration.

    The memory region containing the specified address must be compatible with the type of section created for the object. For example, you cannot place read/write data in a read-only memory region. The linker deduces the memory region type from the flags set in the linker script for the memory region and the names of output sections that have been placed in that memory region. For example, if a memory region contains an output section called “.text”, the linker assumes that entire region is executable.

    The linker renames sections containing objects that use the “location” attribute, giving them the prefix “.smi.location”. These “.smi.location” sections are placed either in their own output sections in the linked executable or within other output sections, among input sections that do not rely on a specific ordering. More specifically, the linker places “.smi.location” sections with other input sections only under certain known output sections such as “.text” or “.data.*”. This prevents “.smi.location” sections from being placed with sections such as “.crt_*”, which rely on section ordering for proper operation of the program.

    If the linker cannot place a “.smi.location” section within an output section due to an incompatibility, it places the “.smi.location” section in its own output section at the specified address. It then shifts the incompatible output section to be placed immediately after it.

    The linker only attempts to place the first object with a location attribute in an input section. It emits a warning if any subsequent location attributes are ignored. Since the linker can only place location objects at a specific address by placing their input section at that address, it is not possible to accurately place more than one location object per input section.

    To initialize data/bss variables that have been placed at specific locations, the linker creates a “.smi.location_init_array” section. The C Run-time (CRT) startup code uses this table to copy data or zero-initialize bss variables just before calling main().

  • naked

    Do not generate a prologue or epilogue for the function.

  • reentrant

    Disable interrupts on entry, and always enable them on exit.

  • retain

    Can be applied to declarations of functions or static/global data. It instructs the linker to retain the section that contains this object in the linked executable file, even if symbols in that section appear unused. This prevents the section from being garbage collected. This attribute implies that the “used” attribute also applies.

  • wakeup

    When applied to an interrupt service routine, wake the processor from any low-power state as the routine exits. When applied to other routines, this attribute is silently ignored.