This document provides notes on using arm-none-eabi-gcc, the CodeSourcery version of the GNU GCC compilers used for the Maple boards. It is not intended as a reference manual for GCC; such manuals are available elsewhere.
Obtaining arm-none-eabi-gcc¶Recent versions of arm-none-eabi-gcc and associated tools are included with the Maple IDE.
Users who wish to use arm-none-eabi-gcc directly, along with a standard Unix Make-based toolchain, should read the Unix Toolchain Quickstart, which describes how to set up such an environment.
LeafLabs maintains mirrors for some of the more recent versions of the compiler, including versions for OS X, Win32, and 32-bit Linux.
Compiler Flags Used by libmaple¶This section documents the flags passed to arm-none-eabi-gcc by the Maple IDE and the default Makefile provided with the Unix toolchain. The information in this section is subject to change between libmaple releases.
The following flags are among those passed to the C compiler:
-Os -g -mcpu=cortex-m3 -mthumb -march=armv7-m -nostdlib -ffunction-sections -fdata-sections -Wl,--gc-sections
In addition to those flags just given for the C compiler, the following flags are among those passed to the C++ compiler:
-fno-rtti -fno-exceptions -Wall
The following flags are among those passed to the assembler:
-mcpu=cortex-m3 -march=armv7-m -mthumbSwitching from AVR-GCC¶
This section, which is expected to grow over time, describes techniques for porting code which uses AVR-GCC features (AVR-GCC is the compiler used by many Atmel AVR-based microcontroller boards, including Arduino) for use on the Maple.
Replacing PROGMEM: If you need to store a lot of constant data, you can store variables in Flash (instead of RAM) by using the libmaple macro __FLASH__. Here’s an example:
uint32 array[] __FLASH__ = {0, 1, 2};
This will help you save RAM when you need to store large amounts of data, like look-up tables.
You can only store values which are compile-time constants (like numbers and strings, and arrays of numbers and strings) in this way. Also, if you try to change a variable stored in Flash, your program will crash.
If you need to port over AVR/Arduino code that uses pgmspace.h, these declarations may help you:
typedef const unsigned char prog_uchar; #define pgm_read_byte_near(x) (*(prog_uchar*)x) #define pgm_read_byte(x) (*(prog_uchar*)x)
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4