Pages: [1]   Go Down
Author Topic: Is Arduino ANSI compatible ?  (Read 483 times)
0 Members and 1 Guest are viewing this topic.
France
Offline Offline
Jr. Member
**
Karma: 0
Posts: 50
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hello.

Well, that's my question.

One of the reason I choosed Arduino is that it was programmed in Arduino wich was supposed cloth to C.

But Now I have a doubt whether an Arduino code can easily be put on another uC.

I've read somewhere that the C compiler has to be ANSI compatible to make the move on different uC easy. And it seams that not all C compiler are .
Logged

Offline Offline
Edison Member
*
Karma: 18
Posts: 1170
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

It is a mixed bag. Since the Arduino has no concept of a file system, most of stdio is right out. It is also heavily C++ based, not C based.

Generally when you talk about porting it is to a processor of at least similar abilities. It should be pretty easy to port Arduino code to a PIC, lets say, but makes little sense on a Cray.
Logged

Des Moines, WA - USA
Offline Offline
God Member
*****
Karma: 25
Posts: 779
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

The compiler is a C++ compiler that much is so.  But as to being ANSI compatible?  No as to be ANSI compatible it must include the full suite of C/C++ libraries and STL which it does not.

Then again given the limited resources the hardware platform the compiler supports is not fully capable of supporting these libraries either.

Then there are the memory allocation, deallocation and access decorators which make code developed for the hardware non portable to others platforms without due consideration.
Logged

Ayer, Massachusetts, USA
Offline Offline
Edison Member
*
Karma: 50
Posts: 1766
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

First of all, as of 1990, the ANSI C standard became the iSO C standard  with modifications (ANSI is one of the US standards bodies, ISO is world wide standards).

The language the IDE supports is C++, not C.  While C++ is mostly upwards compatible with C, there are differences in the corner cases.

At the standardization level C has two levels, hosted and freestanding.  I believe C++ is the same way.  Arduino comes in as a freestanding implementation, but the library does implement some of the libraries from the hosted standard (things like memcpy, malloc/new, etc.).

C++ and C both came out with new versions of the standards recently.  For the C language, this is the C11 standard (C99/C90 being the previous two ISO versions, C89 being the ANSI standard before the ISO certification process).  For the C++ lanuage, this is the C++11 standard (C++98 was the previous ISO standard).

Finally, the Arduino team has decided to stay on a rather old version of GCC (4.3.2 that was released on August 27, 2008).  GCC 4.8.0 was just released on March 22nd, 2013.   So the C++ that is currently supported in the Arduino IDE is based on the C++98 standard.

And yes, I have been a language lawyer in the past, and I was on the original ANSI X3J11 C standards committee many years ago.
« Last Edit: April 08, 2013, 04:33:15 pm by MichaelMeissner » Logged

Atlanta, USA
Offline Offline
Edison Member
*
Karma: 33
Posts: 1424
AKA: Ray Burne
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

You may find this discussion also of interest regarding the toolchain:
http://academic.cleardefinition.com/2012/09/21/using-c-on-the-arduino-a-mainstream-c-standard-library-port-for-the-avr/

Logged

UK
Offline Offline
Shannon Member
****
Karma: 184
Posts: 11159
-
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Since the Arduino has no concept of a file system ...

It isn't integrated into the standard 'C' runtime library, but there is an SD library which can be used to access a filing system on SD cards.
Logged

I only provide help via the forum - please do not contact me for private consultancy.

Offline Offline
Edison Member
*
Karma: 18
Posts: 1170
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Quote
It isn't integrated into the standard 'C' runtime library, but there is an SD library which can be used to access a filing system on SD cards.

So it isn't ISO compliant, which is kind of the point here.
Logged

Ayer, Massachusetts, USA
Offline Offline
Edison Member
*
Karma: 50
Posts: 1766
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Quote
It isn't integrated into the standard 'C' runtime library, but there is an SD library which can be used to access a filing system on SD cards.

So it isn't ISO compliant, which is kind of the point here.
As I said, the ISO standard has two levels, hosted and freestanding.  Freestanding is without libraries, other than what is needed to implement missing instructions (floating point and long long emulation for instance), and the stdarg.h library.  So, it could meet a freestanding ISO specification, if you used an appropriate compiler, and could add the options to more strictly conform to the ISO standard.
Logged

Pages: [1]   Go Up
Jump to: