5 releases

0.1.0 Apr 18, 2021
0.0.4 Apr 7, 2021
0.0.3 Aug 20, 2020
0.0.2 Jul 22, 2020
0.0.1 Jul 21, 2020

#1156 in Embedded development

MIT/Apache

155KB
648 lines

Crates.io Docs Actions Status grcov

patch-svd is a library that reads and patches SVD files from microcontroller manufacturers.

The motivation of this library is to get rid of errors in SVD files of individual microcontrollers that are shipped by the corresponding manufacturers.

Technically, this library performs three steps:

  1. Read SVD-files
  2. patch the loaded SVD informations with a generic patch in YAML-format
  3. Transfer the patched SVD informations into a dedicated structure that can be used in other crates

The syntax of the patch file format is documented in the crate patch-xml.

How to use patch-svd

Currently, patch-svd will require the unstable Rust toolchain because the external_doc-feature is used. The current state of this feature depends on this pull request.

let svd = r#"
    <device>
        <schemaVersion>1.0.0</schemaVersion>
        <name>ucName</name>
        <version>1.0.0</version>
        <description>Some description</description>
        <cpu>
            <name>CM0</name>
            <revision>r4</revision>
            <endian>little</endian>
            <mpuPresent>true</mpuPresent>
            <fpuPresent>true</fpuPresent>
            <nvicPrioBits>8</nvicPrioBits>
            <vendorSystickConfig>true</vendorSystickConfig>
        </cpu>
        <addressUnitBits>32</addressUnitBits>
        <width>32</width>
        <peripherals>
            <peripheral>
                <name>PeripheralName</name>
                <baseAddress>77</baseAddress>
            </peripheral>
        </peripherals>
    </device>
    "#;
let patch = r#"
    device:
        $modify:
            description: "Some other description"
    "#;
// Load SVD content, patch it and return it as Device structure
let result : patch_svd::output::Device = 
    patch_svd::get_patched_svd(svd.to_string(), patch.to_string()).unwrap();

Dependencies

~5–6.5MB
~126K SLoC