예제 #1
0
def parse_svd(svds_directory, family, cpu):
    """
    Parse the SVD files (if available) and return the peripherals.

    The data is returned from cache if available, to speedup the parsing
    process.
    """

    if not svds_directory:
        return []

    svd_file = os.path.join(svds_directory, family.upper(),
                            "%s.svd" % (cpu.upper()))
    cache_key = hashlib.md5(svd_file.encode("ascii")).hexdigest()
    cache_file = os.path.join("cache", cache_key)

    if not os.path.isfile(svd_file):
        return []

    if not os.path.isfile(cache_file):
        device = SVDParser.for_xml_file(svd_file).get_device()

        with open(cache_file, "w") as fp:
            json.dump(
                [peripheral.to_dict() for peripheral in device.peripherals],
                fp)

    with open(cache_file, "r") as fp:
        return json.load(fp)
예제 #2
0
파일: data.py 프로젝트: Jegeva/idarm
    def core_data_from_svd(self, core_svd_datapath, segment_size, core):
        if core == None:
            for f in sorted(glob.glob(os.path.join(core_svd_datapath,
                                                   '*.svd'))):
                c = f.split(os.path.sep)[-1][:-4]
                if (c.lower().find("cortex-") == 0):
                    c = c[7:]
                if (c.lower().find("CM") == 0):
                    c = c[1:]
                print(f, "\t", c)
                self.data_top_hash["cores"][c] = {}
                self.data_top_hash["cores"][c]["file"] = f
                self.data_top_hash["cores"][c]["dirty"] = True
        else:
            f = os.path.join(core_svd_datapath, core) + ".svd"
            if (core.lower().find("cortex-") > -1):
                core = core[7:]

            self.data_top_hash["cores"][core] = {}
            self.data_top_hash["cores"][core]["file"] = f
            self.data_top_hash["cores"][core]["dirty"] = True

        for c in self.data_top_hash["cores"].keys():
            #print("---------->",core_svd_datapath ,c + '.svd')
            self.parse_chip_svd(
                self.data_top_hash["cores"][c],
                SVDParser.for_xml_file(self.data_top_hash["cores"][c]["file"]))
예제 #3
0
 def monitor(self, arg):
     if not self.svd_device:
         try:
             from cmsis_svd.parser import SVDParser
             if os.path.isfile(SvdRegisters.FILE):
                 with open(SvdRegisters.FILE, 'r') as f:
                     lines = [l.strip() for l in f.readlines()]
                     parser = SVDParser.for_xml_file(lines[0])
                     self.svd_device = parser.get_device()
         except:
             raise Exception(
                 "Cannot open or parse SVD file. Check 'cmsis_svd' library installed"
             )
     if self.svd_device and arg:
         args = arg.split()
         name = args[0]
         if name not in self.table:
             r = self.find_register(name)
             if r:
                 r.alias = args[1] if len(args) > 1 else "_"
                 with open(SvdRegisters.FILE, "a") as f:
                     f.write(str(r) + "\n")
             else:
                 raise Exception("Register {} not found".format(name))
         else:
             raise Exception("Register {} already exists".format(name))
예제 #4
0
파일: parse_core.py 프로젝트: Jegeva/idarm
 def parse_cores(self, core_svd_datapath):
     self.core_files = sorted(
         glob.glob(os.path.join(core_svd_datapath, '*.svd')))
     self.cores = {}
     pp = pprint.PrettyPrinter(indent=4)
     for c in self.core_files:
         self.parse_core(c, SVDParser.for_xml_file(c))
예제 #5
0
def main(unused_argv):
    del unused_argv

    svd_path = os.path.abspath(FLAGS.svd_path)
    if FLAGS.svd_yaml_patch:
        patch_path = os.path.abspath(FLAGS.svd_yaml_patch)
        with open(patch_path, "r") as f:
            root = yaml.safe_load(f)
            root["_path"] = patch_path
        svd = ET.parse(svd_path)
        svdtools.patch.yaml_includes(root)
        svdtools.patch.process_device(svd, root)
        _, svd_path = tempfile.mkstemp()
        svd.write(svd_path)

    parser = SVDParser.for_xml_file(svd_path)
    peripheral = None
    for p in parser.get_device().peripherals:
        if p.name.lower() == FLAGS.peripheral.lower():
            peripheral = p
            break

    formatter = Formatter(FLAGS.output_path)
    Biffile(formatter).write_peripheral(peripheral)
    formatter.finish()

    if FLAGS.verify:
        verify(FLAGS.output_path, peripheral)
