{ "info": { "author": "ponty", "author_email": "", "bugtrack_url": null, "classifiers": [ "License :: OSI Approved :: BSD License", "Natural Language :: English", "Operating System :: OS Independent", "Programming Language :: Python", "Programming Language :: Python :: 2", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.3", "Programming Language :: Python :: 3.4", "Programming Language :: Python :: 3.5" ], "description": "pyavrutils is a Python library that can build AVR_ and arduino_ code at runtime.\n\nLinks:\n * home: https://github.com/ponty/pyavrutils\n * documentation: http://pyavrutils.readthedocs.org\n * PYPI: https://pypi.python.org/pypi/pyavrutils\n\n|Travis| |Coveralls| |Latest Version| |Supported Python versions| |License| |Code Health| |Documentation|\n\nFeatures:\n - python wrapper for avr-gcc, avr-size, arscons_\n - build files or strings (strings are saved as temp files)\n - MCU list \n - get code size using avr-size\n - avr-gcc default is optimized for size\n - supported python versions: 2.7, 3.3, 3.4, 3.5\n\nKnown problems:\n - temp files are not removed\n - arscons_ does not perfectly matches the Arduino build process\n \nPossible usage:\n - experimenting with flags\n - unit tests\n - building arduino_ code without GUI\n \nBasic usage\n===========\n\n >>> from pyavrutils import AvrGcc\n >>> cc = AvrGcc()\n >>> cc.build('int main(){}')\n >>> cc.size().program_bytes\n 66\n \n >>> from pyavrutils import Arduino\n >>> cc = Arduino()\n >>> cc.mcu = 'atmega8'\n >>> cc.build('void setup(){};void loop(){}')\n >>> cc.size().program_bytes\n 1612\n\nInstallation\n============\n\nGeneral\n-------\n\n * arscons_ is already included in the library \n * install pip_\n * install gcc-avr\n * install scons_ (only for arscons_)\n * install arduino_ (only for arscons_)\n * install the program:\n\nif you have setuptools_ installed::\n\n # as root\n pip install pyavrutils\n\nUbuntu 14.04\n------------\n::\n\n sudo apt-get install python-pip\n sudo apt-get install binutils-avr gcc-avr scons arduino\n sudo pip install pyavrutils\n # optional for examples:\n sudo pip install entrypoint2\n\nUninstall\n---------\n\nusing pip_::\n\n # as root\n pip uninstall pyavrutils\n\nUsage\n=====\n\nAVR::\n\n #-- sh('python -m pyavrutils.examples.usage_avr ')--#\n >>> from pyavrutils import AvrGcc\n >>> cc = AvrGcc(mcu='atmega48')\n >>> cc.targets\n [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']\n >>> cc.options_generated()\n ['avr-gcc', '-Df_cpu=4000000', '-mmcu=atmega48', '--std=gnu99', '-Wl,--relax', '-Wl,--gc-sections', '-ffunction-sections', '-fdata-sections', '-fno-inline-small-functions', '-Os']\n >>> cc.build('int main(){}')\n >>> cc.output\n /tmp/pyavrutils_MM2AL6.elf\n >>> cc.size()\n AvrSize \n >>> cc.size().program_bytes\n 80\n >>> cc.mcu='atmega168'\n >>> cc.options_generated()\n ['avr-gcc', '-Df_cpu=4000000', '-mmcu=atmega168', '--std=gnu99', '-Wl,--relax', '-Wl,--gc-sections', '-ffunction-sections', '-fdata-sections', '-fno-inline-small-functions', '-Os']\n >>> cc.build('int main(){}')\n >>> cc.output\n /tmp/pyavrutils_MM2AL6.elf\n >>> cc.size().program_bytes\n 132\n #-#\n \n\narduino::\n\n #-- sh('python -m pyavrutils.examples.usage_ard ')--#\n >>> from pyavrutils import Arduino\n >>> cc = Arduino(board='mini')\n >>> cc.build('void setup(){};void loop(){}')\n >>> cc.output\n /tmp/pyavrutils_6rOALC/pyavrutils_yhNZYl/pyavrutils_yhNZYl.elf\n >>> cc.size()\n AvrSize \n >>> cc.size().program_bytes\n 440\n >>> cc.board='pro'\n >>> cc.build('void setup(){};void loop(){}')\n >>> cc.output\n /tmp/pyavrutils_pDz6aH/pyavrutils_pnu8A3/pyavrutils_pnu8A3.elf\n >>> cc.size().program_bytes\n 440\n >>> cc.warnings\n [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]']\n #-#\n\nExamples\n========\n\nSimple example\n--------------\n\nExample program::\n\n #-- include('examples/simple.py')--#\n '''\n test minimum program size with different optimizations\n '''\n\n from pyavrutils import AvrGcc\n from entrypoint2 import entrypoint\n\n cc = AvrGcc()\n code = 'int main(){}'\n\n\n def test():\n print ' compiler option:', ' '.join(cc.options_generated())\n cc.build(code)\n print ' program size =', cc.size().program_bytes\n\n\n @entrypoint\n def main():\n print 'compiler version:', cc.version()\n print 'code:', code\n print\n print 'no optimizations::'\n print\n cc.optimize_no()\n test()\n print\n print 'optimize for size::'\n print\n cc.optimize_for_size()\n test()\n #-#\n\nOutput::\n\n #-- sh('python -m pyavrutils.examples.simple ')--#\n compiler version: 4.8.2\n code: int main(){}\n\n no optimizations::\n\n compiler option: avr-gcc -Df_cpu=4000000 -mmcu=atmega168 --std=gnu99\n program size = 150\n\n optimize for size::\n\n 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\n program size = 132\n #-#\n\nTest size with unused code\n--------------------------\n\nExample program::\n\n #-- include('examples/deadcode.py')--#\n from pyavrutils.avrgcc import AvrGcc\n from entrypoint2 import entrypoint\n\n cc = AvrGcc()\n\n\n def test_option(sources, optimization, gc_sections=0, ffunction_sections=0):\n print 'optimization =', optimization,\n print 'gc_sections =', gc_sections,\n print 'ffunction_sections =', ffunction_sections,\n print\n\n cc.optimization = optimization\n cc.gc_sections = gc_sections\n cc.ffunction_sections = ffunction_sections\n try:\n cc.build(sources)\n size = cc.size()\n print 'program, data =', str(size.program_bytes).rjust(8), ',', str(size.data_bytes).rjust(8)\n except:\n print 'compile error'\n\n\n def test(sources):\n print 'sources:', sources\n test_option(sources, 0)\n test_option(sources, 's', 0)\n test_option(sources, 's', 1)\n test_option(sources, 's', 1, 1)\n\n\n @entrypoint\n def main():\n cc.optimize_no()\n print 'compiler version:', cc.version()\n print 'compiler options:', ' '.join(cc.options_generated())\n print\n print 'minimum size'\n print 20 * '='\n test(['int main(){}'])\n\n print\n print 'unused function in separate file'\n print 40 * '='\n test(['int main(){}', 'int f(){return 2;}'])\n\n print\n print 'unused function in the same file'\n print 40 * '='\n test(['int main(){}; int f(){return 2;}'])\n #-#\n\nOutput::\n\n #-- sh('python -m pyavrutils.examples.deadcode ')--#\n compiler version: 4.8.2\n compiler options: avr-gcc -Df_cpu=4000000 -mmcu=atmega168 --std=gnu99\n\n minimum size\n ====================\n sources: ['int main(){}']\n optimization = 0 gc_sections = 0 ffunction_sections = 0\n program, data = 150 , 0\n optimization = s gc_sections = 0 ffunction_sections = 0\n program, data = 138 , 0\n optimization = s gc_sections = 1 ffunction_sections = 0\n program, data = 138 , 0\n optimization = s gc_sections = 1 ffunction_sections = 1\n program, data = 138 , 0\n\n unused function in separate file\n ========================================\n sources: ['int main(){}', 'int f(){return 2;}']\n optimization = 0 gc_sections = 0 ffunction_sections = 0\n program, data = 168 , 0\n optimization = s gc_sections = 0 ffunction_sections = 0\n program, data = 144 , 0\n optimization = s gc_sections = 1 ffunction_sections = 0\n program, data = 138 , 0\n optimization = s gc_sections = 1 ffunction_sections = 1\n program, data = 138 , 0\n\n unused function in the same file\n ========================================\n sources: ['int main(){}; int f(){return 2;}']\n optimization = 0 gc_sections = 0 ffunction_sections = 0\n program, data = 168 , 0\n optimization = s gc_sections = 0 ffunction_sections = 0\n program, data = 144 , 0\n optimization = s gc_sections = 1 ffunction_sections = 0\n program, data = 138 , 0\n optimization = s gc_sections = 1 ffunction_sections = 1\n program, data = 138 , 0\n #-#\n\n\nTest size with delay.h\n----------------------\n\nExample program::\n\n #-- include('examples/delaysize.py')--#\n from entrypoint2 import entrypoint\n from pyavrutils.avrgcc import AvrGcc, AvrGccCompileError\n\n templ = '''\n #include \n #include \n int main()\n {\n %s;\n return 0;\n }\n '''\n\n cc = AvrGcc()\n cc.optimize_no()\n print 'compiler version:', cc.version()\n print\n\n\n def test(snippet, option=''):\n print snippet.ljust(33),\n cc.options_extra = option.split()\n print 'compiler option:', option, '\\t',\n try:\n cc.build([templ % snippet])\n size = cc.size()\n print 'program, data =', str(size.program_bytes).rjust(8), ',', str(size.data_bytes).rjust(8)\n except AvrGccCompileError as e:\n print 'compile error'\n\n\n @entrypoint\n def main():\n cc.optimization = 0\n\n test('_delay_ms(4)', '-O0')\n test('_delay_ms(4)', '-O1')\n test('_delay_ms(4)', '-O2')\n test('_delay_ms(4)', '-O3')\n test('_delay_ms(4)', '-Os')\n #-#\n\nOutput::\n\n #-- sh('python -m pyavrutils.examples.delaysize ')--#\n compiler version: 4.8.2\n\n _delay_ms(4) compiler option: -O0 \tprogram, data = 938 , 0\n _delay_ms(4) compiler option: -O1 \tprogram, data = 150 , 0\n _delay_ms(4) compiler option: -O2 \tprogram, data = 150 , 0\n _delay_ms(4) compiler option: -O3 \tprogram, data = 150 , 0\n _delay_ms(4) compiler option: -Os \tprogram, data = 150 , 0\n #-#\n \n\nTest size with program space\n----------------------------\n\nExample program::\n\n #-- include('examples/pgmspace.py')--#\n from pyavrutils.avrgcc import AvrGcc\n from entrypoint2 import entrypoint\n\n templ = '''\n #include \n #include \n int main()\n {\n %s;\n return 0;\n }\n '''\n\n cc = AvrGcc()\n cc.optimization = 0\n print 'compiler version:', cc.version()\n print 'compiler options:', ' '.join(cc.options_generated())\n print\n\n\n def test(snippet):\n print snippet, '\\t\\t',\n try:\n cc.build([templ % snippet])\n size = cc.size()\n print 'program, data =', str(size.program_bytes).rjust(8), ',', str(size.data_bytes).rjust(8)\n except:\n print 'compile error'\n\n\n def test_comb(s):\n words = 'static const PROGMEM'.split()\n\n def choice(i):\n return [words[i], ' ' * len(words[i])]\n\n for s0 in choice(0):\n for s1 in choice(1):\n for s2 in choice(2):\n # for s3 in choice(3):\n test('%s %s char s[] %s = \"%s\"' % (s0, s1, s2, s))\n\n\n @entrypoint\n def main():\n test_comb(\"12345\")\n test_comb(\"1234512345\")\n #-#\n\nOutput::\n\n #-- sh('python -m pyavrutils.examples.pgmspace ')--#\n compiler version: 4.8.2\n compiler options: avr-gcc -Df_cpu=4000000 -mmcu=atmega168 --std=gnu99 -Wl,--relax -Wl,--gc-sections -ffunction-sections -fdata-sections -fno-inline-small-functions\n\n static const char s[] PROGMEM = \"12345\" \t\tprogram, data = 144 , 0\n static const char s[] = \"12345\" \t\tprogram, data = 166 , 0\n static char s[] PROGMEM = \"12345\" \t\tcompile error\n static char s[] = \"12345\" \t\tprogram, data = 166 , 0\n const char s[] PROGMEM = \"12345\" \t\tprogram, data = 210 , 6\n const char s[] = \"12345\" \t\tprogram, data = 210 , 6\n char s[] PROGMEM = \"12345\" \t\tprogram, data = 210 , 6\n char s[] = \"12345\" \t\tprogram, data = 210 , 6\n static const char s[] PROGMEM = \"1234512345\" \t\tprogram, data = 144 , 0\n static const char s[] = \"1234512345\" \t\tprogram, data = 166 , 0\n static char s[] PROGMEM = \"1234512345\" \t\tcompile error\n static char s[] = \"1234512345\" \t\tprogram, data = 166 , 0\n const char s[] PROGMEM = \"1234512345\" \t\tprogram, data = 222 , 12\n const char s[] = \"1234512345\" \t\tprogram, data = 222 , 12\n char s[] PROGMEM = \"1234512345\" \t\tprogram, data = 222 , 12\n char s[] = \"1234512345\" \t\tprogram, data = 222 , 12\n #-#\n\nConclusions:\n - constant string should be static or global\n - ``const`` has no effect on size\n - PROGMEM should be used\n\nTest minimum size\n-----------------\n\nExample program::\n\n #-- include('examples/minsize.py')--#\n '''\n test minimum program size with all MCUs\n '''\n\n from entrypoint2 import entrypoint\n from pyavrutils.avrgcc import AvrGcc, AvrGccCompileError\n\n\n def test(cc, mcu):\n print 'MCU =', mcu.ljust(20),\n cc.mcu = mcu\n try:\n cc.build(cc.minprog)\n print ' program/data size =', cc.size().program_bytes, ',', cc.size().data_bytes\n except AvrGccCompileError:\n print ' compile error'\n\n\n @entrypoint\n def main():\n cc = AvrGcc()\n print '--------------'\n print 'avr-gcc'\n print '--------------'\n\n print 'compiler version:', cc.version()\n cc.optimize_for_size()\n print 'compiler options:', ' '.join(cc.options_generated())\n print 'code:', cc.minprog\n print\n for mcu in cc.targets:\n test(cc, mcu)\n #-#\n\nOutput::\n\n #-- sh('python -m pyavrutils.examples.minsize')--#\n --------------\n avr-gcc\n --------------\n compiler version: 4.8.2\n 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\n code: int main(){};\n\n MCU = at43usb320 program/data size = 80 , 0\n MCU = at43usb355 program/data size = 80 , 0\n MCU = at76c711 program/data size = 88 , 0\n MCU = at86rf401 program/data size = 40 , 0\n MCU = at90c8534 program/data size = 42 , 0\n MCU = at90can128 program/data size = 176 , 0\n MCU = at90can32 program/data size = 176 , 0\n MCU = at90can64 program/data size = 176 , 0\n MCU = at90pwm1 program/data size = 92 , 0\n MCU = at90pwm161 compile error\n MCU = at90pwm2 program/data size = 92 , 0\n MCU = at90pwm216 program/data size = 156 , 0\n MCU = at90pwm2b program/data size = 92 , 0\n MCU = at90pwm3 program/data size = 92 , 0\n MCU = at90pwm316 program/data size = 156 , 0\n MCU = at90pwm3b program/data size = 92 , 0\n MCU = at90pwm81 program/data size = 68 , 0\n MCU = at90s1200 compile error\n MCU = at90s2313 program/data size = 46 , 0\n MCU = at90s2323 program/data size = 30 , 0\n MCU = at90s2333 program/data size = 52 , 0\n MCU = at90s2343 program/data size = 30 , 0\n MCU = at90s4414 program/data size = 54 , 0\n MCU = at90s4433 program/data size = 52 , 0\n MCU = at90s4434 program/data size = 62 , 0\n MCU = at90s8515 program/data size = 54 , 0\n MCU = at90s8535 program/data size = 62 , 0\n MCU = at90scr100 program/data size = 180 , 0\n MCU = at90usb1286 program/data size = 180 , 0\n MCU = at90usb1287 program/data size = 180 , 0\n MCU = at90usb162 program/data size = 144 , 0\n MCU = at90usb646 program/data size = 180 , 0\n MCU = at90usb647 program/data size = 180 , 0\n MCU = at90usb82 program/data size = 144 , 0\n MCU = at94k program/data size = 172 , 0\n MCU = ata5272 compile error\n MCU = ata5505 compile error\n MCU = ata5790 compile error\n MCU = ata5790n compile error\n MCU = ata5795 compile error\n MCU = ata6285 compile error\n MCU = ata6286 compile error\n MCU = ata6289 program/data size = 82 , 0\n MCU = atmega103 program/data size = 124 , 0\n MCU = atmega128 program/data size = 168 , 0\n MCU = atmega1280 program/data size = 256 , 0\n MCU = atmega1281 program/data size = 232 , 0\n MCU = atmega1284 compile error\n MCU = atmega1284p program/data size = 168 , 0\n MCU = atmega128a compile error\n MCU = atmega128rfa1 program/data size = 316 , 0\n MCU = atmega16 program/data size = 112 , 0\n MCU = atmega161 program/data size = 112 , 0\n MCU = atmega162 program/data size = 140 , 0\n MCU = atmega163 program/data size = 100 , 0\n MCU = atmega164a program/data size = 152 , 0\n MCU = atmega164p program/data size = 152 , 0\n MCU = atmega164pa compile error\n MCU = atmega165 program/data size = 116 , 0\n MCU = atmega165a program/data size = 116 , 0\n MCU = atmega165p program/data size = 116 , 0\n MCU = atmega165pa compile error\n MCU = atmega168 program/data size = 132 , 0\n MCU = atmega168a program/data size = 132 , 0\n MCU = atmega168p program/data size = 132 , 0\n MCU = atmega168pa compile error\n MCU = atmega169 program/data size = 120 , 0\n MCU = atmega169a program/data size = 120 , 0\n MCU = atmega169p program/data size = 120 , 0\n MCU = atmega169pa program/data size = 120 , 0\n MCU = atmega16a program/data size = 112 , 0\n MCU = atmega16hva program/data size = 112 , 0\n MCU = atmega16hva2 program/data size = 116 , 0\n MCU = atmega16hvb program/data size = 144 , 0\n MCU = atmega16hvbrevb program/data size = 144 , 0\n MCU = atmega16m1 program/data size = 152 , 0\n MCU = atmega16u2 program/data size = 144 , 0\n MCU = atmega16u4 program/data size = 200 , 0\n MCU = atmega2560 program/data size = 260 , 0\n MCU = atmega2561 program/data size = 236 , 0\n MCU = atmega26hvg compile error\n MCU = atmega32 program/data size = 112 , 0\n MCU = atmega323 program/data size = 108 , 0\n MCU = atmega324a program/data size = 152 , 0\n MCU = atmega324p program/data size = 152 , 0\n MCU = atmega324pa program/data size = 152 , 0\n MCU = atmega325 program/data size = 120 , 0\n MCU = atmega3250 program/data size = 128 , 0\n MCU = atmega3250a program/data size = 128 , 0\n MCU = atmega3250p program/data size = 128 , 0\n MCU = atmega3250pa compile error\n MCU = atmega325a program/data size = 120 , 0\n MCU = atmega325p program/data size = 120 , 0\n MCU = atmega328 program/data size = 132 , 0\n MCU = atmega328p program/data size = 132 , 0\n MCU = atmega329 program/data size = 120 , 0\n MCU = atmega3290 program/data size = 128 , 0\n MCU = atmega3290a program/data size = 128 , 0\n MCU = atmega3290p program/data size = 128 , 0\n MCU = atmega3290pa compile error\n MCU = atmega329a program/data size = 120 , 0\n MCU = atmega329p program/data size = 120 , 0\n MCU = atmega329pa program/data size = 120 , 0\n MCU = atmega32a compile error\n MCU = atmega32c1 program/data size = 152 , 0\n MCU = atmega32hvb program/data size = 144 , 0\n MCU = atmega32hvbrevb program/data size = 144 , 0\n MCU = atmega32m1 program/data size = 152 , 0\n MCU = atmega32u2 program/data size = 144 , 0\n MCU = atmega32u4 program/data size = 200 , 0\n MCU = atmega32u6 program/data size = 180 , 0\n MCU = atmega406 program/data size = 120 , 0\n MCU = atmega48 program/data size = 80 , 0\n MCU = atmega48a program/data size = 80 , 0\n MCU = atmega48hvf compile error\n MCU = atmega48p program/data size = 80 , 0\n MCU = atmega48pa compile error\n MCU = atmega64 program/data size = 168 , 0\n MCU = atmega640 program/data size = 256 , 0\n MCU = atmega644 program/data size = 140 , 0\n MCU = atmega644a program/data size = 152 , 0\n MCU = atmega644p program/data size = 152 , 0\n MCU = atmega644pa program/data size = 152 , 0\n MCU = atmega645 program/data size = 120 , 0\n MCU = atmega6450 program/data size = 128 , 0\n MCU = atmega6450a program/data size = 128 , 0\n MCU = atmega6450p program/data size = 128 , 0\n MCU = atmega645a program/data size = 120 , 0\n MCU = atmega645p program/data size = 120 , 0\n MCU = atmega649 program/data size = 120 , 0\n MCU = atmega6490 program/data size = 128 , 0\n MCU = atmega6490a program/data size = 128 , 0\n MCU = atmega6490p program/data size = 128 , 0\n MCU = atmega649a program/data size = 120 , 0\n MCU = atmega649p program/data size = 120 , 0\n MCU = atmega64a compile error\n MCU = atmega64c1 program/data size = 152 , 0\n MCU = atmega64hve program/data size = 128 , 0\n MCU = atmega64m1 program/data size = 152 , 0\n MCU = atmega64rfa2 compile error\n MCU = atmega64rfr2 compile error\n MCU = atmega8 program/data size = 66 , 0\n MCU = atmega8515 program/data size = 62 , 0\n MCU = atmega8535 program/data size = 70 , 0\n MCU = atmega88 program/data size = 80 , 0\n MCU = atmega88a program/data size = 80 , 0\n MCU = atmega88p program/data size = 80 , 0\n MCU = atmega88pa program/data size = 80 , 0\n MCU = atmega8a compile error\n MCU = atmega8hva program/data size = 70 , 0\n MCU = atmega8u2 program/data size = 144 , 0\n MCU = atmxt112sl compile error\n MCU = atmxt224 compile error\n MCU = atmxt224e compile error\n MCU = atmxt336s compile error\n MCU = atmxt540s compile error\n MCU = atmxt540sreva compile error\n MCU = attiny11 compile error\n MCU = attiny12 compile error\n MCU = attiny13 program/data size = 44 , 0\n MCU = attiny13a compile error\n MCU = attiny15 compile error\n MCU = attiny1634 compile error\n MCU = attiny167 program/data size = 108 , 0\n MCU = attiny22 program/data size = 30 , 0\n MCU = attiny2313 program/data size = 62 , 0\n MCU = attiny2313a compile error\n MCU = attiny24 program/data size = 58 , 0\n MCU = attiny24a compile error\n MCU = attiny25 program/data size = 54 , 0\n MCU = attiny26 program/data size = 48 , 0\n MCU = attiny261 program/data size = 62 , 0\n MCU = attiny261a compile error\n MCU = attiny28 compile error\n MCU = attiny4313 program/data size = 70 , 0\n MCU = attiny43u program/data size = 60 , 0\n MCU = attiny44 program/data size = 62 , 0\n MCU = attiny44a program/data size = 62 , 0\n MCU = attiny45 program/data size = 58 , 0\n MCU = attiny461 program/data size = 66 , 0\n MCU = attiny461a program/data size = 66 , 0\n MCU = attiny48 program/data size = 68 , 0\n MCU = attiny84 program/data size = 62 , 0\n MCU = attiny84a program/data size = 62 , 0\n MCU = attiny85 program/data size = 58 , 0\n MCU = attiny861 program/data size = 66 , 0\n MCU = attiny861a program/data size = 66 , 0\n MCU = attiny87 program/data size = 68 , 0\n MCU = attiny88 program/data size = 68 , 0\n MCU = atxmega128a1 program/data size = 540 , 0\n MCU = atxmega128a1u program/data size = 552 , 0\n MCU = atxmega128a3 program/data size = 520 , 0\n MCU = atxmega128a3u compile error\n MCU = atxmega128a4u compile error\n MCU = atxmega128b1 compile error\n MCU = atxmega128b3 compile error\n MCU = atxmega128c3 compile error\n MCU = atxmega128d3 program/data size = 488 , 0\n MCU = atxmega128d4 compile error\n MCU = atxmega16a4 program/data size = 404 , 0\n MCU = atxmega16a4u compile error\n MCU = atxmega16c4 compile error\n MCU = atxmega16d4 program/data size = 392 , 0\n MCU = atxmega16x1 compile error\n MCU = atxmega192a3 program/data size = 520 , 0\n MCU = atxmega192a3u compile error\n MCU = atxmega192c3 compile error\n MCU = atxmega192d3 program/data size = 488 , 0\n MCU = atxmega256a3 program/data size = 520 , 0\n MCU = atxmega256a3b program/data size = 520 , 0\n MCU = atxmega256a3bu compile error\n MCU = atxmega256a3u compile error\n MCU = atxmega256c3 compile error\n MCU = atxmega256d3 program/data size = 488 , 0\n MCU = atxmega32a4 program/data size = 404 , 0\n MCU = atxmega32a4u compile error\n MCU = atxmega32c4 compile error\n MCU = atxmega32d4 program/data size = 392 , 0\n MCU = atxmega32e5 compile error\n MCU = atxmega32x1 compile error\n MCU = atxmega384c3 compile error\n MCU = atxmega384d3 compile error\n MCU = atxmega64a1 program/data size = 536 , 0\n MCU = atxmega64a1u program/data size = 548 , 0\n MCU = atxmega64a3 program/data size = 516 , 0\n MCU = atxmega64a3u compile error\n MCU = atxmega64a4u compile error\n MCU = atxmega64b1 compile error\n MCU = atxmega64b3 compile error\n MCU = atxmega64c3 compile error\n MCU = atxmega64d3 program/data size = 484 , 0\n MCU = atxmega64d4 compile error\n MCU = avr1 compile error\n MCU = avr2 program/data size = 0 , 0\n MCU = avr25 program/data size = 0 , 0\n MCU = avr3 program/data size = 0 , 0\n MCU = avr31 program/data size = 0 , 0\n MCU = avr35 program/data size = 0 , 0\n MCU = avr4 program/data size = 0 , 0\n MCU = avr5 program/data size = 0 , 0\n MCU = avr51 program/data size = 0 , 0\n MCU = avr6 program/data size = 0 , 0\n MCU = avrxmega2 program/data size = 0 , 0\n MCU = avrxmega4 compile error\n MCU = avrxmega5 program/data size = 0 , 0\n MCU = avrxmega6 program/data size = 0 , 0\n MCU = avrxmega7 program/data size = 0 , 0\n MCU = m3000 program/data size = 26 , 0\n #-#\n\nArduino build tests\n===================\n\n.. highlight:: c\n\nCode::\n\n void setup()\n {\n }\n \n void loop()\n {\n }\n\nResults:\n\n.. #-- from cogtask import buildcsv; buildcsv() --#\n.. #-#\n\n.. csv-table::\n :file: docs/generated_build_test.csv\n :header-rows: 1\n\n \n.. _pip: https://pypi.python.org/pypi/pip\n.. _arscons: https://github.com/suapapa/arscons\n.. _arduino: http://arduino.cc/\n.. _python: http://www.python.org/\n.. _avr: http://en.wikipedia.org/wiki/Atmel_AVR\n.. _scons: http://www.scons.org\n\n.. |Travis| image:: http://img.shields.io/travis/ponty/pyavrutils.svg\n :target: https://travis-ci.org/ponty/pyavrutils/\n.. |Coveralls| image:: http://img.shields.io/coveralls/ponty/pyavrutils/master.svg\n :target: https://coveralls.io/r/ponty/pyavrutils/\n.. |Latest Version| image:: https://img.shields.io/pypi/v/pyavrutils.svg\n :target: https://pypi.python.org/pypi/pyavrutils/\n.. |Supported Python versions| image:: https://img.shields.io/pypi/pyversions/pyavrutils.svg\n :target: https://pypi.python.org/pypi/pyavrutils/\n.. |License| image:: https://img.shields.io/pypi/l/pyavrutils.svg\n :target: https://pypi.python.org/pypi/pyavrutils/\n.. |Code Health| image:: https://landscape.io/github/ponty/pyavrutils/master/landscape.svg?style=flat\n :target: https://landscape.io/github/ponty/pyavrutils/master\n.. |Documentation| image:: https://readthedocs.org/projects/pyavrutils/badge/?version=latest\n :target: http://pyavrutils.readthedocs.org\n", "description_content_type": null, "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/ponty/pyavrutils", "keywords": "avr", "license": "BSD", "maintainer": "", "maintainer_email": "", "name": "pyavrutils", "package_url": "https://pypi.org/project/pyavrutils/", "platform": "", "project_url": "https://pypi.org/project/pyavrutils/", "project_urls": { "Homepage": "https://github.com/ponty/pyavrutils" }, "release_url": "https://pypi.org/project/pyavrutils/0.3/", "requires_dist": null, "requires_python": "", "summary": "pyavrutils is a Python library that can build AVR_ and arduino_ code at runtime.", "version": "0.3" }, "last_serial": 2808579, "releases": { "0.0.0": [ { "comment_text": "", "digests": { "md5": "0429284ba699e858eae3980f356331c2", "sha256": "da3da04c7c286c92a6f6bb58c733db805e6d9f3f2b28135002fcfa7bc5db8c94" }, "downloads": -1, "filename": "pyavrutils-0.0.0.tar.gz", "has_sig": false, "md5_digest": "0429284ba699e858eae3980f356331c2", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 32731, "upload_time": "2011-07-26T21:58:09", "url": "https://files.pythonhosted.org/packages/85/cc/f665e91f738835130c73016471b79336de40a41e9c5b9fa0fddedd683dcc/pyavrutils-0.0.0.tar.gz" } ], "0.0.1": [ { "comment_text": "", "digests": { "md5": "27243d1dfa8922edba100d5a443e5f16", "sha256": "a59e39c079386005bf294e081d75e44df5b441b24fdf452c13da2772731dde40" }, "downloads": -1, "filename": "pyavrutils-0.0.1.tar.gz", "has_sig": false, "md5_digest": "27243d1dfa8922edba100d5a443e5f16", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 33359, "upload_time": "2011-07-30T22:46:30", "url": "https://files.pythonhosted.org/packages/b9/69/9eb2cd04bc8101f2e3164f59fbef79c6560ea6a69609610881bfe03ec7a9/pyavrutils-0.0.1.tar.gz" } ], "0.0.2": [ { "comment_text": "", "digests": { "md5": "2ba79accfcc0a63ae936afc728a58803", "sha256": "77ae8b65d93e7bc6372f1c496c3c7e8230dcb345fe79e278b1b04ddc9139c50a" }, "downloads": -1, "filename": "pyavrutils-0.0.2.tar.gz", "has_sig": false, "md5_digest": "2ba79accfcc0a63ae936afc728a58803", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 34160, "upload_time": "2011-08-22T21:46:28", "url": "https://files.pythonhosted.org/packages/44/2e/898bf6c11ead6e68df5ea52dfd21eed0a2e7c462bf2ca3894b42ccd35f13/pyavrutils-0.0.2.tar.gz" } ], "0.0.3": [ { "comment_text": "", "digests": { "md5": "d69a362afba698d831cd98927eb57ba2", "sha256": "7dcecc1b854b8189b6a0be57b80af5c315ce6090522f8ec17b27e395817837c4" }, "downloads": -1, "filename": "pyavrutils-0.0.3.tar.gz", "has_sig": false, "md5_digest": "d69a362afba698d831cd98927eb57ba2", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 34311, "upload_time": "2011-11-13T16:52:23", "url": "https://files.pythonhosted.org/packages/76/db/59670ac5ce0e92c8379a37ee328ec2c6aaa1ef04e60688cb9647dced8b66/pyavrutils-0.0.3.tar.gz" } ], "0.0.4": [ { "comment_text": "", "digests": { "md5": "a6c531770354bf2d9a231f4906c70c3c", "sha256": "7d9a7b91e283485476b46010ce706c15afa14b38517367dc4c2c8f666d8e9bd5" }, "downloads": -1, "filename": "pyavrutils-0.0.4.tar.gz", "has_sig": false, "md5_digest": "a6c531770354bf2d9a231f4906c70c3c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 34293, "upload_time": "2011-11-17T19:43:42", "url": "https://files.pythonhosted.org/packages/43/4c/7805e32b3139b0abf0c7991968daf6379147b1e6cb9918db18fc06abeb33/pyavrutils-0.0.4.tar.gz" } ], "0.0.6": [ { "comment_text": "", "digests": { "md5": "1b23a770bd411b1e9b13d89a6b3c1b58", "sha256": "8922bdd85ec44091f2b82113683d6b03f9426237eccd6f02abbfefea4bbd3613" }, "downloads": -1, "filename": "pyavrutils-0.0.6.tar.gz", "has_sig": false, "md5_digest": "1b23a770bd411b1e9b13d89a6b3c1b58", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 37842, "upload_time": "2011-11-18T17:16:38", "url": "https://files.pythonhosted.org/packages/e5/c1/3ab49563593f7ecb1bfa2e2845fa2370eca2c0d8ee95480b6c5a4b55cf6a/pyavrutils-0.0.6.tar.gz" } ], "0.0.7": [ { "comment_text": "", "digests": { "md5": "c5c953070b32c74400877af1a7925473", "sha256": "e3e190442279ddea41638e1f0c067fd4567eddc4f1fb9c319ccdafc7c8ce82a4" }, "downloads": -1, "filename": "pyavrutils-0.0.7.tar.gz", "has_sig": false, "md5_digest": "c5c953070b32c74400877af1a7925473", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 39903, "upload_time": "2012-02-07T18:06:50", "url": "https://files.pythonhosted.org/packages/1c/07/2022bfac7b8f3a036cce3890db80703dfb779a98af2dd7b3e131372cad8b/pyavrutils-0.0.7.tar.gz" } ], "0.1.0": [ { "comment_text": "", "digests": { "md5": "ce80b0ba6bcc257914c792270d0c995e", "sha256": "ffd5a5d055961e14a82db7b7d7f1b9437b0dd4ffba2f60dfb45dd01618610ae7" }, "downloads": -1, "filename": "pyavrutils-0.1.0.tar.gz", "has_sig": false, "md5_digest": "ce80b0ba6bcc257914c792270d0c995e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 16978, "upload_time": "2012-03-11T15:18:04", "url": "https://files.pythonhosted.org/packages/a7/fa/aaa5b9272c1aa53cf25ce5c6077aa5a6921c6cba75b2c12301dfb5886307/pyavrutils-0.1.0.tar.gz" } ], "0.1.1": [ { "comment_text": "", "digests": { "md5": "c0e2f70f55e1ef40ababe13ed31b76bf", "sha256": "3fecfcbc9141e1245da8378f8067e24b0fef92201ac5c35c468bae6cb62cdbb8" }, "downloads": -1, "filename": "pyavrutils-0.1.1.tar.gz", "has_sig": false, "md5_digest": "c0e2f70f55e1ef40ababe13ed31b76bf", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 16513, "upload_time": "2012-12-02T21:55:52", "url": "https://files.pythonhosted.org/packages/77/fa/52527f0de7038f2a933222eb6df9c7ffd828d026e23fa274968ef1bf9326/pyavrutils-0.1.1.tar.gz" } ], "0.1.2": [ { "comment_text": "", "digests": { "md5": "78f2d588f6493bfa10880b9522d2e6be", "sha256": "a5569441402510b7a6aa697996e80abfce6b0084eacc2831af1ccf56f189a4e1" }, "downloads": -1, "filename": "pyavrutils-0.1.2.tar.gz", "has_sig": false, "md5_digest": "78f2d588f6493bfa10880b9522d2e6be", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 18891, "upload_time": "2013-02-10T10:16:19", "url": "https://files.pythonhosted.org/packages/a4/8b/77b06cf603461a782dbd3798930c63a949a624eb0bfab95eafad763200e8/pyavrutils-0.1.2.tar.gz" } ], "0.2": [ { "comment_text": "", "digests": { "md5": "3bc4cffdcf70977faa7762c3d7ad21f1", "sha256": "aa1d03dace6190f278fb88d90f273af47f9991f4549ee71922fad9739426ae31" }, "downloads": -1, "filename": "pyavrutils-0.2.tar.gz", "has_sig": false, "md5_digest": "3bc4cffdcf70977faa7762c3d7ad21f1", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 35650, "upload_time": "2015-10-30T10:14:38", "url": "https://files.pythonhosted.org/packages/ef/14/7f16e3c975fe65dc55ebc7e8eb6710c2f9d83914658a0947f4209c2cb86f/pyavrutils-0.2.tar.gz" } ], "0.3": [ { "comment_text": "", "digests": { "md5": "bcbaa97e635b94d45fe040816a49357e", "sha256": "4a037a9c44b6b4b777a859e5ae5b12ea84920ae39b0575d59a1f65ecec287211" }, "downloads": -1, "filename": "pyavrutils-0.3.tar.gz", "has_sig": false, "md5_digest": "bcbaa97e635b94d45fe040816a49357e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 35627, "upload_time": "2017-04-17T12:54:19", "url": "https://files.pythonhosted.org/packages/4f/be/77c776c227374e735e97832460c66df752f6ed518d9417f3f979a618fa23/pyavrutils-0.3.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "bcbaa97e635b94d45fe040816a49357e", "sha256": "4a037a9c44b6b4b777a859e5ae5b12ea84920ae39b0575d59a1f65ecec287211" }, "downloads": -1, "filename": "pyavrutils-0.3.tar.gz", "has_sig": false, "md5_digest": "bcbaa97e635b94d45fe040816a49357e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 35627, "upload_time": "2017-04-17T12:54:19", "url": "https://files.pythonhosted.org/packages/4f/be/77c776c227374e735e97832460c66df752f6ed518d9417f3f979a618fa23/pyavrutils-0.3.tar.gz" } ] }