1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
|
.. _arm-gcc:
GCC and libc
============
This document provides notes on using ``arm-none-eabi-gcc``, the
`CodeSourcery <http://www.codesourcery.com/>`_ version of the GNU `GCC
<http://gcc.gnu.org/>`_ compilers used for the Maple boards. It is
not intended as a reference manual for GCC; such manuals are available
`elsewhere <http://gcc.gnu.org/>`_.
.. contents:: Contents
:local:
Obtaining ``arm-none-eabi-gcc``
-------------------------------
Users who wish to use ``arm-none-eabi-gcc`` directly, along with a
standard Unix Make-based toolchain, should read the
:ref:`unix-toolchain`, which describes how to set up such an
environment.
LeafLabs maintains `mirrors
<http://static.leaflabs.com/pub/codesourcery/>`_ for some of the more
recent versions of the compiler, including versions for OS X, Win32,
and 32-bit Linux.
.. _arm-gcc-compiler-flags:
Compiler Flags Used by libmaple
-------------------------------
This section documents the flags passed to ``arm-none-eabi-gcc`` by
the default Makefile provided with the :ref:`Unix toolchain <unix-toolchain>`.
The information in this section is subject to change between :ref:`libmaple
<libmaple>` releases.
.. highlight:: sh
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 -mthumb
.. highlight:: cpp
.. _arm-gcc-libc:
Using the C Standard Library
----------------------------
By default, ``arm-none-eabi-gcc`` is configured to
link against `newlib <http://sourceware.org/newlib/>`_, a C standard
library intended for use with embedded applications. You are free to
include of any of its headers.
Be advised, however, that a variety of syscalls may only be partially
implemented, if at all. See the :ref:`libmaple` file syscalls.c and
the newlib documentation for more details.
.. _arm-gcc-avr-gcc:
Switching 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.
.. _arm-gcc-attribute-flash:
- 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)
|