Skip to main content

pyavrutils is a Python library that can build AVR_ and arduino_ code at runtime.

Project description

pyavrutils is a Python library that can build AVR_ and arduino_ code at runtime.

Links:
* home: https://github.com/ponty/pyavrutils
* documentation: http://pyavrutils.readthedocs.org
* PYPI: https://pypi.python.org/pypi/pyavrutils

|Travis| |Coveralls| |Latest Version| |Supported Python versions| |License| |Code Health| |Documentation|

Features:
- python wrapper for avr-gcc, avr-size, arscons_
- build files or strings (strings are saved as temp files)
- MCU list
- get code size using avr-size
- avr-gcc default is optimized for size
- supported python versions: 2.7, 3.3, 3.4, 3.5

Known problems:
- temp files are not removed
- arscons_ does not perfectly matches the Arduino build process

Possible usage:
- experimenting with flags
- unit tests
- building arduino_ code without GUI

Basic usage
===========

>>> from pyavrutils import AvrGcc
>>> cc = AvrGcc()
>>> cc.build('int main(){}')
>>> cc.size().program_bytes
66

>>> from pyavrutils import Arduino
>>> cc = Arduino()
>>> cc.mcu = 'atmega8'
>>> cc.build('void setup(){};void loop(){}')
>>> cc.size().program_bytes
1612

Installation
============

General
-------

* arscons_ is already included in the library
* install pip_
* install gcc-avr
* install scons_ (only for arscons_)
* install arduino_ (only for arscons_)
* install the program:

if you have setuptools_ installed::

# as root
pip install pyavrutils

Ubuntu 14.04
------------
::

sudo apt-get install python-pip
sudo apt-get install binutils-avr gcc-avr scons arduino
sudo pip install pyavrutils
# optional for examples:
sudo pip install entrypoint2

Uninstall
---------

using pip_::

# as root
pip uninstall pyavrutils

Usage
=====

AVR::

