=======================================
Convenient C++ programming with Arduino
=======================================

About
=====
The ATmega328_ has 32 KB ISP flash memory and 2 KB SRAM.

.. _ATmega328: https://en.wikipedia.org/wiki/ATmega328


Tech
====

Variable-Length Argument Lists
------------------------------
- http://c-faq.com/varargs/
- http://c-faq.com/~scs/cgi-bin/faqcat.cgi?sec=varargs
- http://en.cppreference.com/w/cpp/utility/variadic
- https://www.eskimo.com/~scs/cclass/int/sx11b.html
- https://stackoverflow.com/questions/1657883/variable-number-of-arguments-in-c
- https://stackoverflow.com/questions/16337459/undefined-number-of-arguments
- http://www.varesano.net/blog/fabio/functions-variable-lenght-arguments-arduino
- http://www.cprogramming.com/tutorial/c/lesson17.html
- https://en.wikipedia.org/wiki/Variadic_template
- http://linux.die.net/man/3/va_arg

initializer_list
................
- http://coliru.stacked-crooked.com/a/84c7739d7d7e03cc

Modern C++
..........
http://www.murrayc.com/permalink/2015/12/05/modern-c-variadic-template-parameters-and-tuples/


Standard Template Library
-------------------------
Our pick
........
- | The Standard Template Library (STL) for AVR with C++ streams
  | Version 1.1.1 (most recent as of 2015-11-01)
  | http://andybrown.me.uk/2011/01/15/the-standard-template-library-stl-for-avr-with-c-streams/
  | https://drive.google.com/uc?export=download&id=0B9Zobp2aWUKzb2xvZ0Y2VGd1RTQ

Other choices
.............
- http://hackaday.com/2012/10/22/giving-the-arduino-deques-vectors-and-streams-with-the-standard-template-library/
- https://github.com/maniacbug/StandardCplusplus
- https://andybrown.me.uk/2011/01/15/the-standard-template-library-stl-for-avr-with-c-streams/
- https://arduino.stackexchange.com/questions/9835/problem-with-declaring-2d-vector-in-arduino
- https://msharov.github.io/ustl/
- http://cxx.uclibc.org/
- | EASTL -- Electronic Arts Standard Template Library
  | http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2271.html
- | uSTL
  | https://msharov.github.io/ustl/


Using the "Vector" container object
-----------------------------------
- https://github.com/maniacbug/StandardCplusplus/blob/master/vector
- https://github.com/maniacbug/StandardCplusplus/blob/master/vector.cpp
- | Topic: container for Objects like c++ vector?
  | https://stackoverflow.com/questions/9986591/vectors-in-arduino
- http://forum.arduino.cc/index.php/topic,45626.0.html
- | LinkedList for Arduino
  | https://gist.github.com/obedrios/2957439


Memory profiling
----------------
- http://andybrown.me.uk/2011/01/01/debugging-avr-dynamic-memory-allocation/

Object initialization
---------------------
- http://en.cppreference.com/w/cpp/language/direct_initialization
- http://en.cppreference.com/w/cpp/language/value_initialization


Float to String
---------------
- http://playground.arduino.cc/Main/FloatToString
- http://forum.arduino.cc/index.php/topic,37391.0.html

Misc
----
- http://electrons.psychogenic.com/modules/arms/art/3/AVRGCCProgrammingGuide.php
- https://gcc.gnu.org/onlinedocs/gcc/AVR-Options.html
- https://gcc.gnu.org/onlinedocs/gcc-4.6.2/gcc/AVR-Options.html
- https://www.tty1.net/blog/2008/avr-gcc-optimisations_en.html


Simulation
==========
- http://www.nongnu.org/simulavr/
- https://github.com/Traumflug/simulavr
- http://mirror.unicorncloud.org/savannah-nongnu/simulavr/manual-1.0.pdf
- http://download.savannah.gnu.org/releases/simulavr/


Operating Systems
=================
- AVR RTOS - Atomthreads: Open Source RTOS
    - http://atomthreads.com/?q=node/1
    - http://atomthreads.com/index.php?q=node/20
    - https://raw.githubusercontent.com/kelvinlawson/atomthreads/master/ports/avr/README

MQTT interfaces
===============
- https://github.com/adafruit/Adafruit_MQTT_Library/blob/master/Adafruit_MQTT.cpp
- https://github.com/adafruit/Adafruit_MQTT_Library/blob/master/Adafruit_MQTT_Client.cpp
- http://knolleary.net/arduino-client-for-mqtt/
- http://knolleary.net/2009/01/29/updated-client-for-mqtt-library/
- https://github.com/knolleary/pubsubclient/blob/master/src/PubSubClient.cpp
- https://github.com/andreareginato/pubsubclient
- https://github.com/andreareginato/pubsubclient/commit/cdec8bf33742883057120e6a27fc3e3591991e6e

JSON serializers
================
- https://github.com/bblanchon/ArduinoJson
