<commit_before>[![Build Status](https://travis-ci.org/roboterclubaachen/xpcc.svg?branch=develop)](https://travis-ci.org/roboterclubaachen/xpcc)

xpcc: C++ microcontroller framework
===================================

The xpcc framework consists of powerful hardware abstraction layers for many
different microcontrollers, a set of drivers for various external chips, 
a communication library for transparent communication over CAN, TCP/IP and TIPC
and a general purpose toolbox for building hardware orientated applications.

The main goal of xpcc is to provide a simple API for barebone microcontroller programming, 
which is efficient enough to be deployed on a small ATtiny, yet powerful enough to make
use of advanced capabilities found on the 32bit ARM Cortex-M.


Main Features
-------------

- efficient object-oriented C++11 API:
  - new- and delete-operators
  - STL-containers
  - IO-stream interface to hardware (console, RS232, CAN)
- support of AVR and ARM Cortex-M based microcontrollers from Atmel, ST and NXP,
- build system based on SCons and Jinja2 template engine,
- cross platform peripheral interfaces (incl. bit banging):
  - GPIO, 
  - UART, I2C, SPI,
  - CAN
- write once, run anywhere external IC drivers using these interfaces,
- Debug/Logging system,
- lightweight, non-blocking workflow using timers and cooperative multitasking,
- integration of RTOS (currently only FreeRTOS and boost::thread),
- useful mathematical algorithms optimized for microcontrollers,
- lightweight unit testing system (suitable for 8-bit microcontrollers),
- graphical user interface for small screens.


Hardware support
----------------

Here is a list of supported **and tested** microcontrollers:

- AT90CAN family
- ATtiny44 family
- ATtiny85 family
- ATmega644 family
- ATmega328p family (Arduino Uno)
- ATmega1280 family (Arduino Mega)
- STM32F407 family (STM32F4 Discovery Board)
- STM32F303 family (STM32F3 Discovery Board)
- LPC11C24 (LPCxpresso Board)

Please see [our examples](https://github.com/roboterclubaachen/xpcc/tree/develop/examples) 
for a complete list of tested projects.

While the xpcc API is designed to be extremely portable, we are only a small team of developers and
therefore are limited in the amount of platforms we can support.
The following microcontrollers should be able to compile, but *have not been tested extensively* in hardware:

- All AT90's
- All ATtiny's
- All ATmega's

There are more platforms which we have prepared, but currently not finished support for (Xmega, STM32F{0,1,2}).
A complete support list of tested and/or compilable and/or potentially portable microcontrollers is available in our
[device file section](https://github.com/roboterclubaachen/xpcc/tree/develop/src/xpcc/architecture/platform/devices).<commit_msg>Update supported platforms in Readme.<commit_after>[![Build Status](https://travis-ci.org/roboterclubaachen/xpcc.svg?branch=develop)](https://travis-ci.org/roboterclubaachen/xpcc)

xpcc: C++ microcontroller framework
===================================

The xpcc framework consists of powerful hardware abstraction layers for many
different microcontrollers, a set of drivers for various external chips, 
a communication library for transparent communication over CAN, TCP/IP and TIPC
and a general purpose toolbox for building hardware orientated applications.

The main goal of xpcc is to provide a simple API for barebone microcontroller programming, 
which is efficient enough to be deployed on a small ATtiny, yet powerful enough to make
use of advanced capabilities found on the 32bit ARM Cortex-M.


Main Features
-------------

- efficient object-oriented C++11 API:
  - new- and delete-operators
  - STL-containers
  - IO-stream interface to hardware (console, RS232, CAN)
- support of AVR and ARM Cortex-M based microcontrollers from Atmel, ST and NXP,
- build system based on SCons and Jinja2 template engine,
- cross platform peripheral interfaces (incl. bit banging):
  - GPIO, 
  - UART, I2C, SPI,
  - CAN
- write once, run anywhere external IC drivers using these interfaces,
- Debug/Logging system,
- lightweight, non-blocking workflow using timers and cooperative multitasking,
- integration of RTOS (currently only FreeRTOS and boost::thread),
- useful mathematical algorithms optimized for microcontrollers,
- lightweight unit testing system (suitable for 8-bit microcontrollers),
- graphical user interface for small screens.


Hardware support
----------------

Here is a list of supported **and tested** microcontrollers:

- AT90CAN family
- ATtiny44 family
- ATtiny85 family
- ATmega644 family
- ATmega328p family (Arduino Uno)
- ATmega1280 family (Arduino Mega)
- STM32F101 family
- STM32F100 family (STM32F1 Discovery Board)
- STM32F303 family (STM32F3 Discovery Board)
- STM32F407 family (STM32F4 Discovery Board)
- STM32F411 family (STM32F411 Nucleo Board)
- STM32F746 family (STM32F7 Discovery Board)
- LPC11C24 (LPCxpresso Board)
- LPC1115 (LPCxpresso Board)

Please see [our examples](https://github.com/roboterclubaachen/xpcc/tree/develop/examples) 
for a complete list of tested projects.

While the xpcc API is designed to be extremely portable, we are only a small team of developers and
therefore are limited in the amount of platforms we can support.
The following microcontrollers should be able to compile, but *have not been tested extensively* in hardware:

- All AT90's
- All ATtiny's
- All ATmega's

There are more platforms which we have prepared, but currently not finished support for (Xmega, STM32F{0,2}).
A complete support list of tested and/or compilable and/or potentially portable microcontrollers is available in our
[device file section](https://github.com/roboterclubaachen/xpcc/tree/develop/src/xpcc/architecture/platform/devices).
{'fraction_non_alphanumeric': 0.0865117891816921, 'fraction_numerical': 0.024271844660194174, 'mean_word_length': 4.579303675048356, 'pattern_counts': {'":': 0, '<': 3, '<?xml version=': 0, '>': 3, 'https://': 8, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '7069316', 'n_tokens_mistral': 1718, 'n_tokens_neox': 1567, 'n_words': 675}