#-- sh('python -m pyavrutils.examples.usage_avr ')--#
>>> from pyavrutils import AvrGcc
>>> cc = AvrGcc(mcu='atmega48')
>>> cc.targets
[u'at43usb320', u'at43usb355', u'at76c711', u'at86rf401', u'at90c8534', u'at90can128', u'at90can32', u'at90can64', u'at90pwm1', u'at90pwm161', u'at90pwm2', u'at90pwm216', u'at90pwm2b', u'at90pwm3', u'at90pwm316', u'at90pwm3b', u'at90pwm81', u'at90s1200', u'at90s2313', u'at90s2323', u'at90s2333', u'at90s2343', u'at90s4414', u'at90s4433', u'at90s4434', u'at90s8515', u'at90s8535', u'at90scr100', u'at90usb1286', u'at90usb1287', u'at90usb162', u'at90usb646', u'at90usb647', u'at90usb82', u'at94k', u'ata5272', u'ata5505', u'ata5790', u'ata5790n', u'ata5795', u'ata6285', u'ata6286', u'ata6289', u'atmega103', u'atmega128', u'atmega1280', u'atmega1281', u'atmega1284', u'atmega1284p', u'atmega128a', u'atmega128rfa1', u'atmega16', u'atmega161', u'atmega162', u'atmega163', u'atmega164a', u'atmega164p', u'atmega164pa', u'atmega165', u'atmega165a', u'atmega165p', u'atmega165pa', u'atmega168', u'atmega168a', u'atmega168p', u'atmega168pa', u'atmega169', u'atmega169a', u'atmega169p', u'atmega169pa', u'atmega16a', u'atmega16hva', u'atmega16hva2', u'atmega16hvb', u'atmega16hvbrevb', u'atmega16m1', u'atmega16u2', u'atmega16u4', u'atmega2560', u'atmega2561', u'atmega26hvg', u'atmega32', u'atmega323', u'atmega324a', u'atmega324p', u'atmega324pa', u'atmega325', u'atmega3250', u'atmega3250a', u'atmega3250p', u'atmega3250pa', u'atmega325a', u'atmega325p', u'atmega328', u'atmega328p', u'atmega329', u'atmega3290', u'atmega3290a', u'atmega3290p', u'atmega3290pa', u'atmega329a', u'atmega329p', u'atmega329pa', u'atmega32a', u'atmega32c1', u'atmega32hvb', u'atmega32hvbrevb', u'atmega32m1', u'atmega32u2', u'atmega32u4', u'atmega32u6', u'atmega406', u'atmega48', u'atmega48a', u'atmega48hvf', u'atmega48p', u'atmega48pa', u'atmega64', u'atmega640', u'atmega644', u'atmega644a', u'atmega644p', u'atmega644pa', u'atmega645', u'atmega6450', u'atmega6450a', u'atmega6450p', u'atmega645a', u'atmega645p', u'atmega649', u'atmega6490', u'atmega6490a', u'atmega6490p', u'atmega649a', u'atmega649p', u'atmega64a', u'atmega64c1', u'atmega64hve', u'atmega64m1', u'atmega64rfa2', u'atmega64rfr2', u'atmega8', u'atmega8515', u'atmega8535', u'atmega88', u'atmega88a', u'atmega88p', u'atmega88pa', u'atmega8a', u'atmega8hva', u'atmega8u2', u'atmxt112sl', u'atmxt224', u'atmxt224e', u'atmxt336s', u'atmxt540s', u'atmxt540sreva', u'attiny11', u'attiny12', u'attiny13', u'attiny13a', u'attiny15', u'attiny1634', u'attiny167', u'attiny22', u'attiny2313', u'attiny2313a', u'attiny24', u'attiny24a', u'attiny25', u'attiny26', u'attiny261', u'attiny261a', u'attiny28', u'attiny4313', u'attiny43u', u'attiny44', u'attiny44a', u'attiny45', u'attiny461', u'attiny461a', u'attiny48', u'attiny84', u'attiny84a', u'attiny85', u'attiny861', u'attiny861a', u'attiny87', u'attiny88', u'atxmega128a1', u'atxmega128a1u', u'atxmega128a3', u'atxmega128a3u', u'atxmega128a4u', u'atxmega128b1', u'atxmega128b3', u'atxmega128c3', u'atxmega128d3', u'atxmega128d4', u'atxmega16a4', u'atxmega16a4u', u'atxmega16c4', u'atxmega16d4', u'atxmega16x1', u'atxmega192a3', u'atxmega192a3u', u'atxmega192c3', u'atxmega192d3', u'atxmega256a3', u'atxmega256a3b', u'atxmega256a3bu', u'atxmega256a3u', u'atxmega256c3', u'atxmega256d3', u'atxmega32a4', u'atxmega32a4u', u'atxmega32c4', u'atxmega32d4', u'atxmega32e5', u'atxmega32x1', u'atxmega384c3', u'atxmega384d3', u'atxmega64a1', u'atxmega64a1u', u'atxmega64a3', u'atxmega64a3u', u'atxmega64a4u', u'atxmega64b1', u'atxmega64b3', u'atxmega64c3', u'atxmega64d3', u'atxmega64d4', u'avr1', u'avr2', u'avr25', u'avr3', u'avr31', u'avr35', u'avr4', u'avr5', u'avr51', u'avr6', u'avrxmega2', u'avrxmega4', u'avrxmega5', u'avrxmega6', u'avrxmega7', u'm3000']
>>> cc.options_generated()
['avr-gcc', '-Df_cpu=4000000', '-mmcu=atmega48', '--std=gnu99', '-Wl,--relax', '-Wl,--gc-sections', '-ffunction-sections', '-fdata-sections', '-fno-inline-small-functions', '-Os']
>>> cc.build('int main(){}')
>>> cc.output
/tmp/pyavrutils_MM2AL6.elf
>>> cc.size()
AvrSize <prog:80 bytes 2.0% mem:0 bytes 0.0% >
>>> cc.size().program_bytes
80
>>> cc.mcu='atmega168'
>>> cc.options_generated()
['avr-gcc', '-Df_cpu=4000000', '-mmcu=atmega168', '--std=gnu99', '-Wl,--relax', '-Wl,--gc-sections', '-ffunction-sections', '-fdata-sections', '-fno-inline-small-functions', '-Os']
>>> cc.build('int main(){}')
>>> cc.output
/tmp/pyavrutils_MM2AL6.elf
>>> cc.size().program_bytes
132
#-#


arduino::

#-- sh('python -m pyavrutils.examples.usage_ard ')--#
>>> from pyavrutils import Arduino
>>> cc = Arduino(board='mini')
>>> cc.build('void setup(){};void loop(){}')
>>> cc.output
/tmp/pyavrutils_6rOALC/pyavrutils_yhNZYl/pyavrutils_yhNZYl.elf
>>> cc.size()
AvrSize <prog:440 bytes 2.7% mem:9 bytes 0.9% >
>>> cc.size().program_bytes
440
>>> cc.board='pro'
>>> cc.build('void setup(){};void loop(){}')
>>> cc.output
/tmp/pyavrutils_pDz6aH/pyavrutils_pnu8A3/pyavrutils_pnu8A3.elf
>>> cc.size().program_bytes
440
>>> cc.warnings
[u'build/core/HardwareSerial.cpp:100:20: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]', u"build/core/HardwareSerial.cpp:129:21: warning: unused variable 'c' [-Wunused-variable]", u"build/core/HardwareSerial.cpp:370:11: warning: unused variable 'current_config' [-Wunused-variable]", u'build/core/HardwareSerial.cpp:469:27: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]']
#-#

Examples
========

Simple example
--------------

Example program::

#-- include('examples/simple.py')--#
'''
test minimum program size with different optimizations
'''

from pyavrutils import AvrGcc
from entrypoint2 import entrypoint

cc = AvrGcc()
code = 'int main(){}'


def test():
print ' compiler option:', ' '.join(cc.options_generated())
cc.build(code)
print ' program size =', cc.size().program_bytes


@entrypoint
def main():
print 'compiler version:', cc.version()
print 'code:', code
print
print 'no optimizations::'
print
cc.optimize_no()
test()
print
print 'optimize for size::'
print
cc.optimize_for_size()
test()
#-#

Output::

#-- sh('python -m pyavrutils.examples.simple ')--#
compiler version: 4.8.2
code: int main(){}

no optimizations::

compiler option: avr-gcc -Df_cpu=4000000 -mmcu=atmega168 --std=gnu99
program size = 150

optimize for size::

compiler option: avr-gcc -Df_cpu=4000000 -mmcu=atmega168 --std=gnu99 -Wl,--relax -Wl,--gc-sections -ffunction-sections -fdata-sections -fno-inline-small-functions -Os
program size = 132
#-#

Test size with unused code
--------------------------

Example program::

#-- include('examples/deadcode.py')--#
from pyavrutils.avrgcc import AvrGcc
from entrypoint2 import entrypoint

cc = AvrGcc()


def test_option(sources, optimization, gc_sections=0, ffunction_sections=0):
print 'optimization =', optimization,
print 'gc_sections =', gc_sections,
print 'ffunction_sections =', ffunction_sections,
print

cc.optimization = optimization
cc.gc_sections = gc_sections
cc.ffunction_sections = ffunction_sections
try:
cc.build(sources)
size = cc.size()
print 'program, data =', str(size.program_bytes).rjust(8), ',', str(size.data_bytes).rjust(8)
except:
print 'compile error'


def test(sources):
print 'sources:', sources
test_option(sources, 0)
test_option(sources, 's', 0)
test_option(sources, 's', 1)
test_option(sources, 's', 1, 1)


@entrypoint
def main():
cc.optimize_no()
print 'compiler version:', cc.version()
print 'compiler options:', ' '.join(cc.options_generated())
print
print 'minimum size'
print 20 * '='
test(['int main(){}'])

print
print 'unused function in separate file'
print 40 * '='
test(['int main(){}', 'int f(){return 2;}'])

print
print 'unused function in the same file'
print 40 * '='
test(['int main(){}; int f(){return 2;}'])
#-#

Output::

#-- sh('python -m pyavrutils.examples.deadcode ')--#
compiler version: 4.8.2
compiler options: avr-gcc -Df_cpu=4000000 -mmcu=atmega168 --std=gnu99

minimum size
====================
sources: ['int main(){}']
optimization = 0 gc_sections = 0 ffunction_sections = 0
program, data = 150 , 0
optimization = s gc_sections = 0 ffunction_sections = 0
program, data = 138 , 0
optimization = s gc_sections = 1 ffunction_sections = 0
program, data = 138 , 0
optimization = s gc_sections = 1 ffunction_sections = 1
program, data = 138 , 0

unused function in separate file
========================================
sources: ['int main(){}', 'int f(){return 2;}']
optimization = 0 gc_sections = 0 ffunction_sections = 0
program, data = 168 , 0
optimization = s gc_sections = 0 ffunction_sections = 0
program, data = 144 , 0
optimization = s gc_sections = 1 ffunction_sections = 0
program, data = 138 , 0
optimization = s gc_sections = 1 ffunction_sections = 1
program, data = 138 , 0

unused function in the same file
========================================
sources: ['int main(){}; int f(){return 2;}']
optimization = 0 gc_sections = 0 ffunction_sections = 0
program, data = 168 , 0
optimization = s gc_sections = 0 ffunction_sections = 0
program, data = 144 , 0
optimization = s gc_sections = 1 ffunction_sections = 0
program, data = 138 , 0
optimization = s gc_sections = 1 ffunction_sections = 1
program, data = 138 , 0
#-#


Test size with delay.h
----------------------

Example program::

#-- include('examples/delaysize.py')--#
from entrypoint2 import entrypoint
from pyavrutils.avrgcc import AvrGcc, AvrGccCompileError

templ = '''
#include <avr/io.h>
#include <util/delay.h>
int main()
{
%s;
return 0;
}
'''

cc = AvrGcc()
cc.optimize_no()
print 'compiler version:', cc.version()
print


def test(snippet, option=''):
print snippet.ljust(33),
cc.options_extra = option.split()
print 'compiler option:', option, '\t',
try:
cc.build([templ % snippet])
size = cc.size()
print 'program, data =', str(size.program_bytes).rjust(8), ',', str(size.data_bytes).rjust(8)
except AvrGccCompileError as e:
print 'compile error'


@entrypoint
def main():
cc.optimization = 0

test('_delay_ms(4)', '-O0')
test('_delay_ms(4)', '-O1')
test('_delay_ms(4)', '-O2')
test('_delay_ms(4)', '-O3')
test('_delay_ms(4)', '-Os')
#-#

Output::

#-- sh('python -m pyavrutils.examples.delaysize ')--#
compiler version: 4.8.2

_delay_ms(4) compiler option: -O0 program, data = 938 , 0
_delay_ms(4) compiler option: -O1 program, data = 150 , 0
_delay_ms(4) compiler option: -O2 program, data = 150 , 0
_delay_ms(4) compiler option: -O3 program, data = 150 , 0
_delay_ms(4) compiler option: -Os program, data = 150 , 0
#-#


Test size with program space
----------------------------

Example program::

#-- include('examples/pgmspace.py')--#
from pyavrutils.avrgcc import AvrGcc
from entrypoint2 import entrypoint

templ = '''
#include <avr/io.h>
#include <avr/pgmspace.h>
int main()
{
%s;
return 0;
}
'''

cc = AvrGcc()
cc.optimization = 0
print 'compiler version:', cc.version()
print 'compiler options:', ' '.join(cc.options_generated())
print


def test(snippet):
print snippet, '\t\t',
try:
cc.build([templ % snippet])
size = cc.size()
print 'program, data =', str(size.program_bytes).rjust(8), ',', str(size.data_bytes).rjust(8)
except:
print 'compile error'


def test_comb(s):
words = 'static const PROGMEM'.split()

def choice(i):
return [words[i], ' ' * len(words[i])]

for s0 in choice(0):
for s1 in choice(1):
for s2 in choice(2):
# for s3 in choice(3):
test('%s %s char s[] %s = "%s"' % (s0, s1, s2, s))


@entrypoint
def main():
test_comb("12345")
test_comb("1234512345")
#-#

Output::

#-- sh('python -m pyavrutils.examples.pgmspace ')--#
compiler version: 4.8.2
compiler options: avr-gcc -Df_cpu=4000000 -mmcu=atmega168 --std=gnu99 -Wl,--relax -Wl,--gc-sections -ffunction-sections -fdata-sections -fno-inline-small-functions

