For a new project, I am considering the AT91 series of ARM processors from Atmel.
Anybody here have experience with these processors, and the tools? I know the "which compiler is best" is a very "religionbased" question, but nevertheless I'll give it a shot.
So, in your opinion, which tools is worth a look, and which is NOT?
I've used the IAR ARM compiler and IDE for several years now. After one or two bugs (which IAR fixed or for which they sent me new source) in the first few months, it has run without problems and produced code that has done the job. It's rather expensive at about $4000 US.
I've been using gcc-arm for a few months now. I must admit that the system arrived on a laptop set up with Ubuntu Linux and I have no idea of the effort required to install the arm tool chain. It just works, and the code it generates runs without problems (other than those intrinsic to the project). I now understand just enough about the Linux system to do the specific programming tasks required. I'm sure others on this newsgroup can tell you more about gcc and Linux.
Their debugger is very comprehensive, and they also supply a nice USB JTAG interface - CrossConnect - for 99 GBP. Their software also works with low-cost Wiggler clones, which can cause problems when using GNU tools.
Disclaimer - I have never used the ARM, and I don't know how the various ARM compilers compare in practice, so I'm just looking at this from a general viewpoint.
The IAR comparison page is slightly better than Keil's, but not much, for similar reasons. Other points are: there is no source code available for the benchmarks, there are no run-time speeds given (for all we know from this page, the extra code compactness has come at a large run-time penalty, which has its own cost), and there is no indication as to the libraries. Some of the benchmarks look very much like large extra sections of library were linked in (by gcc and Keil), which gives a large skew to the results. This is typical of things like full printf support. There are several ways to reduce this overhead, which will also depend on how the tools were set up in the first place. And of course, library overhead may not be as much of an issue in a real application if lots of other code sections use the libraries.
If I were considering using an ARM, and choosing a compiler toolkit with a view to generating fast and/or compact code, I would not consider IAR or Keil's pages to be worth the pixels they written on. I'd ask around, such as in this newsgroup, and I'd try out demo versions myself. Reading a vendor's own "benchmark" page is hardly an objective reference.
Follow the link in the article. It includes benchmark data for IAR and ARM, as well as KEIL. GCC beat IAR quite soundly on both codesize and Dhrystone performance. In face, IAR was by far the worst on code size, and tied for last on execution speed.
Image size Dhrystones/sec
GCC ARM 4536 51,488 GCC Thumb 3660 44,239 IAR 19892 40,983 Keil 10330 39,370 ARM ADS 10256 59,382
--
Grant Edwards grante Yow! Don't hit me!! I'm in
at the Twilight Zone!!!
From the links in the article (still on the Keil website): "The Dhrystone benchmarks tests the C library as much as it tests the C compiler, which may not be fair when many embedded software engineers use custom libraries (e.g. for use with an RTOS)."
"Dhrystone consists of standard code and concentrates on string handling. It is heavily influenced by hardware and software design, compiler and linker options, code optimizing, cache memory, wait states, and integer data types."
So the only valid conclusion is that these benchmarks show that GCC is quite efficient in string handling. Whereas the IAR-benchmarks test real-world embbedded applications.
Sorry, wrong link.
--
Gemaakt met Opera's revolutionaire e-mailprogramma:
http://www.opera.com/mail/
..and I'll take this opportunity to point out that GCC supports C++, while IAR supports only the Embedded C++ subset, and Keil doesn't support it at all (at present).
If code size and efficiency are important criteria for an embedded system, you're probably not going to use C++ or any other object- oriented language. I save those languages for the PC where memory and processor speed stopped being constraints some years back.
[Slaps forehead] Too late, been doing it for years now. An embedded system can be large and inefficient in ANY language, and can be fast and compact in C++.
A much better comparison than the Keil comparison can be found at:
formatting link
It also clearly shows that gcc is quite good when compared with the other compilers. The biggest problem is that the newlib libraries are quite big. Porting or writing a library more appropriate to small embedded systems is all that its needed for gcc.
I guess that's so. My own biases may be showing, as I have been working on embedded systems with less than 64K of code space for most of the last 20 years. It's only in the last year or two that I've been using hardware with the RAM and processor power to make C++ a workable alternative to standard C. I would guess that writing good C++ for small systems involves concious decisions to avoid some features that lead to increased size and slower speed. But the same is true of C.
Why do you think EC++ was developed in the first place? (and it wasn't by IAR) EC++ is used on systems where full C++ compilers are available because EC++ is a good idea for embedded systems. There are several compilers which have a C++/EC++ switch.
IAR could implement full C++ on several of their targets if they wanted to and it was a good idea.
The fact that GCC does not support EC++ is not a plus point for GCC it is a negative point.
--
\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\
\/\/\/\/\ Chris Hills Staffs England /\/\/\/\/
ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here.
All logos and trade names are the property of their respective owners.