예제 #6
0
 def verify_cmsis_output(self, filename):
     filepath = 'test/sampleData/cmsis-svd/' + filename + '.svd'
     print('Parsing ' + filepath)
     parser = SVDParser.for_xml_file(filepath)
     self.assertEqual(
         filename,
         parser.get_device().peripherals[0].name,
         msg="{0} is not the provided name in the CMSIS SVD file")
예제 #7
0
파일: SVDView.py 프로젝트: zzwuyu/JSVDView
    def on_cmbSVD_currentIndexChanged(self, path):
        if not os.path.exists(path): return

        self.device = SVDParser.for_xml_file(path).get_device()

        self.cmbPeriph.clear()
        self.cmbPeriph.addItems(
            sorted([periph.name for periph in self.device.peripherals]))
예제 #8
0
파일: svd.py 프로젝트: 0xc0170/pyOCD
    def load(self):
        if not isCmsisSvdAvailable:
            return

        if self.is_local:
            self.device = SVDParser.for_xml_file(self.filename).get_device()
        else:
            self.device = SVDParser.for_packaged_svd(self.vendor, self.filename).get_device()
예제 #9
0
    def load(self):
        if not isCmsisSvdAvailable:
            return

        if self.is_local:
            self.device = SVDParser.for_xml_file(self.filename).get_device()
        else:
            self.device = SVDParser.for_packaged_svd(self.vendor, self.filename).get_device()
예제 #10
0
def LPC43xxTarget(device):
    """ Factory function that creates a low-level LPC43xx target. """

    from .. import find_greatfet_asset

    svd_file = find_greatfet_asset('LPC43xx_43Sxx.svd')
    svd = SVDParser.for_xml_file(svd_file)

    return VirtualLPC43xxTarget.from_svd(svd.get_device(), device)
예제 #11
0
    def load(self):
        if not IS_CMSIS_SVD_AVAILABLE:
            return

        if self.is_local:
            self.device = SVDParser.for_xml_file(self.filename).get_device()
        else:
            self.device = SVDParser.for_packaged_svd(
                self.vendor, self.filename).get_device()
예제 #12
0
    def invoke(self, args, from_tty):
        args = gdb.string_to_argv(args)
        argc = len(args)
        if argc == 1:
            gdb.write("Loading SVD file {}...\n".format(args[0]))
            parser = SVDParser.for_xml_file(svd_file)
        elif argc == 2:
            gdb.write("Loading SVD file {}/{}...\n".format(args[0], args[1]))
            parser = SVDParser.for_packaged_svd(vendor, device)

        self.dont_repeat()
예제 #13
0
    def invoke(self, arg, from_tty):
        args = gdb.string_to_argv(arg)
        if len(args) != 1:
            raise gdb.GdbError("Usage: svd_load_file <filename.svd>")

        path = args[0]
        try:
            parser = SVDParser.for_xml_file(path)
            _svd_printer.set_device(parser.get_device())
        except IOError:
            raise gdb.GdbError("Failed to load SVD file")
        else:
            print("Loaded {}".format(path))
예제 #14
0
파일: mkproject.py 프로젝트: patxitron/cmxx
def main():
	parser = argparse.ArgumentParser(description = 'Generate C++ project from CMSIS SVD XML file')
	parser.add_argument('input', metavar='inputsvd', nargs=1, help='Input SVD file to generate BSP from')
	parser.add_argument('project', metavar='project', nargs=1, help='Path to output project')
	args = parser.parse_args()

	if args.input:
		file = args.input[0]

	if args.project:
		if os.path.exists(args.project[0]):
			print("Path exists, exiting!")
			exit(-1)
		else:
			os.mkdir(args.project[0])
			os.mkdir(os.path.join(args.project[0], "inc"))
			os.mkdir(os.path.join(args.project[0], "src"))

	name = getProjName(args.project[0])

	parser = SVDParser.for_xml_file(file)
	dev = parser.get_device()
	outfile = dev.name+".h"

	f=open(os.path.join(args.project[0], "inc", outfile), "w+")
	f.write("#pragma once\r\n")
	f.write("#include <cstdint>\r\n")
	f.write("#include <reg.h>\r\n")
	f.write("\r\nnamespace %s {\r\n" % dev.name)

	DeviceStartup(dev, args.project[0])

	for peripheral in dev.peripherals:
		p = PeripheralNamespace(peripheral)
		p.dump(f)
	f.write("};\r\n")
	f.close()
	shutil.copyfile("reg.h.template", os.path.join(os.path.join(args.project[0], "inc"),'reg.h'))
	shutil.copyfile("load_target.sh.template", os.path.join(args.project[0],'load_target.sh'))
	shutil.copyfile("target.cfg.template", os.path.join(args.project[0],'target.cfg'))
	shutil.copyfile("linker.template", os.path.join(args.project[0],'linker.ld'))

	subst_target('runme.gdb.template', os.path.join(args.project[0],'runme.gdb'), getProjName(args.project[0]))
	subst_target('Makefile.template', os.path.join(args.project[0],'Makefile'), getProjName(args.project[0]))

	targetMain = open(os.path.join(args.project[0],getProjName(args.project[0])+".cpp"), "w+")
	targetMain.write("int main(void)\r\n{\r\n    while(1);\r\n}\r\n");
	targetMain.close()
예제 #15
0
    def invoke(self, arg, from_tty):
        args = gdb.string_to_argv(arg)
        if len(args) != 1:
            raise gdb.GdbError("Usage: svd_load_file <filename.svd>")

        path = args[0]
        try:
            parser = SVDParser.for_xml_file(path)
            _svd_printer.set_device(parser.get_device())

        except IOError:
            raise gdb.GdbError("Failed to load SVD file")
        else:
            print("Loaded {}".format(path))

            for peripheral in _svd_printer.device.peripherals:
                print("%s @ 0x%08x" %
                      (peripheral.name, peripheral.base_address))
예제 #16
0
    def __init__(self, path):
        parser = [periph for periph in SVDParser.for_xml_file(path).get_device().peripherals]

        # Read peripherals and their registers
        self.device = []
        for periph in parser:
            self.device += [{"type": "periph",
                             "name": periph.name,
                             "description": periph.description,
                             "base_address": periph.base_address,
                             "group_name": periph.group_name,
                             "regs": periph.derived_from}]  # regs value will be replaced with regs list
            if (self.device[-1]["regs"] is not None):
                    self.device[-1]["regs"] = next(periph for periph in self.device if periph["name"] == self.device[-1]["regs"])["regs"].copy()
            else:
                self.device[-1]["regs"] = []
                for reg in periph.registers:
                    self.device[-1]["regs"] += [{"type": "reg",
                                                 "name": reg.name,
                                                 "description": reg.description,
                                                 "address_offset": reg.address_offset,
                                                 "fields": []}]
                    for field in reg.fields:
                        self.device[-1]["regs"][-1]["fields"] += [{"type": "field",
                                                                   "name": field.name,
                                                                   "description": field.description,
                                                                   "address_offset": reg.address_offset,
                                                                   "lsb": field.bit_offset,
                                                                   "msb": field.bit_offset + field.bit_width - 1,
                                                                   "access": field.access,
                                                                   "enums": None}]
                        if field.enumerated_values:
                            self.device[-1]["regs"][-1]["fields"][-1]["enums"] = []
                            for enum in field.enumerated_values:
                                self.device[-1]["regs"][-1]["fields"][-1]["enums"] += [{"name": enum.name,
                                                                                        "description": enum.description,
                                                                                        "value": enum.value}]

        self.device = sorted(self.device, key=itemgetter('base_address'))
예제 #17
0
    def invoke(self, arg, from_tty):
        try:
            argv = gdb.string_to_argv(arg)
            if len(argv) != 1:
                raise Exception("Invalide parameter")

            pathfile = argv[0]
            gdb.write("Svd Loading {} ".format(pathfile))
            parser = SVDParser.for_xml_file(pathfile)
            device = parser.get_device()
            peripherals = dict((peripheral.name, peripheral)
                               for peripheral in device.peripherals)
            GdbSvdGetCmd(device, peripherals)
            GdbSvdSetCmd(device, peripherals)
            GdbSvdInfoCmd(device, peripherals)

        except Exception as inst:
            gdb.write("\n{}\n".format(inst))
            gdb.execute("help svd")
        except IOError:
            gdb.write("\nFailed to load SVD file\n")
        else:
            gdb.write("Done\n")
예제 #18
0
 def verify_svd_validity():
     parser = SVDParser.for_xml_file(svd_path)
     device = parser.get_device()
     assert device is not None
예제 #19
0
        print('Usage: .!r2svd [mcu] [svd]')
        sys.exit(1)
    sys.exit(0)


def filter_name(n):
    n = n.replace(' ', '')
    n = n.replace('/', '')
    n = n.replace('(', '')
    n = n.replace(')', '')
    return n


svdfile = sys.argv[1]
if os.path.isfile(svdfile):
    parser = SVDParser.for_xml_file(svdfile)
else:
    mcu = sys.argv[1]  # Freescale
    svd = sys.argv[2]  # MK20D7.svd
    parser = SVDParser.for_packaged_svd(mcu, svd)

svd_dict = parser.get_device().to_dict()
for p in svd_dict['peripherals']:
    addr = p['base_address']
    try:
        size = p['address_block']['size'] / 8
    except:
        size = 4
    name = filter_name(p['name'])
    print("\"CC %s @ 0x%x\"" % (p['description'], addr))
    print("f %s %d 0x%x" % (name, size, addr))
예제 #20
0
                if width < 8:
                    print(f"{register.name}::{name}, w:{width}, off:{offset}")
                    if width == 1:
                        v = 1 << offset
                        code += f"{name} = {v:#010x},"
                    else:
                        values = [i for i in range(1, 2**width)]
                        pprint.pprint(values)
                        for val in values:
                            v = val << offset
                            code += f"{name}_{val:0{width}b} = {v:#010x},"
            code += "};\n"
    return code


parser = SVDParser.for_xml_file("STM32F412.svd")
device = parser.get_device()
peripherals = device.peripherals

for periph in peripherals:
    print(periph.name)
    outfile = open(f"./out/{periph.name}.h", "a")
    h_file_template = open("header_periph_template.txt", "r").read()
    template_data = {
        "name": periph.name,
        "size": get_periph_size(periph),
        "register_definitions": generate_register_definition(periph),
        "enum_definitions": generate_enum_definitions(periph),
    }
    a = Template(h_file_template).substitute(template_data)
    outfile.write(a)
예제 #21
0
파일: svd.py 프로젝트: radu7/pyOCD
 def load(self):
     if self.is_local:
         self.device = SVDParser.for_xml_file(self.filename).get_device()
     else:
         self.device = SVDParser.for_packaged_svd(self.vendor, self.filename).get_device()
예제 #22
0
def run():
    parser = argparse.ArgumentParser(description='CMSIS Code Generator')
    parser.add_argument('-i',
                        '--input',
                        metavar='FILE',
                        help="CMSIS SVD file to parse",
                        type=str,
                        dest='svd_file',
                        required=True)
    parser.add_argument('-t',
                        '--templates',
                        metavar='FILE',
                        help="Jinja Template Directory",
                        type=str,
                        dest='template_dir')
    parser.add_argument('-o',
                        '--output',
                        metavar='PATH',
                        help="Output Directory",
                        type=str,
                        default='./output',
                        dest='output_dir')
    parser.add_argument('--force-bool',
                        help="Force one-bit fields to bool type",
                        action='store_true')

    #argv = parser.parse_args(['-i', 'apollo3.svd', '-o', './test_output'])
    argv = parser.parse_args()

    # use default template directory if none is provided
    if not argv.template_dir:
        argv.template_dir = os.path.join(
            os.path.dirname(os.path.abspath(__file__)), 'cpp17_templates')

    device = SVDParser.for_xml_file(argv.svd_file).get_device()

    # create output directory if it doesn't exist
    Path(argv.output_dir).mkdir(exist_ok=True, parents=True)

    # set jinja search path to the template directory
    templateLoader = jinja2.FileSystemLoader(searchpath=argv.template_dir)
    templateEnv = jinja2.Environment(loader=templateLoader)

    # create device file if template exists
    if os.path.exists(os.path.join(argv.template_dir, 'device.hpp.in')):
        with open(os.path.join(argv.output_dir, 'device.hpp'), 'w') as ofile:
            t = templateEnv.get_template('device.hpp.in')
            code = t.render(device=device)
            ofile.write(code)
            ofile.close()

    # create peripheral headers if a tempalte exists
    if os.path.exists(os.path.join(argv.template_dir, 'peripheral.hpp.in')):
        t = templateEnv.get_template('peripheral.hpp.in')

        for peripheral in device.peripherals:
            ofile_name = f"{peripheral.name}.hpp"
            with open(os.path.join(argv.output_dir, ofile_name), 'w') as ofile:
                device_meta = {
                    'name': device.name,
                    'vendor': device.vendor,
                    'version': device.version
                }
                code = t.render(peripheral=peripheral,
                                device_meta=device_meta,
                                force_bools=True)
                ofile.write(code)
                ofile.close()

    return 0