static const char s[] PROGMEM = "12345" program, data = 144 , 0
static const char s[] = "12345" program, data = 166 , 0
static char s[] PROGMEM = "12345" compile error
static char s[] = "12345" program, data = 166 , 0
const char s[] PROGMEM = "12345" program, data = 210 , 6
const char s[] = "12345" program, data = 210 , 6
char s[] PROGMEM = "12345" program, data = 210 , 6
char s[] = "12345" program, data = 210 , 6
static const char s[] PROGMEM = "1234512345" program, data = 144 , 0
static const char s[] = "1234512345" program, data = 166 , 0
static char s[] PROGMEM = "1234512345" compile error
static char s[] = "1234512345" program, data = 166 , 0
const char s[] PROGMEM = "1234512345" program, data = 222 , 12
const char s[] = "1234512345" program, data = 222 , 12
char s[] PROGMEM = "1234512345" program, data = 222 , 12
char s[] = "1234512345" program, data = 222 , 12
#-#

Conclusions:
- constant string should be static or global
- ``const`` has no effect on size
- PROGMEM should be used

Test minimum size
-----------------

Example program::

#-- include('examples/minsize.py')--#
'''
test minimum program size with all MCUs
'''

from entrypoint2 import entrypoint
from pyavrutils.avrgcc import AvrGcc, AvrGccCompileError


def test(cc, mcu):
print 'MCU =', mcu.ljust(20),
cc.mcu = mcu
try:
cc.build(cc.minprog)
print ' program/data size =', cc.size().program_bytes, ',', cc.size().data_bytes
except AvrGccCompileError:
print ' compile error'


@entrypoint
def main():
cc = AvrGcc()
print '--------------'
print 'avr-gcc'
print '--------------'

print 'compiler version:', cc.version()
cc.optimize_for_size()
print 'compiler options:', ' '.join(cc.options_generated())
print 'code:', cc.minprog
print
for mcu in cc.targets:
test(cc, mcu)
#-#

Output::

#-- sh('python -m pyavrutils.examples.minsize')--#
--------------
avr-gcc
--------------
compiler version: 4.8.2
compiler options: avr-gcc -Df_cpu=4000000 -mmcu=atmega168 --std=gnu99 -Wl,--relax -Wl,--gc-sections -ffunction-sections -fdata-sections -fno-inline-small-functions -Os
code: int main(){};

