I have implemented C++ queue in my codes, those I run on my PC.
Now I'm programming an ATmega128 micro-controller to implement a .c
code. Can I use that queue
.
Will it work?
If not please suggest me a queue
to implement.
Electrical Engineering Stack Exchange is a question and answer site for electronics and electrical engineering professionals, students, and enthusiasts. It only takes a minute to sign up.
Sign up to join this communityI have implemented C++ queue in my codes, those I run on my PC.
Now I'm programming an ATmega128 micro-controller to implement a .c
code. Can I use that queue
.
Will it work?
If not please suggest me a queue
to implement.
It is very well possible to use C++ on the AVR. Arduino has been doing it for ages. Unfortunately, avr-g++ does not ship with a C++ standard library (the successor to the old STL), so you have to rely on C++ core language features. C++, just like C, has many features that don't map well to small microcontrollers; you need to find out which ones. For starters, exceptions, RTTI (typeid
), new
/delete
, and anything that requires those (especially standard library containers like vector
, string
and queue
) don't really work here. Typical microcontroller programs use ring buffers and fixed arrays instead.
On the other hand, classes (including virtual functions), templates/Metaprogramming, constexpr
, proper constants, avoiding macros, function overloads and RAII can be put to good use without sacrificing efficiency.
To compile C++ code, substitute calls to avr-gcc
with calls to avr-g++
. Make sure to use a recent version, since C++ support is in active development.
avr-gcc
should be able to compile C++ just fine. On other platforms, g++
vs gcc
changes whether libstdc++ is linked by default, so if this is not available for AVR I suspect there is actually no difference...
\$\endgroup\$
You can use C++ with avr-gcc but not STL. I'm writing std
for avr-gcc, except the code that use dynamic memory (so you can't use std::vector or std::queue) and exceptions. You can check my implementation:
https://github.com/amanuellperez/mcu/tree/master/src/std
It compiles with avr-gcc-9.2.0.