예제 #23
0
파일: svd.py 프로젝트: mofosyne/openocd-svd
 def parse_path(self, path):
     self.__fill_device([periph for periph in SVDParser.for_xml_file(path).get_device().peripherals])
예제 #24
0
from cmsis_svd.parser import SVDParser
import argparse
import sys
import os
import csv

parser = argparse.ArgumentParser(
    description="Generate a chipfinder signature from an SVD file.")
parser.add_argument("svd_file", help="SVD file to load")
parser.add_argument("signature_file", help="Signature file to write")
args = parser.parse_args()

print(args)
print("Loading SVD file...")
parser = SVDParser.for_xml_file(str(args.svd_file))
print("\tDone!")

peripherals = parser.get_device().peripherals

rows = 0
print("Writing signature file...")
with open(args.signature_file, "w") as csvfile:
    w = csv.writer(csvfile,
                   delimiter=',',
                   quotechar='"',
                   quoting=csv.QUOTE_MINIMAL)
    for peripheral in peripherals:
        try:
            for register in peripheral.registers:
                w.writerow([peripheral.base_address + register.address_offset])
예제 #25
0
 def verify_svd_validity():
     parser = SVDParser.for_xml_file(svd_path)
     device = parser.get_device()
     assert device is not None
예제 #26
0
def main():  
    arg_parser = argparse.ArgumentParser()
    arg_parser.add_argument('input_file', help = 'input SVD file')
    arg_parser.add_argument('-p', metavar =  'PERIPHERAL', help = 'generate code only for specified peripheral')
    arg_parser.add_argument('-o', help = 'overwrite existing enumerations header files', action = 'store_true')
    args = arg_parser.parse_args()
    
    parser = SVDParser.for_xml_file(args.input_file)
    device = process_device(parser.get_device())

    device_name = camel_case(device.name)

    if (not os.path.isdir(device_name)):
        os.mkdir(device_name)
        
    if (not os.path.isdir('{}\FieldValues'.format(device_name))):
        os.mkdir('{}\FieldValues'.format(device_name))
        
    if (args.p != None):
        peripherals = [x for x in device.peripherals if x.name.lower() == args.p.lower()]
    else:
        peripherals = device.peripherals

    for peripheral in peripherals:
        peripheral_name = peripheral.name.lower().replace('_', '')
        reg_file_name = '{}registers.hpp'.format(peripheral_name)
        enum_file_name = '{}fieldvalues.hpp'.format(peripheral_name)
        enum_file_full_name = '{}\FieldValues\{}'.format(device_name, enum_file_name)
    
        with open('{}\{}'.format(device_name, reg_file_name), 'w') as registers_file:
            if (peripheral.description != None):
                per_description = '{}. This header file is auto-generated for {} device.'.format(
                    peripheral.description.rstrip('. '),
                    device.name)
            else:
                per_description = 'This header file is auto-generated for {} device.'.format(device.name)
            
            registers_file.write(create_file_description(reg_file_name, per_description))
                
            reg_guard = '{}REGISTERS_HPP'.format(peripheral_name.upper())
            registers_file.write('\n')
            registers_file.write('#if !defined({})\n'.format(reg_guard))
            registers_file.write('#define {}\n'.format(reg_guard))
            registers_file.write('\n')
            registers_file.write('#include "{}"  //for Bits Fields defs \n'.format(enum_file_name))
            registers_file.write('#include "registerbase.hpp"   //for RegisterBase\n')
            registers_file.write('#include "register.hpp"       //for Register\n')
            registers_file.write('#include "accessmode.hpp"     //for ReadMode, WriteMode, ReadWriteMode  \n')
            registers_file.write('\n')
            
            if((args.o) or (not os.path.isfile(enum_file_full_name))):
                with open(enum_file_full_name, 'w') as enumerations_file:
                    enumerations_file.write(create_file_description(
                        enum_file_name,
                        'Enumerations related with {} peripheral. This header file is auto-generated for {} device.'.format(
                            peripheral.name,
                            device.name)))
                        
                    enum_guard = '{}ENUMS_HPP'.format(peripheral_name.upper())
                    enumerations_file.write('\n')
                    enumerations_file.write('#if !defined({})\n'.format(enum_guard))
                    enumerations_file.write('#define {}\n'.format(enum_guard))
                    enumerations_file.write('\n')
                    enumerations_file.write('#include "fieldvalue.hpp"     //for FieldValues \n')
                    enumerations_file.write('\n')
                
                    generate_peripheral(peripheral, registers_file, enumerations_file)
                    
                    enumerations_file.write('#endif //#if !defined({})\n'.format(enum_guard))
            else:
                generate_peripheral(peripheral, registers_file)
                
            registers_file.write('#endif //#if !defined({})\n'.format(reg_guard))