MCU = at43usb320 program/data size = 80 , 0
MCU = at43usb355 program/data size = 80 , 0
MCU = at76c711 program/data size = 88 , 0
MCU = at86rf401 program/data size = 40 , 0
MCU = at90c8534 program/data size = 42 , 0
MCU = at90can128 program/data size = 176 , 0
MCU = at90can32 program/data size = 176 , 0
MCU = at90can64 program/data size = 176 , 0
MCU = at90pwm1 program/data size = 92 , 0
MCU = at90pwm161 compile error
MCU = at90pwm2 program/data size = 92 , 0
MCU = at90pwm216 program/data size = 156 , 0
MCU = at90pwm2b program/data size = 92 , 0
MCU = at90pwm3 program/data size = 92 , 0
MCU = at90pwm316 program/data size = 156 , 0
MCU = at90pwm3b program/data size = 92 , 0
MCU = at90pwm81 program/data size = 68 , 0
MCU = at90s1200 compile error
MCU = at90s2313 program/data size = 46 , 0
MCU = at90s2323 program/data size = 30 , 0
MCU = at90s2333 program/data size = 52 , 0
MCU = at90s2343 program/data size = 30 , 0
MCU = at90s4414 program/data size = 54 , 0
MCU = at90s4433 program/data size = 52 , 0
MCU = at90s4434 program/data size = 62 , 0
MCU = at90s8515 program/data size = 54 , 0
MCU = at90s8535 program/data size = 62 , 0
MCU = at90scr100 program/data size = 180 , 0
MCU = at90usb1286 program/data size = 180 , 0
MCU = at90usb1287 program/data size = 180 , 0
MCU = at90usb162 program/data size = 144 , 0
MCU = at90usb646 program/data size = 180 , 0
MCU = at90usb647 program/data size = 180 , 0
MCU = at90usb82 program/data size = 144 , 0
MCU = at94k program/data size = 172 , 0
MCU = ata5272 compile error
MCU = ata5505 compile error
MCU = ata5790 compile error
MCU = ata5790n compile error
MCU = ata5795 compile error
MCU = ata6285 compile error
MCU = ata6286 compile error
MCU = ata6289 program/data size = 82 , 0
MCU = atmega103 program/data size = 124 , 0
MCU = atmega128 program/data size = 168 , 0
MCU = atmega1280 program/data size = 256 , 0
MCU = atmega1281 program/data size = 232 , 0
MCU = atmega1284 compile error
MCU = atmega1284p program/data size = 168 , 0
MCU = atmega128a compile error
MCU = atmega128rfa1 program/data size = 316 , 0
MCU = atmega16 program/data size = 112 , 0
MCU = atmega161 program/data size = 112 , 0
MCU = atmega162 program/data size = 140 , 0
MCU = atmega163 program/data size = 100 , 0
MCU = atmega164a program/data size = 152 , 0
MCU = atmega164p program/data size = 152 , 0
MCU = atmega164pa compile error
MCU = atmega165 program/data size = 116 , 0
MCU = atmega165a program/data size = 116 , 0
MCU = atmega165p program/data size = 116 , 0
MCU = atmega165pa compile error
MCU = atmega168 program/data size = 132 , 0
MCU = atmega168a program/data size = 132 , 0
MCU = atmega168p program/data size = 132 , 0
MCU = atmega168pa compile error
MCU = atmega169 program/data size = 120 , 0
MCU = atmega169a program/data size = 120 , 0
MCU = atmega169p program/data size = 120 , 0
MCU = atmega169pa program/data size = 120 , 0
MCU = atmega16a program/data size = 112 , 0
MCU = atmega16hva program/data size = 112 , 0
MCU = atmega16hva2 program/data size = 116 , 0
MCU = atmega16hvb program/data size = 144 , 0
MCU = atmega16hvbrevb program/data size = 144 , 0
MCU = atmega16m1 program/data size = 152 , 0
MCU = atmega16u2 program/data size = 144 , 0
MCU = atmega16u4 program/data size = 200 , 0
MCU = atmega2560 program/data size = 260 , 0
MCU = atmega2561 program/data size = 236 , 0
MCU = atmega26hvg compile error
MCU = atmega32 program/data size = 112 , 0
MCU = atmega323 program/data size = 108 , 0
MCU = atmega324a program/data size = 152 , 0
MCU = atmega324p program/data size = 152 , 0
MCU = atmega324pa program/data size = 152 , 0
MCU = atmega325 program/data size = 120 , 0
MCU = atmega3250 program/data size = 128 , 0
MCU = atmega3250a program/data size = 128 , 0
MCU = atmega3250p program/data size = 128 , 0
MCU = atmega3250pa compile error
MCU = atmega325a program/data size = 120 , 0
MCU = atmega325p program/data size = 120 , 0
MCU = atmega328 program/data size = 132 , 0
MCU = atmega328p program/data size = 132 , 0
MCU = atmega329 program/data size = 120 , 0
MCU = atmega3290 program/data size = 128 , 0
MCU = atmega3290a program/data size = 128 , 0
MCU = atmega3290p program/data size = 128 , 0
MCU = atmega3290pa compile error
MCU = atmega329a program/data size = 120 , 0
MCU = atmega329p program/data size = 120 , 0
MCU = atmega329pa program/data size = 120 , 0
MCU = atmega32a compile error
MCU = atmega32c1 program/data size = 152 , 0
MCU = atmega32hvb program/data size = 144 , 0
MCU = atmega32hvbrevb program/data size = 144 , 0
MCU = atmega32m1 program/data size = 152 , 0
MCU = atmega32u2 program/data size = 144 , 0
MCU = atmega32u4 program/data size = 200 , 0
MCU = atmega32u6 program/data size = 180 , 0
MCU = atmega406 program/data size = 120 , 0
MCU = atmega48 program/data size = 80 , 0
MCU = atmega48a program/data size = 80 , 0
MCU = atmega48hvf compile error
MCU = atmega48p program/data size = 80 , 0
MCU = atmega48pa compile error
MCU = atmega64 program/data size = 168 , 0
MCU = atmega640 program/data size = 256 , 0
MCU = atmega644 program/data size = 140 , 0
MCU = atmega644a program/data size = 152 , 0
MCU = atmega644p program/data size = 152 , 0
MCU = atmega644pa program/data size = 152 , 0
MCU = atmega645 program/data size = 120 , 0
MCU = atmega6450 program/data size = 128 , 0
MCU = atmega6450a program/data size = 128 , 0
MCU = atmega6450p program/data size = 128 , 0
MCU = atmega645a program/data size = 120 , 0
MCU = atmega645p program/data size = 120 , 0
MCU = atmega649 program/data size = 120 , 0
MCU = atmega6490 program/data size = 128 , 0
MCU = atmega6490a program/data size = 128 , 0
MCU = atmega6490p program/data size = 128 , 0
MCU = atmega649a program/data size = 120 , 0
MCU = atmega649p program/data size = 120 , 0
MCU = atmega64a compile error
MCU = atmega64c1 program/data size = 152 , 0
MCU = atmega64hve program/data size = 128 , 0
MCU = atmega64m1 program/data size = 152 , 0
MCU = atmega64rfa2 compile error
MCU = atmega64rfr2 compile error
MCU = atmega8 program/data size = 66 , 0
MCU = atmega8515 program/data size = 62 , 0
MCU = atmega8535 program/data size = 70 , 0
MCU = atmega88 program/data size = 80 , 0
MCU = atmega88a program/data size = 80 , 0
MCU = atmega88p program/data size = 80 , 0
MCU = atmega88pa program/data size = 80 , 0
MCU = atmega8a compile error
MCU = atmega8hva program/data size = 70 , 0
MCU = atmega8u2 program/data size = 144 , 0
MCU = atmxt112sl compile error
MCU = atmxt224 compile error
MCU = atmxt224e compile error
MCU = atmxt336s compile error
MCU = atmxt540s compile error
MCU = atmxt540sreva compile error
MCU = attiny11 compile error
MCU = attiny12 compile error
MCU = attiny13 program/data size = 44 , 0
MCU = attiny13a compile error
MCU = attiny15 compile error
MCU = attiny1634 compile error
MCU = attiny167 program/data size = 108 , 0
MCU = attiny22 program/data size = 30 , 0
MCU = attiny2313 program/data size = 62 , 0
MCU = attiny2313a compile error
MCU = attiny24 program/data size = 58 , 0
MCU = attiny24a compile error
MCU = attiny25 program/data size = 54 , 0
MCU = attiny26 program/data size = 48 , 0
MCU = attiny261 program/data size = 62 , 0
MCU = attiny261a compile error
MCU = attiny28 compile error
MCU = attiny4313 program/data size = 70 , 0
MCU = attiny43u program/data size = 60 , 0
MCU = attiny44 program/data size = 62 , 0
MCU = attiny44a program/data size = 62 , 0
MCU = attiny45 program/data size = 58 , 0
MCU = attiny461 program/data size = 66 , 0
MCU = attiny461a program/data size = 66 , 0
MCU = attiny48 program/data size = 68 , 0
MCU = attiny84 program/data size = 62 , 0
MCU = attiny84a program/data size = 62 , 0
MCU = attiny85 program/data size = 58 , 0
MCU = attiny861 program/data size = 66 , 0
MCU = attiny861a program/data size = 66 , 0
MCU = attiny87 program/data size = 68 , 0
MCU = attiny88 program/data size = 68 , 0
MCU = atxmega128a1 program/data size = 540 , 0
MCU = atxmega128a1u program/data size = 552 , 0
MCU = atxmega128a3 program/data size = 520 , 0
MCU = atxmega128a3u compile error
MCU = atxmega128a4u compile error
MCU = atxmega128b1 compile error
MCU = atxmega128b3 compile error
MCU = atxmega128c3 compile error
MCU = atxmega128d3 program/data size = 488 , 0
MCU = atxmega128d4 compile error
MCU = atxmega16a4 program/data size = 404 , 0
MCU = atxmega16a4u compile error
MCU = atxmega16c4 compile error
MCU = atxmega16d4 program/data size = 392 , 0
MCU = atxmega16x1 compile error
MCU = atxmega192a3 program/data size = 520 , 0
MCU = atxmega192a3u compile error
MCU = atxmega192c3 compile error
MCU = atxmega192d3 program/data size = 488 , 0
MCU = atxmega256a3 program/data size = 520 , 0
MCU = atxmega256a3b program/data size = 520 , 0
MCU = atxmega256a3bu compile error
MCU = atxmega256a3u compile error
MCU = atxmega256c3 compile error
MCU = atxmega256d3 program/data size = 488 , 0
MCU = atxmega32a4 program/data size = 404 , 0
MCU = atxmega32a4u compile error
MCU = atxmega32c4 compile error
MCU = atxmega32d4 program/data size = 392 , 0
MCU = atxmega32e5 compile error
MCU = atxmega32x1 compile error
MCU = atxmega384c3 compile error
MCU = atxmega384d3 compile error
MCU = atxmega64a1 program/data size = 536 , 0
MCU = atxmega64a1u program/data size = 548 , 0
MCU = atxmega64a3 program/data size = 516 , 0
MCU = atxmega64a3u compile error
MCU = atxmega64a4u compile error
MCU = atxmega64b1 compile error
MCU = atxmega64b3 compile error
MCU = atxmega64c3 compile error
MCU = atxmega64d3 program/data size = 484 , 0
MCU = atxmega64d4 compile error
MCU = avr1 compile error
MCU = avr2 program/data size = 0 , 0
MCU = avr25 program/data size = 0 , 0
MCU = avr3 program/data size = 0 , 0
MCU = avr31 program/data size = 0 , 0
MCU = avr35 program/data size = 0 , 0
MCU = avr4 program/data size = 0 , 0
MCU = avr5 program/data size = 0 , 0
MCU = avr51 program/data size = 0 , 0
MCU = avr6 program/data size = 0 , 0
MCU = avrxmega2 program/data size = 0 , 0
MCU = avrxmega4 compile error
MCU = avrxmega5 program/data size = 0 , 0
MCU = avrxmega6 program/data size = 0 , 0
MCU = avrxmega7 program/data size = 0 , 0
MCU = m3000 program/data size = 26 , 0
#-#

