0% found this document useful (0 votes)
41 views

MSP 430 Gccuserguide

Uploaded by

Ocean Atlantic
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
41 views

MSP 430 Gccuserguide

Uploaded by

Ocean Atlantic
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 50

User's Guide

SLAU646E – September 2015 – Revised June 2019

MSP430 GCC

This manual describes the setup and basic operation of the MSP430™ GCC compiler and the software
development environment.

Contents
1 Introduction ................................................................................................................... 6
2 Installing MSP430 GCC Compiler ......................................................................................... 6
2.1 Installing MSP430 GCC in CCS Releases Before v7.2........................................................ 7
2.2 Installing MSP430 GCC as Stand-Alone Package ............................................................. 9
3 Using MSP430 GCC Within CCS ........................................................................................ 10
3.1 Create New Project ............................................................................................... 10
3.2 Debug Using MSP-FET, MSPFET430UIF, eZ-FET, eZ430 ................................................. 11
3.3 Build Options for MSP430 GCC ................................................................................. 11
3.4 Change an Existing CCS project That Uses TI Compiler to MSP430 GCC ............................... 30
3.5 Create a New CDT Project Using MSP430 GCC ............................................................. 30
3.6 GDB With MSP430 and CCSv6 ................................................................................. 30
3.7 CCS Compared to MSP430 GCC ............................................................................... 30
4 MSP430 GCC Stand-Alone Package .................................................................................... 31
4.1 MSP430 GCC Stand-Alone Packages ......................................................................... 31
4.2 Package Content .................................................................................................. 32
4.3 MSP430 GCC Options............................................................................................ 33
4.4 MSP430 Built-in Functions ....................................................................................... 35
4.5 MSP430 GCC Interrupts Definition ............................................................................. 36
4.6 Using MSP430 GCC Support Files ............................................................................. 36
4.7 Quick Start: Blink the LED ....................................................................................... 37
4.8 GDB Settings ...................................................................................................... 39
4.9 Hints for Reducing the Size of MSP430-GCC Programs .................................................... 41
5 Building MSP430 GCC From Sources .................................................................................. 43
5.1 Required Tools .................................................................................................... 43
5.2 Building MSP430 GCC (Mitto Systems Limited) .............................................................. 43
5.3 Building MSP430 GCC Stand-Alone Full Package ........................................................... 44
6 MSP430 GCC and MSPGCC ............................................................................................. 45
6.1 Calling Convention ................................................................................................ 45
6.2 Other Portions of the ABI......................................................................................... 45
7 Appendix..................................................................................................................... 46
7.1 GCC Intrinsic Support ............................................................................................ 46
7.2 GCC Function Attribute Support................................................................................. 47
7.3 GCC Data Attribute Support ..................................................................................... 47
7.4 GCC Section Attribute Support .................................................................................. 47
7.5 NOP Instructions Required Between Interrupt State Changes .............................................. 48
8 References .................................................................................................................. 48

List of Figures
1 MSP430 GCC With CCS Installer ......................................................................................... 7
2 MSP430 GCC With CCS Installer ......................................................................................... 7
3 Installing MSP430 GCC Through CCS Apps Center ................................................................... 8
4 MSP430 GCC Stand-Alone Package Installer ........................................................................... 9

SLAU646E – September 2015 – Revised June 2019 MSP430 GCC 1


Submit Documentation Feedback
Copyright © 2015–2019, Texas Instruments Incorporated
www.ti.com

5 MSP430 GCC Stand-Alone Package Installation Directory ............................................................ 9


6 Creating New CCS Project Using MSP430 GCC ...................................................................... 10
7 CCS Project Using MSP430 GCC ....................................................................................... 11
8 MSP430 GCC Settings .................................................................................................... 12
9 MSP430 GCC Settings: Runtime ........................................................................................ 13
10 MSP430 GCC Settings: Symbols ........................................................................................ 14
11 MSP430 GCC Settings: Directories...................................................................................... 15
12 MSP430 GCC Settings: Optimization ................................................................................... 16
13 MSP430 GCC Settings: Preprocessor .................................................................................. 17
14 MSP430 GCC Settings: Assembler ...................................................................................... 18
15 MSP430 GCC Settings: Debugging ..................................................................................... 19
16 MSP430 GCC Settings: Diagnostic Options ............................................................................ 20
17 MSP430 GCC Settings: Miscellaneous ................................................................................. 21
18 MSP430 GCC Linker Settings ............................................................................................ 22
19 MSP430 GCC Linker Basic Settings .................................................................................... 23
20 MSP430 GCC Linker Libraries Settings ................................................................................. 24
21 MSP430 GCC Linker Symbols Settings ................................................................................. 25
22 MSP430 GCC Linker Miscellaneous Settings .......................................................................... 26
23 MSP430 GCC GNU Objcopy Utility Settings ........................................................................... 27
24 MSP430 GCC GNU Objcopy Utility General Options Settings....................................................... 28
25 MSP430 GCC GNU Objcopy Utility Miscellaneous Settings ......................................................... 29

List of Tables
1 MSP430 TI and GCC Compilers Comparison ........................................................................... 6
2 MSP430 GCC Settings .................................................................................................... 12
3 MSP430 GCC Settings: Runtime ........................................................................................ 13
4 MSP430 GCC Settings: Symbols ........................................................................................ 14
5 MSP430 GCC Settings: Directories...................................................................................... 15
6 MSP430 GCC Settings: Optimization ................................................................................... 16
7 MSP430 GCC Settings: Preprocessor .................................................................................. 17
8 MSP430 GCC Settings: Assembler ...................................................................................... 18
9 MSP430 GCC Settings: Debugging ..................................................................................... 19
10 MSP430 GCC Settings: Diagnostic Options ............................................................................ 20
11 MSP430 GCC Settings: Miscellaneous ................................................................................. 21
12 MSP430 GCC Linker Settings ............................................................................................ 22
13 MSP430 GCC Linker Basic Settings .................................................................................... 23
14 MSP430 GCC Linker Libraries Settings ................................................................................. 24
15 MSP430 GCC Linker Symbols Settings ................................................................................. 25
16 MSP430 GCC Linker Miscellaneous Settings .......................................................................... 26
17 MSP430 GCC GNU Objcopy Utility Settings ........................................................................... 27
18 MSP430 GCC GNU Objcopy Utility General Options Settings....................................................... 28
19 MSP430 GCC GNU Objcopy Utility Miscellaneous Settings ......................................................... 29
20 MSP430 GCC Stand-Alone Package.................................................................................... 31
21 MSP430 GCC Command Options ....................................................................................... 33
22 MSP430 GCC Assembler Options ....................................................................................... 35
23 MSP430 GCC Linker Options ............................................................................................ 35

2 MSP430 GCC SLAU646E – September 2015 – Revised June 2019


Submit Documentation Feedback
Copyright © 2015–2019, Texas Instruments Incorporated
www.ti.com

Trademarks
MSP430, Code Composer Studio, E2E, eZ430-Chronos, LaunchPad are trademarks of Texas
Instruments.
macOS is a registered trademark of Apple Inc.
Linux is a registered trademark of Linus Torvalds.
Windows is a registered trademark of Microsoft Corporation.
All other trademarks are the property of their respective owners.

SLAU646E – September 2015 – Revised June 2019 MSP430 GCC 3


Submit Documentation Feedback
Copyright © 2015–2019, Texas Instruments Incorporated
www.ti.com

Preface: Read This First


How to Use This User's Guide
This manual describes only the setup and basic operation of the MSP430™ GCC compiler and the
software development environment. It does not fully describe the MSP430 GCC compiler or MSP430
microcontrollers or the complete development software and hardware systems. For details on these items,
see the appropriate documents listed in Related Documentation.
This manual applies to the use of MSP430 GCC as stand-alone package or within the Code Composer
Studio™ (CCS) IDE v9.x and with the TI MSP-FET, MSP-FET430UIF, eZ-FET, and eZ430 development
tools series.
These tools contain the most up-to-date materials available at the time of packaging. For the latest
materials (including data sheets, user's guides, software, and application information), visit the TI MSP430
website or contact your local TI sales office.

Related Documentation
The primary sources of MSP430 information are the device-specific data sheets and user's guides. The
MSP430 website contains the most recent version of these documents.
The GCC documentation can be found at http://www.gnu.org. All related information for the MSP430 GCC
compiler is available at http://www.ti.com/tool/msp430-gcc-opensource.
Documents that describe the Code Composer Studio tools (CCS IDE, assembler, C compiler, linker, and
librarian) can be found at http://www.ti.com/tool/ccstudio. A CCS-specific Wiki page (FAQ) and the TI
E2E™ Community support forums provide additional help.
MSP430 GCC documentation
Using the GNU Compiler Collection, Richard M. Stallman (http://gcc.gnu.org/onlinedocs/gcc.pdf). Refer
to the MSP430 Options section.
GDB: The GNU Project Debugger, Free Software Foundation, Inc.
(https://sourceware.org/gdb/current/onlinedocs/)
GCC for MSP430™ Microcontrollers Quick Start Guide
Calling Convention and ABI Changes in MSP GCC
CCS documentation
MSP430™ Assembly Language Tools User's Guide
MSP430™ Optimizing C/C++ Compiler User's Guide
Code Composer Studio™ IDE for MSP430™ MCUs User's Guide
MSP430 development tools documentation
MSP430™ Hardware Tools User's Guide
eZ430-F2013 Development Tool User's Guide
eZ430-RF2480 User's Guide
eZ430-RF2500 Development Tool User's Guide
eZ430-RF2500-SEH Development Tool User's Guide
eZ430-Chronos™ Development Tool User's Guide
MSP-EXP430G2 LaunchPad™ Development Kit User's Guide
Advanced debugging using the enhanced emulation module (EEM) with Code Composer Studio IDE
MSP430 device data sheets
MSP430 device family user's guides
MSP430x1xx Family User's Guide
MSP430x2xx Family User's Guide
MSP430x3xx Family User's Guide
MSP430F4xx Family User's Guide
MSP430F5xx and MSP430F6xx Family User's Guide
MSP430FR4xx and MSP430FR2xx Family User's Guide

4 MSP430 GCC SLAU646E – September 2015 – Revised June 2019


Submit Documentation Feedback
Copyright © 2015–2019, Texas Instruments Incorporated
www.ti.com

MSP430FR57xx Family User's Guide


MSP430FR58xx, MSP430FR59xx, and MSP430FR6xx Family User's Guide

If You Need Assistance


Support for the MSP430 devices and the hardware development tools is provided by the TI Product
Information Center (PIC). Contact information for the PIC can be found on the TI website. The TI E2E™
Community support forums for the MSP430 provide open interaction with peer engineers, TI engineers,
and other experts. Additional device-specific information can be found on the MSP430 website.

SLAU646E – September 2015 – Revised June 2019 MSP430 GCC 5


Submit Documentation Feedback
Copyright © 2015–2019, Texas Instruments Incorporated
Introduction www.ti.com

1 Introduction
TI has partnered with Mitto Systems Limited (http://www.mittosystems.com) to bring you a new and fully
supported open-source compiler as the successor to the community driven MSPGCC. The MSP430 GCC
uses the MSP430 ABI and is compatible with the TI compiler. This free GCC compiler supports all
MSP430 devices and has no code size limit. In addition, this compiler can be used as a stand-alone
package or used within Code Composer Studio (CCS) IDE v6.0 or later. Get started today in Windows,
Linux, or macOS environments.
Table 1 compares the MSP430 TI and GCC compilers.

Table 1. MSP430 TI and GCC Compilers Comparison


Proprietary TI
Compiler MSP430 GCC MSPGCC
Compiler
Code Size and Performance ✓✓✓ ✓ ✓
ABI TI TI Community
Integrated in CCS ✓ ✓ (1) ✗
Stand-alone ✗ ✓ ✓
Support TI TI Community
Cost Free ✓ ✓ ✓
(1)
The combination of CCS and GCC is completely free of charge with no code size limit.

The MSP430 GCC supports the following:


• MSP430 CPU 16-bit architecture
• MSP430 CPUX 20-bit architecture
• MSP430 CPUXv2 20-bit architecture
• Code and data placement in the lower (<64K) and upper (>64K) memory areas and across the
memory boundary
• The hardware multiplier of the MSP430 microcontrollers
This manual describes the use of the MSP430 GCC compiler with the MSP430 ultra-low-power
microcontrollers. The MSP430 GCC compiler can be used within CCS version 6.0 or later, or it can be
used as a stand-alone package. The compiler supports Windows®, Linux®, and macOS® operating
systems. This manual describes only CCS for Windows operating systems. The versions of CCS for Linux
and macOS operating systems are similar and, therefore, are not described separately.

2 Installing MSP430 GCC Compiler


MSP430 GCC supports Windows, Linux, and macOS:
• Windows 7 32 bit or 64 bit
• Windows 8 32 bit or 64 bit
• Windows 10 32 bit or 64 bit
• Linux 32 bit or 64 bit
• macOS 64 bit
You can install the MSP430 GCC using any of the following methods:
• MSP430 GCC compiler is installed by default by CCS v7.2 and higher.
• In CCS releases prior to v7.2, the MSP430 GCC (compiler only) is available in the CCS Apps Center.
The corresponding MSP430 GCC support files (header and linkers) are downloaded with a standard
MSP430 emulation package. For details, see Section 2.1.
• MSP430 GCC can be also downloaded as stand-alone package. For details, see Section 2.2.

6 MSP430 GCC SLAU646E – September 2015 – Revised June 2019


Submit Documentation Feedback
Copyright © 2015–2019, Texas Instruments Incorporated
www.ti.com Installing MSP430 GCC Compiler

2.1 Installing MSP430 GCC in CCS Releases Before v7.2


The MSP430 GCC compiler can be installed in CCS v6.0 or higher in two ways: either when CCS is
installed or as an add-on to an existing CCS installation.
1. During the install process of CCS v6.0, select the MSP430 GCC compiler to be installed as an "add-
on" (see Figure 1). MSP430 GCC is installed the first time you run CCS (see Figure 2).

Figure 1. MSP430 GCC With CCS Installer

Figure 2. MSP430 GCC With CCS Installer

SLAU646E – September 2015 – Revised June 2019 MSP430 GCC 7


Submit Documentation Feedback
Copyright © 2015–2019, Texas Instruments Incorporated
Installing MSP430 GCC Compiler www.ti.com

2. If CCS is already installed without MSP430 GCC, MSP430 GCC can be added at a later time through
the CCS Apps Center (see Figure 3).
1. Go to the menu View → CCS App Center.
2. Select MSP430 GCC
3. Click the Install Software button to start the installation.

Figure 3. Installing MSP430 GCC Through CCS Apps Center

3. The GCC compiler tools are installed to the following directory in the CCS installation:
ccsv6\tools\compiler\gcc_msp430_x.x.x (where xxx denotes the version number).

8 MSP430 GCC SLAU646E – September 2015 – Revised June 2019


Submit Documentation Feedback
Copyright © 2015–2019, Texas Instruments Incorporated
www.ti.com Installing MSP430 GCC Compiler

2.2 Installing MSP430 GCC as Stand-Alone Package


The MSP430 GCC full stand-alone package can be downloaded from the TI website for all supported
operating systems. The MSP430 GCC stand-alone package contains the compiler, device support files,
debug stack, and USB drivers.
To install the package:
1. Download the corresponding package installer and run it (see Figure 4).

Figure 4. MSP430 GCC Stand-Alone Package Installer

2. Select the install directory and click Next (see Figure 5).

Figure 5. MSP430 GCC Stand-Alone Package Installation Directory

NOTE: For the Linux installer, apply sudo chmod +x <installer> before executing the package.

SLAU646E – September 2015 – Revised June 2019 MSP430 GCC 9


Submit Documentation Feedback
Copyright © 2015–2019, Texas Instruments Incorporated
Using MSP430 GCC Within CCS www.ti.com

3 Using MSP430 GCC Within CCS

3.1 Create New Project


This section describes the step-by-step instructions to create an assembly or C project from scratch and to
download and run an application on the MSP430 MCU using the MSP430 GCC compiler. Also, the CCS
Help presents a more detailed information of the process.
1. Start CCS (Start → All Programs → Texas Instruments → Code Composer Studio → Code
Composer Studio).
2. Create a new project (File → New → CCS Project). Select the appropriate MSP430 device variant in
the Target field and enter the name for the project.
3. Select GNU v7.3.0.9 (Mitto Systems Limited) for Compiler version (or any newer version).
4. In the Project template and examples section, select Empty Project (with main.c). For assembly-only
projects, select Empty Project.

Figure 6. Creating New CCS Project Using MSP430 GCC

5. If you are using a USB Flash Emulation Tool such as the MSP-FET, MSP-FET430UIF, eZ-FET, or the
eZ430 Development Tool, they should be already configured by default.
6. For C projects, the setup is complete now.
7. Click Finish to create a new project that is then visible in the Project Explorer view.
Notice that the project contains a .ld file (appropriate for the target selected). This is the linker script
that contains the memory layout and section allocation. This file is the equivalent of the TI linker
command file (.cmd) used by TI MSP430 Compiler and Linker.
8. Enter the program code into the main.c file.
10 MSP430 GCC SLAU646E – September 2015 – Revised June 2019
Submit Documentation Feedback
Copyright © 2015–2019, Texas Instruments Incorporated
www.ti.com Using MSP430 GCC Within CCS

To use an existing source file for the project, click Project → Add Files... and browse to the file of
interest. Single click on the file and click Open or double-click on the file name to complete the addition
of it into the project folder.
Now add the necessary source files to the project and build. Similar to TI tools, additional compiler and
linker options can be set from Project Properties.
9. Build the project (Project → Build Project).

Figure 7. CCS Project Using MSP430 GCC

10. Debug the application (Run → Debug (F11)). This starts the debugger, which gains control of the
target, erases the target memory, programs the target memory with the application, and resets the
target.
11. Click Run → Resume (F8) to start the application.
12. Click Run → Terminate to stop the application and to exit the debugger. CCS automatically returns to
the C/C++ view (code editor).

3.2 Debug Using MSP-FET, MSPFET430UIF, eZ-FET, eZ430


MSP430 devices can be debugged in CCS using MSP-FET, MSPFET430UIF, eZ-FET, and eZ430
debuggers. For more details, refer to the Code Composer Studio™ IDE for MSP430™ MCUs User's
Guide.

3.3 Build Options for MSP430 GCC


The settings required to configure the GCC are numerous and detailed and are not all described here.
Most projects can be compiled and debugged with default factory settings.
To access the project settings for the active project, click Project → Properties.
The following project settings are common:
• Specify the target device for debug session (Project → Properties → General → Device → Variant).
The corresponding Linker Command File and Runtime Support Library are selected automatically.
• To more easily debug a C project, disable optimization (-O0) or use -Og, which enables only those

SLAU646E – September 2015 – Revised June 2019 MSP430 GCC 11


Submit Documentation Feedback
Copyright © 2015–2019, Texas Instruments Incorporated
Using MSP430 GCC Within CCS www.ti.com

optimizations that don't interfere with debugging. The -Og option reduces code size and improves
performance compared to -O0.
• Specify the search paths for the C preprocessor (Project → Properties → Build → GNU Compiler →
Directories → Include Paths (-I)).
• Specify the search paths for any libraries being used (Project → Properties → Build → GNU Linker
→ Libraries → Library search path (-L, --library-path)).
• Specify the debugger interface (Project → Properties → General → Device → Connection). Select
TI MSP430 USBx for the USB interface.
• Enable the erasure of the Main and Information memories before object code download (Project →
Properties → Debug → MSP430 Properties → Download Options → Erase Main and Information
Memory).
• To ensure proper stand-alone operation, select Hardware Breakpoints (Project → Properties →
Debug → MSP430 Properties). If Software Breakpoints are enabled (Project → Properties →
Debug → Misc/Other Options → Allow software breakpoints to be used), ensure proper
termination of each debug session while the target is connected. Otherwise, the target may not work
as expected stand-alone as the application on the device still contains the software breakpoint
instructions.

3.3.1 GNU Compiler


Figure 8 shows the MSP430 GCC settings window.

Figure 8. MSP430 GCC Settings

Table 2 describes the options that are available for MSP430 GCC Settings.

Table 2. MSP430 GCC Settings


Option Description
Command Compiler location
Command-line pattern Command line parameters
Command line with which the compiler is called. Displays
Summary of flags set
all the flags passed to the compiler.

12 MSP430 GCC SLAU646E – September 2015 – Revised June 2019


Submit Documentation Feedback
Copyright © 2015–2019, Texas Instruments Incorporated
www.ti.com Using MSP430 GCC Within CCS

3.3.2 GNU Compiler: Runtime


Figure 9 shows the MSP430 GCC Runtime settings window.

Figure 9. MSP430 GCC Settings: Runtime

Table 3 describes the options that are available for MSP430 GCC Runtime settings.

Table 3. MSP430 GCC Settings: Runtime


Option Description
Specifies the Instruction Set Architecture (ISA) to use. Accepted values are msp430, msp430x,
Target CPU (-mcpu)
and msp430xv2. This option is deprecated. The '-mmcu=' option should be used to select the ISA.
Select the MCU to target. This is used to create a C preprocessor symbol based on the MCU
name, converted to upper case and prefixed and postfixed with__. This in turn is used by the
msp430.h header file to select an MCU-specific supplementary header file.
The option also sets the ISA to use. If the MCU name is one that is known to only support the 430
ISA then that is selected, otherwise the 430X ISA is selected. A generic MCU name of msp430
Target MCU (-mmcu) can also be used to select the 430 ISA. Similarly, the generic msp430x MCU name selects the
430X ISA.
In addition, an MCU-specific linker script is added to the linker command line. The script's name is
the name of the MCU with ".ld" appended. Thus, specifying '-mmcu=xxx' on the gcc command line
defines the C preprocessor symbol __XXX__ and causes the linker to search for a script called
'xxx.ld'. This option is also passed to the assembler.
Enable or disable generation of information about every class with virtual functions for use by the
Generate run time type C++ runtime type identification features.
descriptor information • On (-frtti)
• Off (-fno-rtti)
Enable or disable exception handling. Generates extra code needed to propagate exceptions.
Enable exception handling • On (-fexceptions)
• Off (-fno-exceptions)

SLAU646E – September 2015 – Revised June 2019 MSP430 GCC 13


Submit Documentation Feedback
Copyright © 2015–2019, Texas Instruments Incorporated
Using MSP430 GCC Within CCS www.ti.com

3.3.3 GNU Compiler: Symbols


Figure 10 shows the MSP430 GCC Symbols settings window.

Figure 10. MSP430 GCC Settings: Symbols

Table 4 describes the options that are available for MSP430 GCC Symbols settings.

Table 4. MSP430 GCC Settings: Symbols


Option Description
-D name
Predefine name as a macro.
Define symbols (-D) -D name=definition
Predefine name as a macro, with definition 1.
-U name
Undefine symbols (-U)
Cancel any previous definition of name, either built-in or provided with a -D option.

14 MSP430 GCC SLAU646E – September 2015 – Revised June 2019


Submit Documentation Feedback
Copyright © 2015–2019, Texas Instruments Incorporated
www.ti.com Using MSP430 GCC Within CCS

3.3.4 GNU Compiler: Directories


Figure 11 shows the MSP430 GCC Directories settings window.

Figure 11. MSP430 GCC Settings: Directories

Table 5 describes the options that are available for MSP430 GCC Directories settings.

Table 5. MSP430 GCC Settings: Directories


Option Description
Include paths (-I) Add the directory to the list of directories to be searched for header files.

SLAU646E – September 2015 – Revised June 2019 MSP430 GCC 15


Submit Documentation Feedback
Copyright © 2015–2019, Texas Instruments Incorporated
Using MSP430 GCC Within CCS www.ti.com

3.3.5 GNU Compiler: Optimization


Figure 12 shows the MSP430 GCC Optimization settings window.

Figure 12. MSP430 GCC Settings: Optimization

Table 6 describes the options that are available for MSP430 GCC Optimization settings.

Table 6. MSP430 GCC Settings: Optimization


Option Description
Specifies the optimizations that the compiler applies to the generated object code. The
options available are:
• None (O0): Disable optimizations. This setting is equivalent to specifying the -O0
command-line option. The compiler generates unoptimized linear assembly
language code.
• Optimize (O1): The compiler performs all targets independent (that is,
nonparallelized) optimizations, such as function inlining. This setting is equivalent
to specifying the -O1 command-line option. The compiler omits all target-specific
optimizations and generates linear assembly language code.
• Optimize more (O2): The compiler performs all optimizations (both target-
independent and target-specific). This setting is equivalent to specifying the -O2
command-line option. The compiler outputs optimized nonlinear parallelized
Optimization Level
assembly language code.
• Optimize most (O3): The compiler performs all the level 2 optimizations, then the
low-level optimizer performs global-algorithm register allocation. This setting is
equivalent to specifying the -O3 command-line option. At this optimization level,
the compiler generates code that is usually faster than the code generated from
level 2 optimizations.
• Optimize for space rather than speed (-Os): Enables all -O2 optimizations that do
not typically increase code size. The -Os option also performs further
optimizations designed to reduce code size.
• Optimize for speed disregarding exact standards compliance (-Ofast): Enables all
-O3 optimizations. The -Ofast option also enables optimizations that are not valid
for all standard-compliant programs, such as -ffast-math.
Make 'char' unsigned by default
Enable this option to ensure that the char is signed.
(-funsigned-char)
Place each function into its own section
Enable this option to place each function in its own section in the output file.
(-ffunction-sections)
Place data items into their own section
Enable this option to place each data item in its own section in the output file.
(-fdata-sections)

16 MSP430 GCC SLAU646E – September 2015 – Revised June 2019


Submit Documentation Feedback
Copyright © 2015–2019, Texas Instruments Incorporated
www.ti.com Using MSP430 GCC Within CCS

Table 6. MSP430 GCC Settings: Optimization (continued)


Option Description
Convert floating point constants to single
Treat floating-point constants as single precision instead of implicitly converting them to
precision constants
double-precision constants.
(-fsingle-precision-constant)

NOTE: Use the -ffunction-sections and -fdata-sections options in conjunction with the --gc-sections
linker option to reduce code size by allowing the linker to remove unused sections.

3.3.6 GNU Compiler: Preprocessor


Figure 13 shows the MSP430 GCC Preprocessor settings window.

Figure 13. MSP430 GCC Settings: Preprocessor

Table 7 describes the options that are available for MSP430 GCC Preprocessor settings.

Table 7. MSP430 GCC Settings: Preprocessor


Option Description
Preprocess only; do not
Enable this option to preprocess only without compiling or assembling or linking.
compile, assemble, or link (-E)
Use this to supply system-specific preprocessor options that GCC does not recognize.
Other preprocessor flags
(-Xpreprocessor) To pass an option that takes an argument, use -Xpreprocessor twice, once for the option and
once for the argument.

SLAU646E – September 2015 – Revised June 2019 MSP430 GCC 17


Submit Documentation Feedback
Copyright © 2015–2019, Texas Instruments Incorporated
Using MSP430 GCC Within CCS www.ti.com

3.3.7 GNU Compiler: Assembler


Figure 14 shows the MSP430 GCC Assembler settings window.

Figure 14. MSP430 GCC Settings: Assembler

Table 8 describes the options that are available for MSP430 GCC Assembler settings.

Table 8. MSP430 GCC Settings: Assembler


Option Description
Other assembler flags
Specifies individual flag based on the user requirements.
(-Xassembler)

18 MSP430 GCC SLAU646E – September 2015 – Revised June 2019


Submit Documentation Feedback
Copyright © 2015–2019, Texas Instruments Incorporated
www.ti.com Using MSP430 GCC Within CCS

3.3.8 GNU Compiler: Debugging


Figure 15 shows the MSP430 GCC Debugging settings window.

Figure 15. MSP430 GCC Settings: Debugging

Table 9 describes the options that are available for MSP430 GCC Debugging settings.

Table 9. MSP430 GCC Settings: Debugging


Option Description
Generate debug information (-g) Produce debugging information. This information is required by the GDB debugger.
Generate debug information in DWARF Produce debugging information in DWARF format (if that is supported). The value of
version (-gdwarf-) version may be 2, 3 or 4; the default version for most targets is 4.
Disallow using extensions of later DWARF standard version than selected with -gdwarf-
Do not emit DWARF additions beyond
version. On most targets using nonconflicting DWARF extensions from later standard
selected version (-gstrict-dwarf)
versions is allowed.
Generate extra code to write profile information suitable for the analysis program. This
Enable function profiling (-p) option is required when compiling source files for which data is needed, and it is also
required when linking.

SLAU646E – September 2015 – Revised June 2019 MSP430 GCC 19


Submit Documentation Feedback
Copyright © 2015–2019, Texas Instruments Incorporated
Using MSP430 GCC Within CCS www.ti.com

3.3.9 GNU Compiler: Diagnostic Options


Figure 16 shows the MSP430 GCC Diagnostic Options settings window.

Figure 16. MSP430 GCC Settings: Diagnostic Options

Table 10 describes the options that are available for MSP430 GCC Diagnostic Options settings.

Table 10. MSP430 GCC Settings: Diagnostic Options


Option Description
Check for syntax errors, then
Enable this option to check the syntax of the code and report any errors.
stop (-fsyntax-only)
Suppress warnings (-w) Inhibit all warning messages.
Enable this option to enable all the warnings about constructions that some users consider
Enable most warning
questionable, and that are easy to avoid (or modify to prevent the warning), even in conjunction
messages (-Wall)
with macros.
Treat all warnings as errors Enable this option to make all warnings into hard errors. Source code that triggers warnings is
(-Werror) rejected.
Enable this option for the IDE to show each command line that it passes to the shell, along with
all progress, error, warning, and informational messages that the tools emits. This setting is
Enable verbose output (-v) equivalent to specifying the –v command-line option. By default, this checkbox is clear. The IDE
displays only error messages that the compiler emits. The IDE suppresses warning and
informational messages.

20 MSP430 GCC SLAU646E – September 2015 – Revised June 2019


Submit Documentation Feedback
Copyright © 2015–2019, Texas Instruments Incorporated
www.ti.com Using MSP430 GCC Within CCS

3.3.10 GNU Compiler: Miscellaneous


Figure 17 shows the MSP430 GCC Miscellaneous settings window.

Figure 17. MSP430 GCC Settings: Miscellaneous

Table 11 describes the options that are available for MSP430 GCC Miscellaneous settings.

Table 11. MSP430 GCC Settings: Miscellaneous


Option Description
Override built-in specs with the contents The spec strings built into GCC can be overridden by using the -specs= command-line
of the specified file (-specs) switch to specify a spec file.
-mlarge
Use large-model addressing (20-bit pointers, 20-bit size_t).
-mcode-region=none
Other flags -mdata-region=none
The MSP430 compiler has the ability to automatically distribute code and data between
low memory (addresses below 64K) and high memory. This only applies to parts that
actually have both memory regions and only if the linker script for the part has been
specifically set up to support this feature. See Table 21 for more information.

SLAU646E – September 2015 – Revised June 2019 MSP430 GCC 21


Submit Documentation Feedback
Copyright © 2015–2019, Texas Instruments Incorporated
Using MSP430 GCC Within CCS www.ti.com

3.3.11 GNU Linker


Figure 18 shows the MSP430 GCC Linker settings window.

Figure 18. MSP430 GCC Linker Settings

Table 12 describes the options that are available for MSP430 GCC Linker settings.

Table 12. MSP430 GCC Linker Settings


Option Description
Command Linker location
Command-line pattern Command line parameters
Command line with which the compiler is called. Displays all the flags passed to the
Summary of flags set
linker.

22 MSP430 GCC SLAU646E – September 2015 – Revised June 2019


Submit Documentation Feedback
Copyright © 2015–2019, Texas Instruments Incorporated
www.ti.com Using MSP430 GCC Within CCS

3.3.12 GNU Linker: Basic


Figure 19 shows the MSP430 GCC Linker Basic settings window.

Figure 19. MSP430 GCC Linker Basic Settings

Table 13 describes the options that are available for MSP430 GCC Linker Basic settings.

Table 13. MSP430 GCC Linker Basic Settings


Option Description
-o output
Output file (-o) Use output as the name for the file produced by ld; if this option is not specified, the
name 'a.out' is used by default. The script command OUTPUT can also specify the
output file name.
Print to the file mapfile a link map, which contains diagnostic information about where
Write a map file (-Map)
symbols are mapped by Id and information on global common storage allocation.
Use entry as the explicit symbol for beginning execution of the program, rather than the
Set start address (-e, --entry)
default entry point.
Do not use the standard system startup Do not use the standard system startup files when linking. The standard system
files when linking (-nostartfiles) libraries are used unless -nostdlib or -nodefaultlibs is used.
Do not use the standard system libraries when linking. Only the specified libraries are
passed to the linker, and options specifying linkage of the system libraries, such as
‑static‑libgcc or ‑shared‑libgcc, are ignored. The standard startup files are used unless -
Do not use the standard system libraries nostartfiles is used.
when linking (-nodefaultlibs)
The compiler may generate calls to memcmp, memset, memcpy, and memmove.
These entries are usually resolved by entries in libc. These entry points should be
supplied through some other mechanism when this option is specified.
Do not use the standard system startup
Do not use the standard system startup files or libraries when linking.
files or libraries when linking (-nostdlib)
Do not link with the shared libraries On systems that support dynamic linking, this prevents linking with the shared libraries.
(-static) On other systems, this option has no effect.
Enable garbage collection of unused input sections. It is ignored on targets that do not
Remove unused sections (--gc-sections)
support this option.

SLAU646E – September 2015 – Revised June 2019 MSP430 GCC 23


Submit Documentation Feedback
Copyright © 2015–2019, Texas Instruments Incorporated
Using MSP430 GCC Within CCS www.ti.com

3.3.13 GNU Linker: Libraries


Figure 20 shows the MSP430 GCC Linker Libraries settings window.

Figure 20. MSP430 GCC Linker Libraries Settings

Table 14 describes the options that are available for MSP430 GCC Linker Libraries settings.

Table 14. MSP430 GCC Linker Libraries Settings


Option Description
-T commandfile
Linker command files (-T, --script)
Read link commands from the file command file.
-l library
Libraries (-l, --library)
Search the library named library when linking.
-L searchdir
Library search path (-L, --library-path) Add path searchdir to the list of paths that ld will search for archive libraries and ld
control scripts.

24 MSP430 GCC SLAU646E – September 2015 – Revised June 2019


Submit Documentation Feedback
Copyright © 2015–2019, Texas Instruments Incorporated
www.ti.com Using MSP430 GCC Within CCS

3.3.14 GNU Linker: Symbols


Figure 21 shows the MSP430 GCC Linker Symbols settings window.

Figure 21. MSP430 GCC Linker Symbols Settings

Table 15 describes the options that are available for MSP430 GCC Linker Symbols settings.

Table 15. MSP430 GCC Linker Symbols Settings


Option Description
-defsym symbol=expression
Define a symbol (--defsym) Create a global symbol in the output file, with the absolute address given by
expression.
Start with undefined reference to
Force symbol to be entered in the output file as an undefined symbol
SYMBOL (--undefined, -u)

SLAU646E – September 2015 – Revised June 2019 MSP430 GCC 25


Submit Documentation Feedback
Copyright © 2015–2019, Texas Instruments Incorporated
Using MSP430 GCC Within CCS www.ti.com

3.3.15 GNU Linker: Miscellaneous


Figure 22 shows the MSP430 GCC Linker Miscellaneous settings window.

Figure 22. MSP430 GCC Linker Miscellaneous Settings

Table 16 describes the options that are available for MSP430 GCC Linker Miscellaneous settings.

Table 16. MSP430 GCC Linker Miscellaneous Settings


Option Description
Other flags Specifies individual flags based on the user requirements.

26 MSP430 GCC SLAU646E – September 2015 – Revised June 2019


Submit Documentation Feedback
Copyright © 2015–2019, Texas Instruments Incorporated
www.ti.com Using MSP430 GCC Within CCS

3.3.16 GNU Objcopy Utility


Figure 23 shows the MSP430 GCC GNU Objcopy Utility settings window.

Figure 23. MSP430 GCC GNU Objcopy Utility Settings

Table 17 describes the options that are available for GNU Objcopy Utility.

Table 17. MSP430 GCC GNU Objcopy Utility Settings


Option Description
Enable GNU Objcopy Utility Enable this option to enable the GNU Objcopy Utility. It is disabled by default.
Command GNU Objcopy location
Command-line pattern Command line parameters
Command line with which the GNU Objcopy is called. Displays all the flags passed to
Summary of flags set
the Objcopy command.

SLAU646E – September 2015 – Revised June 2019 MSP430 GCC 27


Submit Documentation Feedback
Copyright © 2015–2019, Texas Instruments Incorporated
Using MSP430 GCC Within CCS www.ti.com

Figure 24 shows the MSP430 GCC GNU Objcopy Utility General Options settings window.

Figure 24. MSP430 GCC GNU Objcopy Utility General Options Settings

Table 18 describes the options that are available for GNU Objcopy Utility General Options.

Table 18. MSP430 GCC GNU Objcopy Utility General Options Settings
Option Description
Specify output file name Specifies the output file name
-I bfdname
Assume input file is in format <bfdname> --input-target=bfdname
(-I, --input-target) Consider the source file's object format to be bfdname, rather than attempting to
deduce it.
-O bfdname
Create an output file in format <bfdname>
--output-target=bfdname
(-O, --output-target)
Write the output file using the object format bfdname.
-B bfdarch
Set output arch, when input is arch-less --binary-architecture=bfdarch
(-B, --binary-architecture) Useful when transforming an architecture-less input file into an object file. In this case
the output architecture can be set to bfdarch.
Convert debugging information, if possible Convert debugging information, if possible. This is not the default because only certain
(--debugging) debugging formats are supported, and the conversion process can be time consuming.
Copy modified/access timestamps to the Set the access and modification dates of the output file to be the same as those of the
output (-p, --preserve-dates) input file.

28 MSP430 GCC SLAU646E – September 2015 – Revised June 2019


Submit Documentation Feedback
Copyright © 2015–2019, Texas Instruments Incorporated
www.ti.com Using MSP430 GCC Within CCS

Table 18. MSP430 GCC GNU Objcopy Utility General Options Settings (continued)
Option Description
-R sectionpattern
--remove-section=sectionpattern
Remove section <name> from the output Remove any section matching sectionpattern from the output file. This option may be
(-R, --remove-section) given more than once. Note that using this option inappropriately may make the output
file unusable. Wildcard characters are accepted in sectionpattern. Using the -j and -R
options together results in undefined behavior.
Remove all symbol and relocation
Do not copy relocation and symbol information from the source file.
information (-S, --strip-all)
Remove all debugging symbols sections
Do not copy debugging symbols or sections from the source file.
(-g, --strip-debug)
Remove all symbols not needed by
Strip all symbols that are not needed for relocation processing.
relocations (--strip-unneeded)
Set the start address to <addr> Set the start address of the new file to the specified value. Not all object file formats
(--set-start) support setting the start address.
Verbose output: list all object files modified. In the case of archives, 'objcopy -V' lists all
List all object files modified (-v, --verbose)
members of the archive.

Figure 25 shows the MSP430 GCC GNU Objcopy Utility Miscellaneous settings window.

Figure 25. MSP430 GCC GNU Objcopy Utility Miscellaneous Settings

Table 19 describes the options that are available for GNU Objcopy Utility Miscellaneous.

Table 19. MSP430 GCC GNU Objcopy Utility Miscellaneous Settings


Option Description
Other flags Specifies individual flags based on the user requirements.

SLAU646E – September 2015 – Revised June 2019 MSP430 GCC 29


Submit Documentation Feedback
Copyright © 2015–2019, Texas Instruments Incorporated
Using MSP430 GCC Within CCS www.ti.com

3.4 Change an Existing CCS project That Uses TI Compiler to MSP430 GCC
An existing CCS project that uses the TI compiler can be changed to use MSP430 GCC. Visit Using
MSP430-GCC with CCSv6 for more details.

3.5 Create a New CDT Project Using MSP430 GCC


A standard Eclipse C/C++ project (rather than a CCS project) can use the MSP430 GCC compiler. This
would be necessary if you want to debug using GDB instead of the CCS debugger.
To create a new Eclipse C/C++ project that uses MSP430 GCC tools to build the executable, visit Using
MSP430-GCC with CCSv6.

3.6 GDB With MSP430 and CCSv6


CCSv6 and later can use GDB to debug MSP430 devices. To use the CCS GUI for things like setting and
removing breakpoints, the project should be an Eclipse C/C++ project rather than a CCS project.
Visit GDB with MSP430 and CCSv6 for more details.

3.7 CCS Compared to MSP430 GCC


Some CCS features are not supported in MSP430 GCC. These features are:
• Optimizer Assistant
• ULP Advisor
• Memory Protection Unit and Intellectual Property Encapsulation GUI configuration
• Memory allocation
These features require the TI Compiler.

30 MSP430 GCC SLAU646E – September 2015 – Revised June 2019


Submit Documentation Feedback
Copyright © 2015–2019, Texas Instruments Incorporated
www.ti.com MSP430 GCC Stand-Alone Package

4 MSP430 GCC Stand-Alone Package

4.1 MSP430 GCC Stand-Alone Packages


The MSP430 GCC stand-alone package is provided for users who prefer to use the MSP430 GCC
compiler with other IDE or console-based solutions for compiling and debugging. This stand-alone
package supports different operating systems and is provided in different formats:
• GCC, Binutils, and GDB binaries for Windows, Linux, and macOS
• MSP430 header and linker files
• MSP430 GCC source code
• GDB agent configuration
Table 20 lists all the available MSP430 GCC stand-alone packages.

Table 20. MSP430 GCC Stand-Alone Package


Software Description
MSP430 GCC 32-bit Linux installer including support files, debug stack, and
msp430-gcc-full-linux-installer-x.x.x.x.run USB drivers. Run sudo chmod +x <installer> before executing the
package.
MSP430 GCC 64-bit Linux installer including support files, debug stack, and
msp430-gcc-full-linux-x64-installer-x.x.x.x.run USB drivers. Run sudo chmod +x <installer> before executing the
package.
MSP430 GCC macOS installer including support files, debug stack, and USB
msp430-gcc-full-osx-installer-x.x.x.x .app.zip
drivers.
MSP430 GCC Windows installer including support files, debug stack, and
msp430-gcc-full-windows-installer-x.x.x.x.exe
USB drivers.
MSP430 GCC toolchain only. For linux32, linux64, macOS, win32, and win64
msp430-gcc-x.x.x.x_{platform}.{zip,tar.bz2}
platforms.
Full source tree of MSP430 GCC toolchain with scripts and instructions to
msp430-gcc-x.x.x.x-source-full.tar.bz2
build the toolchain from source.
Patch files for each of the components of MSP430 GCC (GCC, binutils,
msp430-gcc-x.x.x.x-source-patches.tar.bz2 newlib, GDB). These can be applied on top of the corresponding upstream
release of the component to build the toolchain from source.
msp430-gcc-support-files-x.xxx.zip Header files and linker scripts.

4.1.1 MSP430 GCC Stand-Alone Package Folder Structure


The placeholder INSTALL_DIR refers to the directory where you installed the GCC MSP430 package.
• INSTALL_DIR
– bin
• MSP430 GCC Compiler binary
• GDB binary
• binutils
• Tcl
• GDB Agent
• MSP430 Debug Stack
– common
– docs
– emulation
• Windows USB-FET Drivers
– examples
– include
• MSP430 Support Files

SLAU646E – September 2015 – Revised June 2019 MSP430 GCC 31


Submit Documentation Feedback
Copyright © 2015–2019, Texas Instruments Incorporated
MSP430 GCC Stand-Alone Package www.ti.com

– lib
– libexec
– msp430-elf
• lib
• libatomic
• libgcc
• libssp
• libstdC++-v3
• libbacktrace
• libgcc-math
• libgloss
• libiberty
• libsanitizer
• newlib
– msp430.dat
– GCC_xx_manifest.pdf

4.2 Package Content


MSP430 GCC contains binary and sources software development tools for all TI MSP430 devices. The
toolchain contains: compiler, assembler, linker, debugger, libraries, and other utilities.
These software development tools include:
• Compiler: MSP430 GCC (msp430-elf-gcc) is configured to compile C or C++.
• binutils: assembler, archiver, linker, librarian, and other programs.
• Newlib is the standard C library.
• Debugging: gdb_agent_console.exe and gdb_agent_gui.exe
• Source code: Compiler source code is available at http://www.ti.com/tool/msp430-gcc-opensource.

32 MSP430 GCC SLAU646E – September 2015 – Revised June 2019


Submit Documentation Feedback
Copyright © 2015–2019, Texas Instruments Incorporated
www.ti.com MSP430 GCC Stand-Alone Package

4.3 MSP430 GCC Options


The GNU compiler, assembler, and linker in the MSP430-GCC toolchain support the target-specific
options listed in Table 21, Table 22, and Table 23, in addition to the standard options. For the full list of
options for the GNU compiler, refer to the GCC online documentation. For the full list of options for the
GNU assembler (gas) and linker (ld), refer to the GNU binutils online documentation. The manifest
distributed with the toolchain specifies the version numbers of each of the components.

Table 21. MSP430 GCC Command Options


Option Description
This option forces assembly output to always use hex constants. Normally such
-masm-hex constants are signed decimals, but this option is available for test suite or aesthetic
purposes.
These options change the behavior of the compiler and linker. The names of function
and data sections are modified so that they will be placed in a specific way across the
upper and lower memory regions, according to the rules in the linker script. These
options have no effect unless -mlarge is also passed. Possible values are:
• upper
– The compiler adds the “.upper” prefix to section names.
– The linker adds the “.upper” prefix to all section names that do not already
have a prefix.
• either
– The compiler adds the “.either” prefix to section names.
– The linker adds the “.either” prefix to all section names that do not already
have a prefix.
– The linker places “.either” sections in the lower memory region. If the lower
memory region overflows, the linker shuffles sections between the upper and
-mcode-region= lower memory regions to try to get the program to fit.
-mdata-region= • lower
– Neither the compiler nor the linker adds the “.lower” prefix unless the
-muse-lower-region-prefix option is also passed.
– For -mdata-region=lower, the compiler assumes data is in the lower region of
memory (in the 16-bit address range, below address 0x10000), so MSP430
instructions can be generated to handle data. For other values passed to
-mdata-region, the compiler assumes data could be in the entire 20-bit
address range, so MSP430X instructions must be used to handle data. This
results in increased code size compared to -mdata-region=lower.
– Object files compiled with -mdata-region=lower cannot be linked with object
files compiled with a different -mdata-region value.
• none
– Neither the compiler nor the linker makes any changes to section names.
The default settings for these options are: -mdata-region=lower and -mcode-
region=none.
This option describes the type of hardware multiply supported by the target.
Accepted values:
• 'none' for no hardware multiply
• '16bit' for the original 16-bit-only multiply supported by early MCUs
• '32bit' for the 16/32-bit multiply supported by later MCUs
• 'f5series' for the 16/32-bit multiply supported by F5-series MCUs.
• 'auto' can also be given. This tells GCC to deduce the hardware multiply support
-mhwmult= based upon the MCU name provided by the '-mmcu' option.
If no -mmcu option is specified, then '32bit' hardware multiply support is assumed. 'auto'
is the default setting.
Hardware multiplies are normally performed by calling a library routine. This saves
space in the generated code. When compiling at -O3 or higher, however, the hardware
multiplier is invoked inline. This makes for larger but faster code.
The hardware multiply routines disable interrupts while running and restore the previous
interrupt state when they finish. This makes them safe to use inside interrupt handlers as
well as in normal code.
-mdisable-device-warnings Disable warnings emitted when the devices.csv file cannot be found by the compiler.

SLAU646E – September 2015 – Revised June 2019 MSP430 GCC 33


Submit Documentation Feedback
Copyright © 2015–2019, Texas Instruments Incorporated
MSP430 GCC Stand-Alone Package www.ti.com

Table 21. MSP430 GCC Command Options (continued)


Option Description
This option is deprecated. The toolchain now dynamically decides which start up and
-minrt
initialization/termination functions are required.
-mlarge Use large-model addressing (20-bit pointers, 20-bit size_t).
This option selects the MCU to target.
This is used to create a C preprocessor symbol based upon the MCU name, converted
to upper case and prefixed and postfixed with '__'. This in turn is used by the 'msp430.h'
header file to select an MCU-specific supplementary header file.
The option also sets the ISA to use. If the MCU name is one that is known to only
support the 430 ISA then that is selected, otherwise the 430X ISA is selected. A generic
-mmcu= MCU name of 'msp430' can also be used to select the 430 ISA. Similarly, the generic
'msp430x' MCU name selects the 430X ISA.
In addition, an MCU-specific linker script is added to the linker command line. The
script's name is the name of the MCU with '.ld' appended. Thus specifying '-mmcu=xxx'
on the gcc command line defines the C preprocessor symbol __XXX__ and cause the
linker to search for a script called 'xxx.ld'. This option is also passed on to the
assembler.
This option is passed to the assembler and linker. It allows the linker to perform certain
-mrelax
optimizations that cannot be performed until the final link.
This option implements fixes for named silicon errata. Multiple silicon errata can be
specified by multiple uses of the -msilicon-errata option or by including the errata names,
separated by commas, on an individual -msilicon-errata option. Errata names currently
recognized by the assembler are:
cpu4 = PUSH #4 and PUSH #8 need longer encodings on the MSP430. This errata is
enabled by default; it cannot be disabled.
-msilicon-errata=NAME[,NAME...]
cpu8 = Do not set the SP to an odd value.
cpu11 = Do not update the SR and the PC in the same instruction.
cpu12 = Do not use the PC in a CMP or BIT instruction.
cpu13 = Do not use an arithmetic instruction to modify the SR.
cpu19 = Insert NOP after CPUOFF.
This option links to the simulator runtime libraries and linker script. Overrides any scripts
-msim
that would be selected by the '-mmcu=' option.
-msmall Use small-model addressing (16-bit pointers, 16-bit size_t).
This option is similar to the -msilicon-errata option, except that instead of fixing the
specified errata, a warning message is issued instead. This option can either be used
-msilicon-errata-warn=NAME[,NAME...]
with -msilicon-errata to generate messages whenever a problem is fixed, or used on its
own to inspect code for potential problems.
This option links a reduced-size implementation of the printf() and puts() library
functions. This reduced size implementation is not reentrant, so should be used with
care in multi-threaded applications. Buffering of the string to be output has been
-mtiny-printf
removed from printf() and puts(), so user implementations of the system write() function
must also implement buffering. The library implementation of write() that is included with
MSP430-GCC does buffer the output string.
This option adds the ".lower" prefix to function or data section names when
-muse-lower-region-prefix
-mdata-region=lower or -mcode-region=lower is passed.
This option enables or disables warnings about conflicts between the MCU name
-mwarn-mcu specified by the -mmcu option and the ISA set by the -mcpu option or the hardware
-mno-warn-mcu multiply support set by the -mhwmult option. It also toggles warnings about
unrecognized MCU names. This option is on by default.

34 MSP430 GCC SLAU646E – September 2015 – Revised June 2019


Submit Documentation Feedback
Copyright © 2015–2019, Texas Instruments Incorporated
www.ti.com MSP430 GCC Stand-Alone Package

Most assembler and linker options specific to MSP430 are passed automatically by the GCC wrapper,
depending on the options passed to GCC itself. Table 22 and Table 23 list options that control behavior
specific to the assembler and linker.
When passing an option to the assembler via the GCC wrapper (msp430-elf-gcc), the option must be
prefixed with “-Wa,”. For example, to pass -mU to the assembler, you would pass -Wa,-mU to msp430-elf-
gcc.
The assembler emits warnings when instructions to enable or disable interrupts are used without
surrounding NOP instructions. See Section 7.5 for details. This behavior can be modified using the options
in Table 22.

Table 22. MSP430 GCC Assembler Options


Option Description
-mN Do not insert NOPs around interrupt enable/disable instructions (default).
-mn Insert NOPs around interrupt enable/disable instructions.
-mY Do not warn about missing NOPs around interrupt enable/disable instructions.
-mY Warn about missing NOPs around interrupt enable/disable instructions (default).
Do not warn or insert NOP instructions around an instruction that may change the
-mU
interrupt enable state if it is not known how the state will change.
Warn or insert NOP instructions (default) around an instruction that may change the
-mu interrupt enable state if it is not known how the state will change. Whether a warning is
emitted or a NOP is inserted is dependent on which of the -m{N,n,Y,y} options are set.

When passing options to the linker via the GCC wrapper (msp430-elf-gcc), the option must be prefixed
with “-Wl,”. For example, to pass --disable-sec-transformation to the linker, you would pass
-Wl,--disable-sec-transformation to msp430-elf-gcc.

Table 23. MSP430 GCC Linker Options


Option Description
Disable the transformation of section names in object files being linked, based on the
-mdata-region and -mcode-region options. For example, passing
--disable-sec-transformation “-mdata-region=either -Wl,--disable-sec-transformation” to msp430-elf-gcc instructs the
compiler to add the “.either” prefix to data section names being compiled, but the linker
will not add the “.either” prefix to any section names in the object files it is passed.

4.4 MSP430 Built-in Functions


GCC provides special built-in functions to aid in the writing of interrupt handlers in C.
__bic_SR_register_on_exit (int mask)
This clears the indicated bits in the saved copy of the status register that currently resides on the
stack. This only works inside interrupt handlers and the changes to the status register only take effect
after the handler returns.
__bis_SR_register_on_exit (int mask)
This sets the indicated bits in the saved copy of the status register that currently resides on the stack.
This only works inside interrupt handlers and the changes to the status register only take effect after
the handler returns.

SLAU646E – September 2015 – Revised June 2019 MSP430 GCC 35


Submit Documentation Feedback
Copyright © 2015–2019, Texas Instruments Incorporated
MSP430 GCC Stand-Alone Package www.ti.com

4.5 MSP430 GCC Interrupts Definition


To define an interrupt using MSP430 GCC, use the following syntax:
void __attribute__ ((interrupt(INTERRUPT_VECTOR))) INTERRUPT_ISR (void)
Example:
void __attribute__ ((interrupt(UNMI_VECTOR))) UNMI_ISR (void)
{ // isr }
You could also use the macro defined in the iomacros.h file:
#define __interrupt_vec(vec)__attribute__((interrupt(vec)))
Example:
void __interrupt_vec(UNMI_VECTOR) UNMI_ISR (void)
{}

4.6 Using MSP430 GCC Support Files


MSP430 GCC uses the devices.csv file that is included with the MSP430 GCC Support Files package to
get the device data for the device specified with the -mmcu option. This causes the source code to be built
for the correct ISA and hardware multiplier with any necessary symbols defined. This ensures the correct
operation of the toolchain. When using the -mmcu option, the toolchain automatically selects the correct
header files and linker scripts for the device specified.
MSP430 GCC uses a few different methods to find the support files (in the following precedence order):
1. Command-line options for compiler include path and linker library path. The compiler looks in the
directories specified by the -I option, and the linker looks in the directories specified by the -L option.
Pass the path to the "include" directory in the MSP430 GCC Support Files package to both of these
options. CCS uses this method by default, so users of the CCS IDE should not have to make any
changes.
2. Directory specified via environment variable. If the command line options described above are not
provided, the toolchain examines the MSP430_GCC_INCLUDE_DIR environment variable. Set this
environment variable to the full path to the "include" directory in the MSP430 GCC Support Files
package. For example, on Linux:
export MSP430_GCC_INCLUDE_DIR=/home/user/ti/gcc/include
3. Default toolchain installation directory. If neither a command line option nor the environment
variable described above is provided, the toolchain checks the msp430-elf/include/devices/
directory within the MSP430 GCC installation for the support files. Note that this "devices" directory
does not exist in the latest toolchain installations, so the "include" directory from the support files
package should be copied to this location. For example, on Linux:
cp -r /home/user/ti/gcc/include/ /home/user/ti/gcc/msp430-elf/include/devices/

NOTE: The toolchain stops searching for support files once it finds devices.csv. The results may
be different than expected if one of the higher-precedence methods finds out-of-date support
files, despite newer support files being pointed to by one of the lower-precedence methods.

36 MSP430 GCC SLAU646E – September 2015 – Revised June 2019


Submit Documentation Feedback
Copyright © 2015–2019, Texas Instruments Incorporated
www.ti.com MSP430 GCC Stand-Alone Package

4.7 Quick Start: Blink the LED


This document assumes that a version of the GNU Make utility is installed on the system and that it is
available on the system path. The placeholder INSTALL_DIR refers to the directory where the GCC
MSP430 package is installed. The directory INSTALL_DIR/bin should be on the system path.

4.7.1 Building with a Makefile


1. In the command terminal, go to the INSTALL_DIR\examples directory.
2. There are examples for Windows, macOS, and Linux. They are located in the corresponding
subdirectories. Choose one of the examples suitable for the operating system and MSP430 target
device.
3. Change to the directory and type make.
4. The binary can now be downloaded and debugged on the target hardware.

4.7.2 Building Manually with gcc


To build one of the examples manually, open a terminal and change to the example for the target device
and operating system. The compiler executable msp430-elf-gcc must be available on your system path.
msp430-elf-gcc -I <Path to MSP430 Support Files> -L <Path to MSP430 Support Files>
-T DEVICE.ld -mmcu=DEVICE -O2 -g blink.c -o blink.o
The placeholder <Path to MSP430 Support Files> is the directory that contains the MSP430 support files
(header files and linker scripts to support the different MSP430 devices).
The placeholder DEVICE tells the compiler and linker to create code for the target device. The command
line argument -T DEVICE.ld is not normally required. When the -mmcu=DEVICE option is passed, the
linker searches for the linker script “DEVICE.ld” in the current directory, and for paths specified with -L.
Example
msp430-elf-gcc -I ../../../include -L ../../../include -mmcu=msp430fr5969 \
-O2 -g blink.c -o blink.o

4.7.3 Debugging

4.7.3.1 Starting GDB Agent


On Microsoft Windows, the GDB Agent is available as either as a small GUI application or on the
command line. On GNU Linux, only the command line version is available.

4.7.3.1.1 Using the GUI


Open the INSTALL_DIR/bin directory and double-click gdb_agent_gui.
1. After the program starts, click the button Configure, select msp430.dat, and click Open.
2. Click on the button Start under the Panel Controls.
3. The "Log" window now contains the status message "Waiting for client".
4. Leave the window open until the end of the debugging process.

4.7.3.1.2 Using the Command Line


Open a command terminal, change to INSTALL_DIR and type:
Linux
./bin/gdb_agent_console msp430.dat
Windows
.\bin\gdb_agent_console msp430.dat

SLAU646E – September 2015 – Revised June 2019 MSP430 GCC 37


Submit Documentation Feedback
Copyright © 2015–2019, Texas Instruments Incorporated
MSP430 GCC Stand-Alone Package www.ti.com

4.7.3.2 Debugging With GDB

4.7.3.2.1 Running a Program in the Debugger


1. In the command terminal, go to the INSTALL_DIR\examples\[Selected example], and type the
command make debug.
2. This command starts GDB and waits for commands. This is indicated by the prompt <gdb>.
3. To connect GDB to the GDB Agent, type the command target remote :55000 and press enter.
4. To load the program binary to the MSP430 target device, type load.
5. Type the command continue (short version: c) to tell GDB to run the loaded program.
6. The LED on the target board blinks.

4.7.3.2.2 Setting a Breakpoint


1. Connect GDB to the GDB Agent as described in Section 4.7.3.2.1 and load a program to the device.
2. To set a breakpoint on a function, type break function name.
3. To set a breakpoint on a source line, type break filename:line.
4. When you run the program, the program execution stops at the entry to the specified function or stops
at the specified line.

4.7.3.2.3 Single Stepping


1. Connect GDB to the GDB Agent as described in Section 4.7.3.2.1 and load a program to the device.
2. After the debugger has stopped the program at a breakpoint, you can step through the code:
• To execute the source line, type next. next does not step into functions, it executes the complete
function and stops on the line following the function call.
• To execute the next source line and step into functions, type step.
• To execute the next instruction, type nexti.
• To execute the next instruction and step into functions, type stepi.

4.7.3.2.4 Stopping or Interrupting a Running Program


1. Connect GDB to the GDB Agent as described in Section 4.7.3.2.1 and load a program to the device.
2. To stop a running program and get back to the GDB command prompt, type Ctrl+C. This currently
applies only on Linux.

38 MSP430 GCC SLAU646E – September 2015 – Revised June 2019


Submit Documentation Feedback
Copyright © 2015–2019, Texas Instruments Incorporated
www.ti.com MSP430 GCC Stand-Alone Package

4.7.4 Creating a New Project


1. Create a directory for your project.
2. Copy one of the example project makefiles into the project directory.
3. Open the copied makefile and set the variable DEVICE to the target device.
4. Set the variable GCC_DIR to point to the directory where the GCC MSP430 package is installed.
5. Include all of the project source files (that is, the *.c files) as a dependency for the first target of the
makefile.
6. Go to the project directory in a terminal and type make to build the project or make debug to start
debugging the project.
OBJECTS=blink.o

GCC_DIR = ../../../bin
SUPPORT_FILE_DIRECTORY = ../../../include

# Please set your device here


DEVICE = msp430X
CC = $(GCC_DIR)/msp430-elf-gcc
GDB = $(GCC_DIR)/msp430-elf-gdb

CFLAGS = -I $(SUPPORT_FILE_DIRECTORY) -mmcu=$(DEVICE) -O2 -g


LFLAGS = -L $(SUPPORT_FILE_DIRECTORY) -T $(DEVICE).ld

all: ${OBJECTS}
$(CC) $(CFLAGS) $(LFLAGS) $? -o $(DEVICE).out

debug: all
$(GDB) $(DEVICE).out

4.8 GDB Settings


The GDB Agent is a tool to connect GDB with the target hardware to debug software. The GDB Agent
uses the MSP430 debug stack to connect to the hardware and provides an interface to GDB. On
Windows, both a console and a GUI application version of the GDB Agent are provided. Only the console
application is supported on Linux.

4.8.1 Console Application


If you use the console application, run it from a command terminal using following syntax:
Linux
INSTALL_DIR/bin/gdb_agent_console INSTALL_DIR/msp430.dat
Windows
INSTALL_DIR\bin\gdb_agent_console INSTALL_DIR\msp430.dat
The console application opens a TCP/IP port on the local machine. It displays the port number in the
console. By default, this port number is 55000.

SLAU646E – September 2015 – Revised June 2019 MSP430 GCC 39


Submit Documentation Feedback
Copyright © 2015–2019, Texas Instruments Incorporated
MSP430 GCC Stand-Alone Package www.ti.com

4.8.2 Optional Parameters for msp430.dat


Add the following lines to msp430.dat to enable or modify the specific debug options.
MSP430 low-power debugging
msp430_lowpowerdebug=true
MSP430 programming and erase options for GDB
The BSL or the protected memory can be unlocked at the start of the session using the
msp430_connectaction keyword.
msp430_connectaction=[unlockbsl] [unlockprotected] [<other connect options>]
If protected memory is unlocked, it is erased on download if the download erase option is set to
erasefactory, erasemain, or erasemainandinfo, or if the download erase option is set to
erasesegment and the download image includes protected memory data.
msp430_loadaction controls whether a reset is done before or after download and also configures
erase options for download.
msp430_loadaction =[resetbefore] [resetafter]
[erasefactory|erasemain|erasemainandinfo|eraseuser|erasesegment] [<other load
options>]
Where:
erasefactory = MSP430_Erase(type = ERASE_TOTAL, ...) called at the start of each download
erasemain = MSP430_Erase(type = ERASE_MAIN, ...) called at the start of each download
erasemainandinfo = MSP430_Erase(type = ERASE_ALL, ...) called at the start of each download
eraseuser = MSP430_Erase(type = ERASE_USER, ...) called at the start of each download
erasesegment = MSP430_Erase(type = ERASE_SEGMENT, ...) called the first time that the
segment is written to during each download
Another optional connect action is to reset or erase on connect:
msp430_connectaction=[reset]
[erasefactory|erasemain|erasemainandinfo|eraseuser]
If this line is not present, the default is to not reset or erase on connect.
If the BSL or protected areas are unlocked, they are erased on connect if the erasefactory or
erasemainandinfo options are set. They are erased on download if the erasefactory,
erasemainandinfo, or erasesegment options are set and the image includes the BSL or protected
segment.
No action is taken on the auto run or launch options as they are outside the scope of the GDB agent.
MSP430 verification options for GDB
msp430_loadaction includes a verify keyword. If this keyword is present, each write to flash is
verified.
msp430_loadaction=[verify]
Add MSP430 breakpoints options for GDB
msp430_default_breakpoint = [software|hardware]
By default, the MSP430 GDB agent uses type=BP_CODE for all code breakpoints (GDB break or
hwbreak commands). If this option is set to software, the GDB agent first attempts to use type
BP_SOFTWARE for all GDB break commands. If the software breakpoint fails, the GDB agent then
attempts to set a type=BP_CODE breakpoint. The agent continues to use type=BP_CODE for all GDB
hwbreak commands.

40 MSP430 GCC SLAU646E – September 2015 – Revised June 2019


Submit Documentation Feedback
Copyright © 2015–2019, Texas Instruments Incorporated
www.ti.com MSP430 GCC Stand-Alone Package

4.8.3 GUI Application


After you start the GUI application, configure the GUI and then start the GDB server. For more
information, refer to the XDS GDB Agent online documentation.
1. Click the Configure button and, in the Select board configuration file window, select the msp430.dat
file. If successfully configured, an MSP430 device is displayed in the <Targets> list. The TCP/IP port
for the GDB server is displayed when the MSP430 device is selected from the list.
2. To start the GDB Agent, click the Start button when the MSP430 device is selected.

4.8.4 Attaching the Debugger


After starting the debugger and to attach to the GDB server, use the target remote [<host ip
address>]:<port> command, where <port> is the TCP/IP port from above. If the GDB Agent runs locally,
omit the host IP address.

4.8.5 Configuring the Target Voltage


To configure the target voltage for the device, open the file msp430.dat in a text editor. To change the
voltage, modify the key msp430_vcc. By default, this value is set to 3.3 V.

4.8.6 Resetting the Target


To reset the target, use the monitor reset command.

4.8.7 Halting the Target


To halt the target, use the monitor halt command.

4.9 Hints for Reducing the Size of MSP430-GCC Programs


There are some additional options you can pass to GCC, which can help to reduce code and data size in
your program.

4.9.1 The -mtiny-printf Option


The -mtiny-printf option enables minimal implementations of the printf() and puts() library functions. These
implementations reduce code size by removing some functionality. See Table 21 for more information.

4.9.2 The -ffunction-sections and -fdata-sections Options


The -ffunction-sections and -fdata-sections options instruct the GCC compiler to create a new output
section for each function and data object. When used with the --gc-sections linker option, these options
ensure that the linker can perform garbage collection of unused function and data objects in your program.
Typically, this reduces overall program size. However, if there is not a significant number of sections the
linker can remove, these options may actually increase the size of your program and reduce performance.
This is because the GCC compiler cannot perform certain optimizations when these options are enabled.
We recommend that you experiment with these options to determine the overall effect they have on your
program size.

SLAU646E – September 2015 – Revised June 2019 MSP430 GCC 41


Submit Documentation Feedback
Copyright © 2015–2019, Texas Instruments Incorporated
MSP430 GCC Stand-Alone Package www.ti.com

4.9.3 Making Large Programs Fit Across Upper and Lower Memory
For MSP430X devices with an “upper” memory region (memory above the 0xFFFF boundary), the large
memory model (-mlarge) is supported.
When a program built using the large memory model is too big to fit in the lower memory region
exclusively, rebuilding the program with -mcode-region=either and -mdata-region=either can help it to fit.
See Table 21 for details on how the "either" options shuffle code and data sections between upper and
lower memory. For best results, use these options with the -ffunction-sections and -fdata-sections options,
so that the sections available to be shuffled are smaller.
When using -mlarge with -mcode-region=either and -mdata-region=either, the compiler must generate
MSP430X instructions when handling data. This increases code size and reduces performance, so these
options should only be used if necessary—that is, if the program would not otherwise fit on the device.

4.9.4 NOP Instructions Surrounding Interrupt State Changes


To prevent the possibility of incorrect behavior when two adjacent instructions both change the global
interrupt enable state (see Section 7.5), the C macros for modifying the interrupt state contain NOP
instructions. The following macros are affected and are defined in in430.h, which is part of the msp430-
gcc-support-files package:
• _set_interrupt_state
• _enable_interrupts
• _disable_interrupts
• _bis_SR_register
• _bic_SR_register
Macros that modify the status register (SR) might be used for purposes other than changing the interrupt
state, so the NOP instructions in these macros might not be needed in all cases. If you are concerned
about the code size of your project, you can examine places your source code uses the _bic_SR_register
and _bis_SR_register macros. If the NOPs inserted by the macros are not needed in certain places, you
can define your own macros that omit the NOPs and use them where appropriate.

42 MSP430 GCC SLAU646E – September 2015 – Revised June 2019


Submit Documentation Feedback
Copyright © 2015–2019, Texas Instruments Incorporated
www.ti.com Building MSP430 GCC From Sources

5 Building MSP430 GCC From Sources

5.1 Required Tools


This document assumes that the required tools are installed on the system and that they are available on
the system path.
• GNU make
• GCC and binutils
• bzip2 and tar
• curl, flex, bison, and texinfo

5.2 Building MSP430 GCC (Mitto Systems Limited)


The README-build.sh bash script included with the source-full package (and in the source-patches
package) can be used to build the toolchain for Windows, Linux and macOS hosts. The script contains
some distribution-specific instructions on how to install the pre-requisite tools from Section 5.1.
To build native Linux and macOS toolchains, follow the instructions in Section 5.2.1.
To build the toolchain for Windows hosts, follow both the instructions in Section 5.2.1 and then
Section 5.2.2.

NOTE: If less than 2 GB of RAM is available during the build, the build may fail.

5.2.1 Building a Native MSP430 GCC Toolchain


Follow these steps to build Mitto MSP430 GCC for Linux and macOS:
1. Download the source-full tar archive (for example, msp430-gcc-7.3.0.9-source-full.tar.bz2) from the
MSP430 GCC page.
2. Untar the file.
3. Change to the source-full directory.
4. Run README-build.sh to build the toolchain.
5. Build files are in the ./build folder.
6. Binaries/libs are in the ./install folder.

NOTE: An alternative to this process is to use the "source-patches" tar archive (for example,
msp430-gcc-7.3.0.9-source-patches.tar.bz2) to apply patches to source tars as
released by the upstream community.
Versions 7.3.0.9 and later include a script (README-apply-patches.sh), which downloads
the upstream releases and applies the patches so the sources are ready for building. The
README-build.sh script can then be used to build a native toolchain.

SLAU646E – September 2015 – Revised June 2019 MSP430 GCC 43


Submit Documentation Feedback
Copyright © 2015–2019, Texas Instruments Incorporated
Building MSP430 GCC From Sources www.ti.com

5.2.2 Building the MSP430 GCC Toolchain for Windows


Follow these instructions to build the toolchain for Windows hosts:
1. Begin by following the instructions in Section 5.2.1 to build a native toolchain.
2. Move the installation directory to a permanent location. (This is because the README-build.sh script
deletes the "build" and "install" directories before starting the toolchain build.)
3. Install a cross-compiler for Windows:
• On Ubuntu install the "mingw-w64" package as follows:
> apt-get install mingw-w64
• On Centos 7, first install the "Extra Packages for Enterprise Linux" (EPEL) repository, then install
the mingw toolchain as follows:
> yum install epel-release
> yum install mingw64-gcc.x86_64 mingw64-gcc-c++.x86_64
4. Add the desired host platform to "configure_args_common" in README-build.sh. For 64-bit Windows
this is usually "x86_64-w64-mingw32" and for 32-bit Windows it is "i686-w64-mingw32". For example:
> configure_args_common='--target=msp430-elf --enable-languages=c,c++ --disable-nls
--host=x86_64-w64-mingw32'

NOTE: You can confirm that a cross-compiler is available for the target host by running
${HOST}-gcc --version. For example:
> x86_64-w64-mingw32-gcc --version

5. Make sure the native toolchain installed earlier is on the PATH.


6. Run README-build.sh.

5.3 Building MSP430 GCC Stand-Alone Full Package


• MSP430 GCC Compiler
1. Download the MSP430 GCC Installer Compiler only from http://www.ti.com/tool/msp430-gcc-
opensource.
2. Use the generated MSP430 GCC version (see Section 5.2).
• USB driver package (Windows only)
1. Download "Stand-alone Driver Installer for USB Low-Level Drivers" from
http://www.ti.com/tool/mspds.
• MSPDS OS package
1. Download "MSP Debug Stack Open Source Package" from http://www.ti.com/tool/mspds.
• Build MSPDebugStack
1. Extract "MSP Debug Stack Open Source Package".
2. Follow the instructions in "README-build.sh".
• GDB agent
1. Download the GDB Agent from
http://processors.wiki.ti.com/index.php/XDS_Emulation_Software_Package.
• MSP430 support files for GCC
1. Download "msp430-gcc-support-files.zip" from http://software-
dl.ti.com/msp430/msp430_public_sw/mcu/msp430/MSPGCC/latest/index_FDS.html.

44 MSP430 GCC SLAU646E – September 2015 – Revised June 2019


Submit Documentation Feedback
Copyright © 2015–2019, Texas Instruments Incorporated
www.ti.com MSP430 GCC and MSPGCC

6 MSP430 GCC and MSPGCC


The new GCC compiler for MSP low-power microcontrollers conforms to the MSP Embedded Application
Binary Interface (EABI) (see MSP430 Embedded Application Binary Interface). This allows GCC to
interoperate with the proprietary TI compiler.
For example, assembly functions can be written in the same way, and libraries that are built with one
compiler can be used as part of executables built with the other compiler. Aligning with the MSP EABI
required breaking compatibility with the prior MSPGCC compiler. This document gives a brief overview of
the ABI changes that are most likely to be noticed by and to affect a developer who is moving from
MSPGCC to the newer GCC compiler for MSP.

6.1 Calling Convention


For developers writing assembly code, the most noticeable part of an ABI is the calling convention. Full
specification of the calling convention is very detailed (see MSP430 Embedded Application Binary
Interface), but developers writing assembly do not typically use most of it. There are three basic
differences between MSPGCC and the GCC compiler for MSP in the calling convention that are important
to be aware of:
• In MSPGCC, registers are passed starting with R15 and descending to R12. For example, if two
integers are passed, the first is passed in R15 and the second is passed in R14. In contrast, the
MSP430 EABI specifies that arguments are passed beginning with R12 and moving up to R15. So, in
the same situation, registers R12 and R13 would hold the two arguments. In both cases, after the
registers R12 through R15 are used, continued arguments are passed on the stack. If you are using
stack-based arguments, you should consult the EABI specification.
• MSPGCC and the GCC compiler for MSP use different registers for the return value. MSPGCC places
the return value in R15 (or R15 and consecutive lower registers if the value is larger than a word),
while the EABI specifies that the return value is placed in R12.
• In MSPGCC, register R11 is considered a save on entry register and needs to be saved and restored
by the callee if it is used in the called function. Conversely, the MSP EABI specifies that R11 is a save
on call register, so it needs to be saved and restored by the calling function if its value will be needed
after a function call. For comparison purposes, R4 to R10 are save on entry registers for both
compilers, and R12 to R15 are save on call.
These are the key differences to be aware of when moving between the compilers. If you are writing
assembly code that passes parameters on the stack or that passes structures by value, you should
consult the MSP EABI document for additional information.

6.2 Other Portions of the ABI


Many other pieces make up the EABI, such as the object file format; debug information, and relocation
information that is used when linking together files. However, in general, these pieces do not affect
migration.
One other area to be aware of is that the details of data layout differ between ABIs. If you are relying on
advanced data layout details such as layout of structures and bitfields, see MSP430 Embedded
Application Binary Interface.

SLAU646E – September 2015 – Revised June 2019 MSP430 GCC 45


Submit Documentation Feedback
Copyright © 2015–2019, Texas Instruments Incorporated
Appendix www.ti.com

7 Appendix

7.1 GCC Intrinsic Support


The GCC Compiler supports the same intrinsics that the TI CGT for MSP430 does. These are:
• unsigned short __bcd_add_short(unsigned short op1, unsigned short op2);
• unsigned long __bcd_add_long(unsigned long op1, unsigned long op2);
• unsigned short __bic_SR_register(unsigned short mask); BIC mask, SR
• unsigned short __bic_SR_register_on_exit(unsigned short mask);
• unsigned short __bis_SR_register(unsigned short mask);
• unsigned short __bis_SR_register_on_exit(unsigned short mask);
• unsigned long __data16_read_addr(unsigned short addr);
• void __data16_write_addr (unsigned short addr, unsigned long src);
• unsigned char __data20_read_char(unsigned long addr);
• unsigned long __data20_read_long(unsigned long addr);
• unsigned short __data20_read_short(unsigned long addr);
• void __data20_write_char(unsigned long addr, unsigned char src);
• void __data20_write_long(unsigned long addr, unsigned long src);
• void __data20_write_short(unsigned long addr, unsigned short src);
• void __delay_cycles(unsigned long);
• void __disable_interrupt(void); AND __disable_interrupts(void);
• void __enable_interrupt(void); AND __enable_interrupts(void);
• unsigned short __get_interrupt_state(void);
• unsigned short __get_SP_register(void);
• unsigned short __get_SR_register(void);
• unsigned short __get_SR_register_on_exit(void);
• void __low_power_mode_0(void);
• void __low_power_mode_1(void);
• void __low_power_mode_2(void);
• void __low_power_mode_3(void);
• void __low_power_mode_4(void);
• void __low_power_mode_off_on_exit(void);
• void __no_operation(void);
• void __set_interrupt_state(unsigned short src);
• void __set_SP_register(unsigned short src);
• unsigned short __swap_bytes(unsigned short src);

46 MSP430 GCC SLAU646E – September 2015 – Revised June 2019


Submit Documentation Feedback
Copyright © 2015–2019, Texas Instruments Incorporated
www.ti.com Appendix

7.2 GCC Function Attribute Support


• 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.
• 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.
• naked
Do not generate a prologue or epilogue for the function.
• critical
Disable interrupts on entry, and restore the previous interrupt state on exit.
• reentrant
Disable interrupts on entry, and always enable them on exit.

7.3 GCC Data Attribute Support


• noinit
Variables with the noinit attribute will not be initialized by the C runtime startup code or the program
loader. Not initializing data in this way can reduce program startup times. A compiler warning will be
provided if a variable marked with the noinit attribute is initialized to a constant value.
• persistent
Variables with the persistent attribute will not be initialized by the C runtime startup code. Instead their
value will be set once, when the application is loaded, and then never initialized again, even if the
processor is reset or the program restarts. Persistent data is intended to be placed into Flash RAM,
where its value will be retained across resets. The linker script used to create the application should
ensure that persistent data is correctly placed. A compiler warning will be provided if a variable marked
with persistent is not initialized to a constant value.

7.4 GCC Section Attribute Support


The following attributes can be applied to functions or data to add a prefix to their default section name.
This may change whether the linker places them in high or low memory.
• lower
Adds the “.lower” prefix to the default section name.
• upper
Adds the “.upper” prefix to the default section name.
• either
Adds the “.either” prefix to the default section name.
See Table 21 for details about how the linker handles sections with these prefixes.

SLAU646E – September 2015 – Revised June 2019 MSP430 GCC 47


Submit Documentation Feedback
Copyright © 2015–2019, Texas Instruments Incorporated
Appendix www.ti.com

7.5 NOP Instructions Required Between Interrupt State Changes


Incorrect execution of the MSP430 CPU can result from consecutive interrupt state changes (for example,
EINT followed by DINT). The assembler detects such instruction patterns in code being assembled and
emits warnings that NOP instructions might be required.
Since it is not always known what instruction will actually be executed after an EINT or DINT, the
assembler warns if there is a NOP missing before/after every EINT or DINT, as appropriate for the device.
The assembler also warns about instructions that modify the status register in a way that is unknown at
assembly time, as these instructions might change the interrupt state.
Whether NOP instructions are required between interrupt state changes depends on the ISA the code is
being assembled for. The assembler uses the following rules when deciding whether to warn about
missing NOP instructions:
• Both the MSP430 and MSP430X ISA require a NOP after DINT.
• Only the MSP430X ISA requires a NOP before EINT.
• Only the MSP430X ISA requires a NOP after EINT.
See the user guide for your device family for more details.

8 References
1. Using the GNU Compiler Collection, Richard M. Stallman (http://gcc.gnu.org/onlinedocs/gcc.pdf). Refer
to the MSP430 Options section.
2. GDB: The GNU Project Debugger, Free Software Foundation, Inc.
(https://sourceware.org/gdb/current/onlinedocs/)

48 MSP430 GCC SLAU646E – September 2015 – Revised June 2019


Submit Documentation Feedback
Copyright © 2015–2019, Texas Instruments Incorporated
www.ti.com Revision History

Revision History
NOTE: Page numbers for previous revisions may differ from page numbers in the current version.

Changes from March 30, 2019 to June 30, 2019 ............................................................................................................. Page

• CCS v9.1 is the current version ......................................................................................................... 4


• Some of the filenames for the stand-alone packages have changed. ............................................................ 31
• Mentions of "GBD" have been corrected to say GDB. .............................................................................. 31
• The -mtiny-printf and -muse-lower-region-prefix options, along with options specific to the linker and assembler, have
been added. Functionality added includes ways to reduce program size. The -mcpu, -minrt, and -mdevices-csv-loc options
are deprecated. .......................................................................................................................... 33
• The size_t type is now correctly stated as 20 bits. ................................................................................. 34
• The -T DEVICE.ld command line argument is not normally required. ............................................................ 37
• Information is provided about ways to reduce the size of MSP430-GCC programs. ........................................... 41
• Information is provided about NOP instructions used between interrupt state changes. ...................................... 48

SLAU646E – September 2015 – Revised June 2019 Revision History 49


Submit Documentation Feedback
Copyright © 2015–2019, Texas Instruments Incorporated
IMPORTANT NOTICE AND DISCLAIMER

TI PROVIDES TECHNICAL AND RELIABILITY DATA (INCLUDING DATASHEETS), DESIGN RESOURCES (INCLUDING REFERENCE
DESIGNS), APPLICATION OR OTHER DESIGN ADVICE, WEB TOOLS, SAFETY INFORMATION, AND OTHER RESOURCES “AS IS”
AND WITH ALL FAULTS, AND DISCLAIMS ALL WARRANTIES, EXPRESS AND IMPLIED, INCLUDING WITHOUT LIMITATION ANY
IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT OF THIRD
PARTY INTELLECTUAL PROPERTY RIGHTS.
These resources are intended for skilled developers designing with TI products. You are solely responsible for (1) selecting the appropriate
TI products for your application, (2) designing, validating and testing your application, and (3) ensuring your application meets applicable
standards, and any other safety, security, or other requirements. These resources are subject to change without notice. TI grants you
permission to use these resources only for development of an application that uses the TI products described in the resource. Other
reproduction and display of these resources is prohibited. No license is granted to any other TI intellectual property right or to any third
party intellectual property right. TI disclaims responsibility for, and you will fully indemnify TI and its representatives against, any claims,
damages, costs, losses, and liabilities arising out of your use of these resources.
TI’s products are provided subject to TI’s Terms of Sale (www.ti.com/legal/termsofsale.html) or other applicable terms available either on
ti.com or provided in conjunction with such TI products. TI’s provision of these resources does not expand or otherwise alter TI’s applicable
warranties or warranty disclaimers for TI products.

Mailing Address: Texas Instruments, Post Office Box 655303, Dallas, Texas 75265
Copyright © 2019, Texas Instruments Incorporated

You might also like