예제 #27
0
 def setUp(self):
     svd = os.path.join(DATA_DIR, "Freescale", "MKL25Z4.xml")
     self.parser = SVDParser.for_xml_file(svd)
예제 #28
0
            return reduce_memory_regions(regions)
    return regions


def calculate_peripheral_size(peripheral, default_register_size):
    size = 0
    for register in peripheral.registers:
        register_size = default_register_size if not register._size else register._size
        size = max(size, register.address_offset + register_size / 8)
    return size


svd_file = askFile("Choose SVD file", "Load SVD File")

print("Loading SVD file...")
parser = SVDParser.for_xml_file(str(svd_file))
print("\tDone!")

# CM0, CM4, etc
cpu_type = parser.get_device().cpu.name
# little/big
cpu_endian = parser.get_device().cpu.endian

default_register_size = parser.get_device().size

# Not all SVDs contain these fields
#if cpu_type and not cpu_type.startswith("CM"):
#	print("Currently only Cortex-M CPUs are supported.")
#	print("Supplied CPU type was: " + cpu_type)
#	sys.exit(1)
예제 #29
0
#!/usr/bin/env python
from cmsis_svd.parser import SVDParser

v850_6bit_msb_gone = lambda addr: hex(addr & 0x3fffffff)

parser = SVDParser.for_xml_file("v850-datasheet2svd.svd")
for peripheral in parser.get_device().peripherals:
    #    print("%s @ 0x%08x" % (peripheral.name, peripheral.base_address))
    print("%s\t@\t%s" %
          (peripheral.name, v850_6bit_msb_gone(peripheral.base_address)))
    # print(dir(parser._parse_registers(peripheral)))
    # for register in parser.get_device().registers:
    #     print(register.name)
예제 #30
0
def parse_svd(svd_file):
    svd = SVDParser.for_xml_file(svd_file)
    xml = minidom.parse(svd_file)
    return parse_device(svd.get_device(), xml)
예제 #31
0
 def setUpClass(cls):
     svd = os.path.join(DATA_DIR, "Nordic", "nrf51.svd")
     cls.parser = SVDParser.for_xml_file(svd)
     cls.device = cls.parser.get_device()
예제 #32
0
 def setUpClass(cls):
     svd = os.path.join(DATA_DIR, "Nordic", "nrf51.svd")
     cls.parser = SVDParser.for_xml_file(svd)
     cls.device = cls.parser.get_device()
예제 #33
0
 def setUpClass(cls):
     cls.svd_path = os.path.join(DATA_DIR, "Freescale", "MKL25Z4.svd")
     cls.json_path = os.path.join(THIS_DIR, "MKL25Z4.json")
     cls.parser = SVDParser.for_xml_file(cls.svd_path)
     cls.device = cls.parser.get_device()
예제 #34
0
 def setUpClass(cls):
     cls.svd_path = os.path.join(DATA_DIR, "Freescale", "MKL25Z4.svd")
     cls.json_path = os.path.join(THIS_DIR, "MKL25Z4.json")
     cls.parser = SVDParser.for_xml_file(cls.svd_path)
     cls.device = cls.parser.get_device()
예제 #35
0
 def setUp(self):
     svd = os.path.join(DATA_DIR, "Freescale", "MKL25Z4.svd")
     self.parser = SVDParser.for_xml_file(svd)