WinARM is collection of tools to develop applications for ARM-controllers in C and C++
on MS-Windows platforms ("hosts"). It includes the GNU GCC compiler for C and C++.
Unpack the archive to C:\ (i.e. C:\WinARM\bin should exist) and extend the system search-path (environment-variable PATH) by
C:\WinARM\bin;C:\WinARM\utils\bin; Other locations/drives have not been tested but should work too.
- GNU-C/C++-Compiler (cross compiler/linker/assembler arm-elf-*) Version 4.1.0 incl. stdlib3. Compiled from the FSF-Sources
The configuration supports ARM-Mode, Thumb-Mode and Mixed(ARM/Thumb)-Mode, little/big-endian and floating point-emulation
- GNU-Binutils Version Version 2.16 (CVS snapshot 30.Mar.2006) FSF-Sources
- newlib Version 1.14.0 (build for reentrant syscalls)
- newlib-lpc Rel.5 (reentrant syscalls for newlib and Philips LPCs)
- GNU-Utils do support the compiler/linker (make, sh etc. from the mingw-project)
- ARM header-files (register-defintions) from gnuarm.org and others
- Example applications with full source-code, makefiles, linker-scripts and startup-code for Philips LPC2000, ADuC7k and Atmel AT91SAM7 ARM7TDMI controllers.
More Examples on my ARM-Projects pages.
- Programmers Notepad Editor Version 18.104.22.168
- The lpc21isp in-system-programming-software for
Philips LPC2xxx and the Analog Devices ADUC 70xx family by Martin Maurer. Included Versions: 1.31 and 1.37(BETA)
- Bray Terminal by Vlado Brajer
- Insight-GDB 6.4.50 - Win32-Native (devkitpro.org)
- GDB (command-line without Insight) Version 22.214.171.12451020-cvs from Codesourcery
- Setup-Exe of Macraigor's OCDRemote (Wigger-gdb interface, Ver. 2.16)
- Open On-Chip debugger (openocd, SVN55) made by Dominic Rath
- H-JTAG (Ver. 20060313) made by "twentyone"
- J-Link gdb-Server V1.0 from the gnuarm yahoo-group
- Programmers Notepad can be used as Editor. Some items in the tools-menue have been added for WinARM. First steps: start Programmer-Notepad (pn/pn.exe) and load a
project file from the examples. Select Tools/make all. (You may have to open one file from the project in the editor first.)
- Some documentation is included - see the doc/ subdirectory
- The makefiles, startup-codes and linker-scripts supplied with the examples can be used as templates for own projects. The makefiles have been made
for a GNU-make as included in utils/bin they will not work with Microsoft's nmake or make.exe from Borland/Inprise
- For JTAG-debugging e.g. with a "Wiggler"-type hardware interfaces three tools are included:
- ocdremote(hwsupport) from subdirectory utils/macraigor: Install hwsupport, start ocdremote.exe and start insight (utils/insight/).
More information on the FreeRTOS and Macraigor Web-Pages.
- Dominic Rath's openocd (util/openocd) can also be used as a gdb-Server and seems to work better than the Maccraigor-Tool. openocd has a lot of additional
functions (i.e. flash programming via JTAG, FTDI-JTAG-Interface). Please visit the openocd web-page for more information.
To use openocd with parallel-port interfaces (i.e. Wiggler(-clones)) on Windows NT/2k/XP an low-level-driver has to be installed.
For openocd 20060213/"WinARM" this is giveio.sys which gets installed by calling install_giveio.bat. For openocd SVN 53 this is
ioperm.sys which gets installed by calling ioperm.exe -i.
- H-JTAG from twentyone (util/h_jtag) offers an RDI interface to Wiggler-type hardware. The RDI interface is also supported by some
commercial IDEs (e.g. ARM, Keil, IAR)
- The Bray-Terminal (utils/bin/terminal.exe) can be used for I/O via RS232.
- The programming-software lpc21isp (bin/lpc21isp*) only supports Philips LPC2xxx and and Analog Devices ADUC70xx controllers which can programmed via
a serial connection ("RS232") thru preinstalled bootloaders. If you have other ARM controllers you may have to use extra
hardware which can program flash via a JTAG-Interface. For example J-LINK (Segger, commercial Flash software available), ULINK (Keil, only works with uVision)
or openocd witch supports flash-programming for the internal memory on LPC2000 and AT91SAM7S and external CFI-compatible flash-memories.
- To use functions from stdio (printf et al) in own projects interface-functions for the newlib have to be provided (System Calls/"syscalls", i.e. sbrk,
see chapter 11 in doc/libc.pdf). For LPC2000 you can link with the newlib-lpc (libnewlib-lpc.a, in arm-elf/lib/).
See the examples lpc2129_newlib_cpp and lpc2106_newlib-lpc3_test2 which demonstrate how the newlib-lpc can be used.
The source-code for newlib-lpc is included in utils/newlib_lpc.
The examples lpc2129_adc_stdio and at91sam7s64_Hello show how the system-calls can be implemented without an additional library
- Some header-files (register-definitions) for different targets are included arm-elf/include/arch.
- Verify that a gnu-make is used. The output of make --version should start with GNU Make. If you have other files with the name make.exe (i.e. from
Borland/Inprise) in the search-path they should be renamed.
- See the directory doc/ for documentation in pdf and html-format.
- Check out Dev-C++ which offers much more freatures than Programmers Notepad and can be configured to
work with WinARM. Other editors/IDEs: Code::Blocks, Eclipse with CDT
- The makefile in the at91sam7_Hello-Example is the one I use as template for own projects.
- If WinAVR is installed on your system there is not need to add the WinARM/utils/-directory to the path. WinAVR provides the needed tools
in it's WinAVR/utils/bin/-directory. The path for WinAVR and WinARM on the same system should be something like: c:/WinARM/bin;c/WinAVR/bin;c:/WinAVR/utils/bin
- libnewlib-lpc.a is located in WinARM/arm-elf/lib
- Man and info-pages are included in utils/man_info.zip just because they have been created during the build-processes.
WinARM does not include any software to read these files.
Feedback and Bug-Reports
Please use the forum at en.mikrocontroller.net for bug-reports and feedback or send me an e-mail.
Include the following information:
- Output of: arm-elf-gcc --version, arm-elf-objcopy --version, make --version, sh --version
- Exact copy of the error-message if any
- Minimal example-code to reproduce the problem (including startup-code, makefile and linker-script)
- Target controller
I hope WinARM is useful for you.
Martin Thomas (firstname.lastname@example.org)
Version 20060125 -> Version 20060331
- arm-elf-gcc 4.0.2 -> 4.1.0
- binutils CVS 30. Mar. 2006
- lpc21isp 1.37 ("lpc21isp_beta", prints 1.36 but source archive has been *137.zip)
- Macraigor OCDRemote 2.15 -> 2.16
- JLINK gdb-server 1.00
- ADuC7026 example. Not tested with the hardware since I do not own a working ADuc7k-board
- H-JTAG 2.1 beta 20060313
- openocd SVN55 - now uses "default" ioperm.sys instead of giveio.sys (old giveio-version still avail.), all needed DLLs included
- man- and info-pages packed to into utils/man_info.zip
- Codesourcery's arm-elf-gdb -> 126.96.36.19951020-cvs (Q3-2005 release)
- FreeRTOS -> 4.0.0
Version 20060117 -> Version 20060125
- utils/bin now includes make, sh and other tools from the mingw-Project
(based on the preselection done by the WinAVR-maintainers).
I have had to many support-request because of the "error 2, file not found"
problem with the old utilities which did not work for all users.
Drawback of the mingw-tools is that the mingw-dll is now in the seach-path
which has a potential for side-effects.
- openocd is now part of the distribution. The WinARM version has
been modified to use giveio.sys which allows the program to run
with normal (non-administrator) user-rights.
- H-JTAG is now included
Version 20060116 -> Version 20060117
- fixed missing files and wrong subtree for insight-gdb.
I have made a mistake while collection all files
together to the 20060116-release. If you don't want
to download the complete WinARM-package again just get the
insight-gdb from www.devkitpro.org. Inishgt-gdb in
WinARM is just a copy of the devkitpro-release where
the debugger binaries for psp and mingw have been removed to
decrease the size of the WinARM-archive.
Version 8/2005 -> Version 20060116
- bintuils 2.15 -> 2.16CVS 13.1.2006
- arm-elf-gcc 4.0.1 -> 4.0.2
- removed mulitlib-option fno-leading-underscore/fleading-underscore
- newlib 1.13.0 -> 1.14.0
- lpc21isp 1.28 -> 1.31 ("release")
- lpc21isp 2.01 -> 1.33 ("beta") seems the numbering scheme has changed
- newlib-lpc Rel.4 -> Rel.5
- Programmers Notepad 2.0.5.x -> 188.8.131.52
- Insight-gdb 5.1 -> 6.4.50
- Macraigor hwsupport 2.13 -> 2.15
- FreeRTOS 3.2.0 -> 3.2.4 in the example-directory
- sync of examples with those from the web-page (new examples for LPC2138 and AT91SAM7S64)
- It seems that int isatty(int) is no longer provided by the environment, see the
example lpc2106_hello_rs232_newlib and the various syscalls.c for a workaround if
the error message "unknown reference to isatty" appears during the link-process.
(Reason might be the additional configure-option --disable-newlib-supplied-syscalls for
newlib which had to be added since the build of newlib 1.14.0 failed when the "supplied"
syscalls were not disabled.)
- It seems that the linker does not provide a correct "." if the section before
is empty and the current section is aligned in the section "header". I'm not
sure why - maybe a new feature or a bug in the binutils. In the "blinkswitch"
examples for LPC2106 und LPC2129 I've somehow fixed this and verified the correct
result by the values given in the map-file.
In the linker-script for ROM
.stack ALIGN(256) :
has been replaced with:
. = ALIGN(256);
Version 5/2005 -> Version 8/2005
- arm-elf-gcc Version 4.0.1 (was 4.0.0)
- lpc21isp 1.28 and 2.01 (latest "official" and beta versions at release date)
- lpc21isp now in /WinARM/bin (was /WinARM/utils/bin) so the WinARM/utils/bin is not needed
in the path if MinGW/minSYS, Cygwin or WinAVR is installed.
- make.exe now 3.78.1 again
- sh.exe now the old zsh again
- added Codesourcery's gdb 6.3.50 (for tests with DEV-C++ as "IDE")
- latest versions of the Macraigor-Utils
- sync of examples with those from the web-page (some new LPC2129 and a AT91SAM7S64 example)
- FreeRTOS 3.2.0 in the example-directory
(latest = by the time of writing this = 19. Aug. 2005)