Arduino build tests
===================

.. highlight:: c

Code::

void setup()
{
}

void loop()
{
}

Results:

.. #-- from cogtask import buildcsv; buildcsv() --#
.. #-#

.. csv-table::
:file: docs/generated_build_test.csv
:header-rows: 1


.. _pip: https://pypi.python.org/pypi/pip
.. _arscons: https://github.com/suapapa/arscons
.. _arduino: http://arduino.cc/
.. _python: http://www.python.org/
.. _avr: http://en.wikipedia.org/wiki/Atmel_AVR
.. _scons: http://www.scons.org

.. |Travis| image:: http://img.shields.io/travis/ponty/pyavrutils.svg
:target: https://travis-ci.org/ponty/pyavrutils/
.. |Coveralls| image:: http://img.shields.io/coveralls/ponty/pyavrutils/master.svg
:target: https://coveralls.io/r/ponty/pyavrutils/
.. |Latest Version| image:: https://img.shields.io/pypi/v/pyavrutils.svg
:target: https://pypi.python.org/pypi/pyavrutils/
.. |Supported Python versions| image:: https://img.shields.io/pypi/pyversions/pyavrutils.svg
:target: https://pypi.python.org/pypi/pyavrutils/
.. |License| image:: https://img.shields.io/pypi/l/pyavrutils.svg
:target: https://pypi.python.org/pypi/pyavrutils/
.. |Code Health| image:: https://landscape.io/github/ponty/pyavrutils/master/landscape.svg?style=flat
:target: https://landscape.io/github/ponty/pyavrutils/master
.. |Documentation| image:: https://readthedocs.org/projects/pyavrutils/badge/?version=latest
:target: http://pyavrutils.readthedocs.org

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pyavrutils-0.3.tar.gz (35.6 kB view hashes)

Uploaded Source

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page