def __init__(self, snippet=None, mcu='atmega48', f_cpu=16000000, extra_lib=None, timespan=0.1, vcd=None, template=None, code=None, serial_in=None, serial_char_logger=None, serial_line_logger=None, fps=None, speed=1, external_elf=None): self.cc = Arduino(mcu=mcu, f_cpu=f_cpu, extra_lib=extra_lib) if template: self.template = template else: self.template = TEMPLATE self.snippet = snippet self.code = code self.timespan = timespan # 10ms self.vcd = vcd self.serial = '' self.serial_in = serial_in self.serial_char_logger = serial_char_logger self.serial_line_logger = serial_line_logger self.fps = fps self.speed = speed self.external_elf = external_elf
def test_build(self): tdir = tmpdir() try: f = self.feature scfg = ( ZERO_CFG + """ #undef %s #define %s 1 """ % (f, f) ) (root / "Nanpy").copytree(tdir / "Nanpy") ino = tdir / "Nanpy" / "Nanpy.ino" cfg = tdir / "Nanpy" / "cfg.h" cfg.write_text(scfg) cc = Arduino(mcu=self.mcu) print cc.mcu, ino cc.build(ino) ok_(cc.size().ok) finally: tdir.rmtree()
def main(): cc = Arduino() # print 'compiler version:', cc.version() print 'code:', cc.minprog print for mcu in targets(): cc = Arduino(mcu=mcu) test(cc)
def test(): cc = Arduino() cc.build(cc.minprog) size = cc.size() assert size.program_bytes > 0 assert size.program_percentage > 0 assert size.data_bytes > 0 assert size.data_percentage > 0
def __init__(self, snippet=None, mcu='atmega48', f_cpu=16000000, extra_lib=None, timespan=0.1, vcd=None, template=None, code=None, serial_in=None, serial_char_logger=None, serial_line_logger=None, fps=None, speed=1, external_elf=None ): self.cc = Arduino(mcu=mcu, f_cpu=f_cpu, extra_lib=extra_lib) if template: self.template = template else: self.template = TEMPLATE self.snippet = snippet self.code = code self.timespan = timespan # 10ms self.vcd = vcd self.serial = '' self.serial_in = serial_in self.serial_char_logger = serial_char_logger self.serial_line_logger = serial_line_logger self.fps = fps self.speed = speed self.external_elf = external_elf
def warnings( filename, board='pro', hwpack='arduino', mcu='', f_cpu='', extra_lib='', ver='', # home='auto', backend='arscons', ): ''' build Arduino sketch and display results ''' cc = Arduino( board=board, hwpack=hwpack, mcu=mcu, f_cpu=f_cpu, extra_lib=extra_lib, ver=ver, # home=home, backend=backend, ) cc.build(filename) print 'backend:', cc.backend print 'MCU:', cc.mcu_compiler() # print 'avr-gcc:', AvrGcc().version() print print('=============================================') print('SIZE') print('=============================================') print 'program:', cc.size().program_bytes print 'data:', cc.size().data_bytes core_warnings = [x for x in cc.warnings if 'gcc' in x ] + [x for x in cc.warnings if 'core' in x] lib_warnings = [x for x in cc.warnings if 'lib_' in x] notsketch_warnings = core_warnings + lib_warnings sketch_warnings = [x for x in cc.warnings if x not in notsketch_warnings] print print('=============================================') print('WARNINGS') print('=============================================') print print('core') print('-------------------') print('\n'.join(core_warnings)) print print('lib') print('-------------------') print('\n'.join(lib_warnings)) print print('sketch') print('-------------------') print('\n'.join(sketch_warnings))
def test_build(self): tdir = tmpdir() try: f = self.feature scfg = '#define %s 1' % f (root / 'Nanpy').copytree(tdir / 'Nanpy') ino = tdir / 'Nanpy' / 'Nanpy.ino' cfg = tdir / 'Nanpy' / 'cfg.h' cfg.write_text(scfg) cc = Arduino(mcu=self.mcu) print cc.mcu, ino cc.build(ino) ok_(cc.size().ok) finally: tdir.rmtree()
def test_build(self): tdir = tmpdir() try: p = self.project (ROOT / p).copytree(tdir / p) ino = first((tdir / p).files('*.ino')) if not ino: ino = first((tdir / p).files('*.pde')) assert ino cc = Arduino(mcu=self.mcu) print cc.mcu, ino cc.build(ino) ok_(cc.size().ok) finally: tdir.rmtree()
def simple_targets(): mcus = [ 'atmega8', 'atmega48', 'atmega168', 'atmega328p', 'atmega640', 'atmega1280', 'atmega2560', ] return [Arduino(mcu=x) for x in mcus]
def warnings(filename, board='pro', hwpack='arduino', mcu='', f_cpu='', extra_lib='', ver='', # home='auto', backend='arscons', ): ''' build Arduino sketch and display results ''' cc = Arduino( board=board, hwpack=hwpack, mcu=mcu, f_cpu=f_cpu, extra_lib=extra_lib, ver=ver, # home=home, backend=backend, ) cc.build(filename) print 'backend:', cc.backend print 'MCU:', cc.mcu_compiler() # print 'avr-gcc:', AvrGcc().version() print print('=============================================') print('SIZE') print('=============================================') print 'program:', cc.size().program_bytes print 'data:', cc.size().data_bytes core_warnings = [x for x in cc.warnings if 'gcc' in x] + [ x for x in cc.warnings if 'core' in x] lib_warnings = [x for x in cc.warnings if 'lib_' in x] notsketch_warnings = core_warnings + lib_warnings sketch_warnings = [x for x in cc.warnings if x not in notsketch_warnings] print print('=============================================') print('WARNINGS') print('=============================================') print print('core') print('-------------------') print('\n'.join(core_warnings)) print print('lib') print('-------------------') print('\n'.join(lib_warnings)) print print('sketch') print('-------------------') print('\n'.join(sketch_warnings))
def __init__(self, snippet=None, mcu='atmega328', f_cpu=16000000, extra_lib=None, timespan=0.01, vcd=None, template=None, code=None, ): self.cc = Arduino(mcu=mcu, f_cpu=f_cpu, extra_lib=extra_lib) if template: self.template = template else: self.template = TEMPLATE self.snippet = snippet self.code = code self.timespan = timespan # 10ms self.vcd = vcd self.serial = ''
def test_targets(): boards = 'lilypad mega2560 mega'.split() # for ver in ARDUINO_VERSIONS: # set_arduino_home(ver) if 1: for b in boards: cc = Arduino( board=b, # home=h, ) try: cc.build(Path(__file__).parent / 'min.pde') print( ' program size = %s' % cc.size().program_bytes ) cc.build(cc.minprog) print( ' program size = %s' % cc.size().program_bytes ) except ArduinoCompileError as e: print( ' compile error: %s' % cc.error_text.splitlines() ) raise e
class ArduinoSim(object): '''arduino code builder and simulator for serial testing''' def __init__(self, snippet=None, mcu='atmega328', f_cpu=16000000, extra_lib=None, timespan=0.01, vcd=None, template=None, code=None, ): self.cc = Arduino(mcu=mcu, f_cpu=f_cpu, extra_lib=extra_lib) if template: self.template = template else: self.template = TEMPLATE self.snippet = snippet self.code = code self.timespan = timespan # 10ms self.vcd = vcd self.serial = '' @property def mcu(self): return self.cc.mcu @mcu.setter def mcu(self, value): self.cc.mcu = value def build(self): code = self.code if not code: code = self.template.replace('snippet', self.snippet) log.debug('code=%s' % code) self.cc.build(code) def simulate(self): elf = self.cc.output # run firmware = Firmware(elf) avr = Avr(mcu=self.cc.mcu, f_cpu=self.cc.f_cpu) avr.load_firmware(firmware) udpReader = UdpReader() udp = Udp(avr) udp.connect() udpReader.start() simvcd = None if self.vcd: simvcd = VcdFile(avr, period=1000, filename=self.vcd) connect_pins_by_rule(''' avr.D0 ==> vcd avr.D1 ==> vcd avr.D2 ==> vcd avr.D3 ==> vcd avr.D4 ==> vcd avr.D5 ==> vcd avr.D6 ==> vcd avr.D7 ==> vcd avr.B0 ==> vcd avr.B1 ==> vcd avr.B2 ==> vcd avr.B3 ==> vcd avr.B4 ==> vcd avr.B5 ==> vcd ''', dict( avr=avr, ), vcd=simvcd, ) simvcd.start() avr.move_time_marker(self.timespan) while avr.time_passed() < self.timespan * 0.99: time.sleep(0.05) if simvcd: simvcd.terminate() udpReader.terminate() log.debug('cycles=%s' % avr.cycle) log.debug('mcu time=%s' % avr.time_passed()) # time.sleep(1) self.serial = udpReader.read() def run(self): self.build() self.simulate() def get_serial(self): self.run() return self.serial def size(self): self.build() return self.cc.size()
class ArduinoSim(object): '''arduino code builder and simulator for serial testing''' def __init__(self, snippet=None, mcu='atmega48', f_cpu=16000000, extra_lib=None, timespan=0.1, vcd=None, template=None, code=None, serial_in=None, serial_char_logger=None, serial_line_logger=None, fps=None, speed=1, external_elf=None ): self.cc = Arduino(mcu=mcu, f_cpu=f_cpu, extra_lib=extra_lib) if template: self.template = template else: self.template = TEMPLATE self.snippet = snippet self.code = code self.timespan = timespan # 10ms self.vcd = vcd self.serial = '' self.serial_in = serial_in self.serial_char_logger = serial_char_logger self.serial_line_logger = serial_line_logger self.fps = fps self.speed = speed self.external_elf = external_elf @property def mcu(self): return self.cc.mcu @mcu.setter def mcu(self, value): self.cc.mcu = value def build(self): code = self.code if not self.external_elf: if not code: code = self.template.replace('snippet', self.snippet) log.debug('code=%s' % code) self.cc.build(code) def simulate(self): if not self.external_elf: elf = self.cc.output else: elf = self.external_elf # run firmware = Firmware(elf) avr = Avr(mcu=self.cc.mcu, f_cpu=self.cc.f_cpu) avr.uart.char_logger = self.serial_char_logger avr.uart.line_logger = self.serial_line_logger avr.load_firmware(firmware) # udpReader = UdpReader() # udp = Udp(avr) # udp.connect() # udpReader.start() simvcd = None if self.vcd: simvcd = VcdFile(avr, period=1000, filename=self.vcd) connect_pins_by_rule(''' avr.D0 ==> vcd avr.D1 ==> vcd avr.D2 ==> vcd avr.D3 ==> vcd avr.D4 ==> vcd avr.D5 ==> vcd avr.D6 ==> vcd avr.D7 ==> vcd avr.B0 ==> vcd avr.B1 ==> vcd avr.B2 ==> vcd avr.B3 ==> vcd avr.B4 ==> vcd avr.B5 ==> vcd ''', dict( avr=avr, ), vcd=simvcd, ) simvcd.start() # not working # if self.serial_in: # avr.uart.send_string(self.serial_in) if self.fps: dt_real = 1. / self.fps dt_mcu = dt_real * self.speed count = int(self.timespan * self.fps / self.speed) for _ in range(count): time.sleep(dt_real) avr.goto_time(self.timespan) while avr.time_passed() < self.timespan * 0.99: time.sleep(0.05) if simvcd: simvcd.terminate() # udpReader.terminate() log.debug('cycles=%s' % avr.cycle) log.debug('mcu time=%s' % avr.time_passed()) # time.sleep(1) self.serial_data = avr.uart.buffer self.serial = ''.join(self.serial_data) avr.terminate() def run(self): if not self.external_elf: self.build() self.simulate() def get_serial(self): self.run() return self.serial def size(self): self.build() return self.cc.size()
def check_build(ex, hwpack, board): cc = Arduino(hwpack=hwpack, board=board) # cc.extra_lib = root print cc.hwpack, cc.board, ex cc.build(ex) assert cc.size().ok
def check_build(ex, mcu): cc = Arduino(mcu=mcu) # cc.extra_lib = root print cc.mcu, ex cc.build(ex) assert cc.size().ok
class ArduinoSim(object): '''arduino code builder and simulator for serial testing''' def __init__(self, snippet=None, mcu='atmega48', f_cpu=16000000, extra_lib=None, timespan=0.1, vcd=None, template=None, code=None, serial_in=None, serial_char_logger=None, serial_line_logger=None, fps=None, speed=1, external_elf=None): self.cc = Arduino(mcu=mcu, f_cpu=f_cpu, extra_lib=extra_lib) if template: self.template = template else: self.template = TEMPLATE self.snippet = snippet self.code = code self.timespan = timespan # 10ms self.vcd = vcd self.serial = '' self.serial_in = serial_in self.serial_char_logger = serial_char_logger self.serial_line_logger = serial_line_logger self.fps = fps self.speed = speed self.external_elf = external_elf @property def mcu(self): return self.cc.mcu @mcu.setter def mcu(self, value): self.cc.mcu = value def build(self): code = self.code if not self.external_elf: if not code: code = self.template.replace('snippet', self.snippet) log.debug('code=%s' % code) self.cc.build(code) def simulate(self): if not self.external_elf: elf = self.cc.output else: elf = self.external_elf # run firmware = Firmware(elf) avr = Avr(mcu=self.cc.mcu, f_cpu=self.cc.f_cpu) avr.uart.char_logger = self.serial_char_logger avr.uart.line_logger = self.serial_line_logger avr.load_firmware(firmware) # udpReader = UdpReader() # udp = Udp(avr) # udp.connect() # udpReader.start() simvcd = None if self.vcd: simvcd = VcdFile(avr, period=1000, filename=self.vcd) connect_pins_by_rule( ''' avr.D0 ==> vcd avr.D1 ==> vcd avr.D2 ==> vcd avr.D3 ==> vcd avr.D4 ==> vcd avr.D5 ==> vcd avr.D6 ==> vcd avr.D7 ==> vcd avr.B0 ==> vcd avr.B1 ==> vcd avr.B2 ==> vcd avr.B3 ==> vcd avr.B4 ==> vcd avr.B5 ==> vcd ''', dict(avr=avr, ), vcd=simvcd, ) simvcd.start() # not working # if self.serial_in: # avr.uart.send_string(self.serial_in) if self.fps: dt_real = 1. / self.fps dt_mcu = dt_real * self.speed count = int(self.timespan * self.fps / self.speed) for _ in range(count): time.sleep(dt_real) avr.goto_time(self.timespan) while avr.time_passed() < self.timespan * 0.99: time.sleep(0.05) if simvcd: simvcd.terminate() # udpReader.terminate() log.debug('cycles=%s' % avr.cycle) log.debug('mcu time=%s' % avr.time_passed()) # time.sleep(1) self.serial_data = avr.uart.buffer self.serial = ''.join(self.serial_data) avr.terminate() def run(self): if not self.external_elf: self.build() self.simulate() def get_serial(self): self.run() return self.serial def size(self): self.build() return self.cc.size()