All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog and this project adheres to Semantic Versioning.
v0.36.0 - 2025-03-09
- Generic
Periph<RB, A> - use
ConstZero::ZEROinstead ofDefault::default()to force const - Add
mtvec_alignfield toriscv_configto configure the byte alignment of interrupt vector table. - Fix reexport path when "%s" inside "derivedFrom"
- Force using rust edition 2021 in CI
- Added lifetime ellision for
FieldWriterwhere the explicit lifetimes are not necessary, which fixes theclippy::needless_lifetimeswarning on rustc 1.84 - Some fixes for the
svd2rust-regresstool and update of its documentation - Other internal clippy fixes for
clippy::manual_div_ceil,clippy::nonminimal_boolandclippy::needless_lifetimes - Add missing
escape_special_charsfor peripheral description - Update
svd-rsto 0.14.11 - Added
#![cfg_attr(docsrs, feature(doc_auto_cfg))]to the generated library code. This adds a display of the feature gates in the documentation of the generated library - Split on the start of attribute instead of the end
v0.35.0 - 2024-11-12
- Add
crate_pathsetting - Inline
SettingsintoConfig, addsettings_file - Fix MSP430 PAC inner attribute generation when used with the
-mswitch.
v0.34.0 - 2024-11-05
- Revert #711
- Add
defmtimpls forTryFromInterruptError, riscv interrupt enums - Fix calculating
modifiedWriteValuesbitmasks with field arrays - Fix building without
yamlfeature - Compatibility with
riscv0.12 andriscv-rt0.13 - Add
riscv_configsection insettings.yamlIt usesriscv-pactraits and standardriscv-peripheralperipherals. - Add
settings.yamlfile for target-specific settings. - Add warning about indexing register arrays
- Skip generating
.add(0)and1 *in accessors - Bump MSRV of generated code to 1.76
- move
must_usefrom methods to generic type - breaking change Return raw writtened value
- Add
from_write,from_write_with_zero, andfrom_modifyregister modifiers with generic return value InterruptNumberis no longer implemented for Xtensa peripheral interrupts
v0.33.5 - 2024-10-12
- Fix STM32-patched CI
- Fix
enumeratedValueswithisDefaultonly - Fix invalid
Puncterror fromproc_macro2 - Run espressif tests on nightly-2024-09-25 to workaround CI failures
v0.33.4 - 2024-06-16
- Add
html-urloption to accesssvdtools htmlfiles from docs - Move
Regin separate file - Use
warningclass in docs - Refactor
Accessor
v0.33.3 - 2024-05-10
- Yet more clean field & register
Debug
v0.33.2 - 2024-05-07
- Remove unneeded
format_argsin registerDebugimpl
v0.33.1 - 2024-04-20
- Add checked
setfor not full safe fields
v0.33.0 - 2024-03-26
- Add
IsEnumconstraint forFieldWriters (fixvariantsafety) - Make field writer
bitsalwaysunsafe, addsetfor safe writing - Fix bit writer type for
ModifiedWriteValues::ZeroToSet
v0.32.0 - 2024-02-26
- Bump MSRV to 1.74
- generic unsafe
W::bits+ safeW::set - Add
base-address-shiftconfig flag - Use
PascalCasefor type idents, fix case changing bugs, add--ident-format(-f) option flag - Add
enum_read_nameforread-onlyenums,RWEnumhelper - Reexport enums inside register again
- Add
DimSuffixhelper trait
v0.31.5 - 2024-01-04
moveinRegisterBlock::reg_iterimplementation (iterator of register/cluster array)- Fix
cargo docconstants generation
v0.31.4 - 2024-01-03
- Custom prefix/case/suffix for identifiers (by
svd2rust.tomlconfig file)
v0.31.3 - 2023-12-25
- Add
svd::Devicevalidation after parsing byserde - Add
skip-crate-attributesconfig flag - Better display parsing errors
moveinR::field_iterimplementation (iterator of field array values)
v0.31.2 - 2023-11-29
- Add iterators for register/cluster/field arrays
- Use parentheses instead of square brackets in docs for field arrays
v0.31.1 - 2023-11-27
- Fix cluster arrays
- Remove needless reference in
ArrayElemAccessor
v0.31.0 - 2023-11-24
- Use methods to access any register or cluster
- Remove all deny lints from generated crate
- Add
reexport-core-peripheralsandreexport-interruptfeatures disabled by default - remove
ArrayProxyandconst_genericfeature FieldWritertakes offset as struct field instead of const generic. Improves SVD field array access Addwidth,offsetmethods- breaking change Always numerates field arrays from 0
- Support of default value for
EnumeratedValues - move
Configtoconfigmodule - add
impl-defmtconfig flag - Use dash instead of underscore in flag names
v0.30.3 - 2023-11-19
- Remove unstable lints
- Mark
Vectorunion asrepr(C) - Support
dimArrayIndexfor array names and descriptions
v0.30.2 - 2023-10-22
- Fix documentation warnings
- Use
ArrayProxyfor memory disjoined register arrays - Use
const fnwhere allowed
v0.30.1 - 2023-10-01
- Fix clippy lints on
nightly - Bump MSRV to 1.70
- Fix
derivedFromon field
v0.30.0 - 2023-08-16
- Add
aarch64target for releases, more readme badges - Fix when
atomicsfeatures is generated but not enabled - move hidden structs into module, add register reader/writer links into
SPECdocs (#736) - removed register writer & reader wrappers, generic
REGin field writers (#731) - Updated syn to version 2 (#732)
- Let readable field fetch doc from svd description (#734)
- Add
steal()for each peripheral
v0.29.0 - 2023-06-05
FieldFpecinstead orftygeneric (#722)- print error on ci
curlrequest fail (#725) - removed
rtygeneric inFieldWriter(#721) boolandu8as default generics forBitReader/WriterandFieldReader/Writer(#720)- Bump MSRV to 1.65 (#711)
- Optimize case change/sanitize (#715)
- Fix dangling implicit derives (#703)
- Fix escaping <> and & characters in doc attributes (#711)
- Add
interrupt_link_sectionconfig parameter for controlling the#[link_section = "..."]attribute of__INTERRUPTS(#718) - Add option to implement Debug for readable registers (#716)
- Add
atomics-feature(#729)
v0.28.0 - 2022-12-25
- Generate atomic register code for non-MSP430 targets
- Change --nightly flag to --atomics
- Add handling for disjoint register arrays and validation of derives
v0.27.2 - 2022-11-06
- mark alternate register accessors with
const, bumppacMSRV to 1.61 fieldsfn refactoring- Test patched STM32
- simplify ci strategy
- Fix generated code for MSP430 atomics
v0.27.1 - 2022-10-25
- Fix cli error with --help/version
- Don't cast fields with width 17-31 and non-zero offset.
v0.27.0 - 2022-10-24
- Manually inline set/clear_bit
- Don't cast fields with width 17-31
- Make
generic.rsgeneric - [breaking-change] Change initial write value for registers with modifiedWriteValues
- Update
clapto 4.0, useirx-configinstead ofclap_conf - Add #[must_use] to prevent hanging field writers
- Remove explicit deref in
generic.rssince it's done by auto-deref - [breaking-change] Make writing raw bits to a whole register safe if the SVD indicates so through the element (see v0.7.1 too).
- Remove lint #![deny(const_err)] as it is a hard error in Rust now
- Add doc of using
critical-section
v0.26.0 - 2022-10-07
- Use edition 2021
- Fix adding ending reserved field when
max_cluster_sizeoption enabled - Add
Eqautoimplementation for enums - Use
critical_section::withinstead ofinterrupt::freeforPeripherals::take. - Bring documentation on how to generate MSP430 PACs up to date (in line with msp430_svd).
- Prefix submodule path with self:: when reexporting submodules to avoid ambiguity in crate path.
v0.25.1 - 2022-08-22
- Fixed parentheses in RegisterBlock field accessors
- Check cluster size, add
max_cluster_sizeoption
v0.25.0 - 2022-08-02
- Add
feature_peripheraloption which generates cfg features for each peripheral - Use register aliases in
RegisterBlock(both structure and mod) - Create aliases for derived registers & clusters
- Move cluster struct inside mod
- Support non-sequential field arrays
- Use inlined variables in
format!(Rust 1.58) - Refactor, clean
periperal.rs&util.rs - use
svd_parser::expand::Indexfor derive - Generated enum names now consider
namefield inenumeratedValues - Use constant case for structure names; internal rearrangements for case conversation traits
- Add new feature
feature_groupwhich will generate cfg attribute for every group name when it is on - Sort fields by offset before process
- Updated docs for
write/modify
v0.24.1 - 2022-07-04
- Make field writer always generic around bit offset (fix bug #620)
- Make binary dependencies optional
- Make JSON and YAML formats optional
- Bump MSRV to 1.60
v0.24.0 - 2022-05-12
- Support "nested"
deriveFromfor registers located in one peripheral - Use modifiedWriteValues for 1-bitwise fields if present
- Use generic
FieldWriter,FieldReader,BitWriter,BitReader - Disable two clippy warnings in
array_proxy.rs - Add comments in docs about
readAction - Add CI to build and release binaries, use
CHANGELOG.mdas the description - Optional use
derive_more::{Deref,From}for register reader & writer - Don't use prebuilt strategy in CI
v0.23.1 - 2022-04-29
- GHA: rust dependency caching
- remove unnedded fields clone
- Use reexport instead of type aliases in
derive_from_base
v0.23.0 - 2022-04-26
- Generate const generic version of field array only if
const_genericenabled - Clean
FieldReader - Optional PascalCase for Enum values instead of UPPER_CASE
- Add code generation support of peripheral arrays.
v0.22.2 - 2022-04-13
- Fix #579 2: support 1-element arrays
v0.22.1 - 2022-04-05
- Fix #579
v0.22.0 - 2022-04-05
- added
dynkeyword to sanatizer.
- Generate Rust arrays for all register & cluster arrays with sequential_addresses. If their indices don't start from 0 add accessors with right names.
- Bring documentation on how to generate MSP430 PACs up to date (in line with msp430_svd).
- Use the official SVDs from Espressif for CI and
rust-regresstests, and additionally test the ESP32-C3, ESP32-S2, and ESP32-S3.
v0.21.0 - 2022-01-17
- Support of reading SVD from YAML or JSON files instead of XML
- Use
svd-parserv0.13.1 - Replace suffix in fields' name before converting to snake case when generating methods #563
- MIPS API now re-exports
mips_rt::interruptwhen thertfeature is enabled but does not generate theinterruptmacro anymore
- Fix ValidateLevel usage in lib.rs
- Parenthesizing
#offset_calcto avoid clippy's warning of operator precedence
keep_listoption
v0.20.0 - 2021-12-07
- Bug with
use_mask - Correct derive for register (cluster) array (needs
svd-rs0.11.2) - New line separators are now rendered in enumerated values
- Multi line field descriptions are now rendered correctly in write and read registers
strictoption- Missing
inlineon field reader constructors - Support for device.x generation for riscv targets and
__EXTERNAL_INTERRUPTSvector table - Re-export base's module for derived peripherals
- More debug and trace output to visualize program control flow
- Use
svd-parserv0.12 - More Cluster arrays are now emitted as an array rather than a list of
elements. An
ArrayProxywrapper is used when a Rust built-in array does not match the cluster layout. Requires the--const_genericcommand line option. - Bumped
xtensa-lxand addxtensa_lx::interrupt::InterruptNumberimplementation. - Don't use a mask when the width of the mask is the same as the width of the parent register.
- Improved error handling
- Registers with single fields that span the entire register now generate safe
bitswriters.
v0.19.0 - 2021-05-26
- MSP430 API for atomically changing register bits, gated behind the
--nightlyflag - New SVD test for
msp430fr2355 - Option
-o(--output-path) let you specify output directory path
\nin descriptions for multiline_reservedfields inRegisterBlocknow hexidemical usize- options can be set now with
svd2rust.tomlconfig - option
ignore_groupsfor optional disabling #506 - [breaking-change] move
const_genericfrom features to options - use
Configto pass options over all render levels - Use register iterator from
svd-parser - rm unneeded
core::convert::prefix onFrom
-
Padding has been corrected for SVD files containing nested array clusters.
This showed up on Cypress PSOC and Traveo II CPUs.
v0.18.0 - 2021-04-17
-
Support for registers with alternateGroup
-
New
-mswitch generates amod.rsfile instead oflib.rs, which can be used as a module inside a crate without further modification. -
ESP32/XtensaLX6 support.
-
Field array support.
-
Add repr(transparent) to Reg struct
-
Generated crates now contain the git commit hash and date of svd2rust compilation.
-
Provide an associated const ptr
PTRper peripheral RegisterBlock -
Generated peripherals now implement
core::fmt::Debug. -
Support for MIPS MCU cores, in particular for PIC32MX microcontrollers
-
Keyword sanitizing (
asyncand unneeded underscores) -
Expand derived clusters.
-
Ignore default enumeratedValues.
-
Bring
genericmodule into scope inlib.rswhen using-goption.
-
with feature "const-generic" generate const generic variant of "field array" structure in addition to structure that contain offset (requires rust 1.51)
-
move interrupt generation after generic file
-
[breaking-change] make
write_with_zeromethodunsafebecause the way it is -
Use complete path for cluster names
-
Rename some generated variables.
-
[breaking-change] Publishes the register spec zero-sized type and move all relevant register traits to that struct.
-
[breaking-change] Removes the extra type parameter on Reg, making the register spec the sole authority on the shape of the register.
-
Wrap register reader/writer and field readers in newtype wrappers, which significantly improves the documentation output.
-
Improve documentation on generated registers and fields
-
[breaking-change] remove
Variant<U, ENUM_A>, useOption<ENUM_A>instead -
[breaking-change] Update
svd-parserto0.11 -
split out register size type (
RawType) fromResetValuetrait -
anyhowcrate is used for error handling -
[breaking-change] Among other cleanups, MSP430 crates are now expected to use the
msp430_rt::interruptattribute macro anddevice.xfor interrupt support. TheINTERRUPTarray has been renamed__INTERRUPT. -
Documented the nature of the
Interruptenum on MSP430 and consequently removed all use ofbare-metalfrom that architecture -
Don't generate pre Edition 2018
extern cratestatements anymore -
[breaking-change] Cortex-M PACs now rely on
cortex_m::interrupt::InterruptNumberinstead ofbare_metal::Nrfor interrupt number handling. The minimum supportedcortex-mversion is now 0.7 andbare-metalis not a dependency anymore.
- Generated use of the register type aliases in favor of directly referencing
Reg<REGISTER_SPEC>
v0.17.0 - 2019-12-31
- Properly use of default RegisterProperties.
- Simplified code generation and sped up svd2rust by a some hundred percent
- Represent interrupts directly as
u8to avoid jump table generation - Added explicit #[inline] attributes to
Derefimpls - Enum items now associated with values (C-style), enums annotated with
repr(fty) - Bump
svd-parserdependency (0.9.0) - Switched from denying all warnings to only a subset.
- Bump logging and CLI arg parsing dependencies
v0.16.1 - 2019-08-17
-
Handling of missing register description (optional field)
-
Improve field enum docs
-
Change interrupt vector size for MSP430 to 16 bits from 32 bits
- Bump dependencies:
syn,quoteandproc_macro2v1.0.
v0.16.0 - 2019-08-05
-
variant()method for field reader andVariantenum for fields with reserved values -
Update documentation, add examples for register access methods
-
Add
write_with_zeromethod for registers without reset value -
command line option
--generic_modor-gfor pushing common structures and traits in separategeneric.rsfile
-
Field readers and writers use one enum where it is possible They also were renamed (suffix
_Rfor readers,_Wfor writers_Afor common enums,_AWif writable variants and readable variants are different) -
Replace register and its reader/writer by generic types
Reg,RandW -
Restore
unsafemarker on register writerbits()method
v0.15.2 - 2019-07-29
- No changes, just fixing the metadata since crates.io didn't like the keywords
v0.15.1 - 2019-07-29
- Support of 64-bit fields
-
Modernize
svd2rust-regress -
Break ultra-long single line output into multiple lines for better usability
-
Joined field write proxy into a single line to help dev builds
-
Elimated useless 0 shifts to reduce generated code size and fix a clippy lint
-
Replace field readers with generic
FRtype
- Correct handling of cluster size tag
v0.15.0 - 2019-07-25
-
Logging system was introduced by
logcrate. -
svd2rustcan be used as library. -
derive_fromnow can be used for registers. -
[breaking-change] for access to alternate registers functions now used instead of untagged_unions (no more nightly
features) -
generated code now more compact and compilation faster
-
reset_valuenow public const method of register structure -
Clone,Copy,Debug,PartialEqimplemented for read/write enums
v0.14.0 - 2018-12-07
- On Cortex-M targets the generated code includes a re-export of the
cortex_m_rt::interruptattribute, but only when thertfeature is enabled.
-
[breaking-change] on non-Cortex targets Interrupt no longer implements the
TryFromtrait; it now provides an inherenttry_frommethod. -
[breaking-change] for non-Cortex targets svd2rust no longer outputs the generated code to stdout; instead it writes it to a file named
lib.rs. -
Brackets generated in doc comments are now escaped to prevent warnings on nightly where the compiler tries to interpret bracketed content as links to structs, enums, etc.
- Some bugs around the generation of unions (see
--nightlyflag).
v0.13.1 - 2018-05-16
-
Fixed code generation for non Cortex-M targets.
svd2rustwas generating a feature gate with the wrong name. -
Fixed the example Cargo.toml for msp430 in the documentation.
v0.13.0 - 2018-05-12
-
svd2rustnow emits unions for registers that overlap (have the same address). Beforesvd2rustwould generate code for only one instance of overlapping registers for memory location. This feature requires passing the--nightlytosvd2rustas it generates code that requires a nightly compiler to build. -
svd2rustnow also blacklists the/(backslash) and(space) characters.svd2rustremoves all blacklisted characters from peripheral, register, bitfield and enumeratedValues names.
-
This crate now compiles on the stable and beta channels.
-
[breaking-change] when the target is the cortex-m architecture
svd2rustgenerates three files in the current directory, instead of dumping the generated code to stdout. -
[breaking-change] the syntax and expansion of the
interrupt!macro has changed when the target is the Cortex-M architecture. -
[breaking-change] the code generated for the Cortex-M architecture now depends on newer versions of the bare-metal, cortex-m and cortex-m-rt crates.
-
[breaking-change] when the target is the Cortex-M architecture the "rt" feature of the device crate must enable the "device" feature of the cortex-m-rt dependency.
- [breaking-change]
Interruptno longer implements the unstableTryFromtrait when the target is the Cortex-M architecture.
v0.12.1 - 2018-05-06
-
Code generation for
<cluster>s -
SVD files can now be read from stdin
-
RISCV support
-
Make the generated code work with recent nightlies by switching from the deprecated
macro_reexportfeature to theuse_extern_macrosfeature, which is planned for stabilization. -
Relocation errors on MSP430
-
Code generated for 1-bit enumerated fields
-
Handle the case where
dimIndexinformation is missing. -
Relocation errors (link errors) on MSP430
v0.12.0 - 2018-01-15
-
Functions are now marked as
#[inline]instead of as#[inline(always)]. -
Registers specified as arrays in SVD files are now being translated into Rust array in simple cases.
-
When CPU information is not declared in the SVD file assume that the CPU is an ARMv6-M CPU (the lowest common denominator). This only applies when the target is the Cortex-M architecture.
-
[breaking-change] Peripherals are now exposed as scoped singletons, instead of as global singletons.
v0.11.4 - 2017-09-08
-
Device crates can be compiled for x86 again.
-
Linking issue on ARMv6-M devices.
v0.11.3 - 2017-08-01
- Overrides of interrupt handles were being ignored if LTO was not enabled.
v0.11.2 - 2017-07-21 - YANKED
- deduplicate non overridden interrupt handlers. This saves 4 bytes of Flash memory per interrupt handler.
v0.11.1 - 2017-07-07
- the
Peripheralsstruct now includes derivedFrom peripherals.
v0.11.0 - 2017-07-07
-
Multiarch support. Now
svd2rustcan generate crates for MSP430 microcontrollers. The target architecture must be specified using the--targetflag. -
The generated crate will now populate the interrupts section of the vector table if the "rt" feature is enabled.
-
An
interrupt!macro has been added to the generated crates. This macro can be used to override an interrupt handler. This macro is only available if the "rt" feature is enabled.
- [breaking-change] the generated crates now depend on the
bare-metalcrate.
- generate crates now have a "rt" Cargo feature. This feature makes the
generated crate depend on the
cortex-m-rtcrate.
- [breaking-change] the
interruptmodule has been removed from generated crates. theinterrupt::Interruptenum can now be found at the root of the crate.
v0.10.0 - 2017-06-11
- [breaking-change] the read / write methods on single bits have been renamed
from
set,clear,is_setandis_cleartoset_bit,clear_bit,bit_is_setandbit_is_clearrespectively. This fixes several collision cases where a SVD file named an enumeratedValue BIT (which turns out to be not that uncommon!)
v0.9.1 - 2017-06-05
- The type of core peripheral register blocks has been changed to uppercase to match the device specific ones.
v0.9.0 - 2017-06-05 - YANKED
- [breaking-change] the types of peripherals, register and bitfields are now
normalized to uppercase, instead of CamelCase. It was not possible to use
CamelCase without running into problems like
A_22_5andA_2_25mapping to the same identifierA225.
- Code generation when the size of register was declared as being 1 bit by the SVD file.
v0.8.1 - 2017-05-30
- The generated crate's documentation now points to svd2rust's documentation about the peripheral API.
v0.8.0 - 2017-05-29
derivedFrombetween peripherals. That means that<enumeratedValues derivedFrom="peripheral.register.field.enumeratedValue">will now work.
- [breaking-change]. The API of 1-bit fields has been changed to work with
boolinstead of withu8.
Old API
// Read
if peripheral.register.read().field().bits() == 1 { /* something */}
// Write
peripheral.register.write(|w| unsafe { w.field().bits(1) });New API
// Read
if peripheral.register.read().field().bit() { /* something */}
// OR
if peripheral.register.read().field().is_set() { /* something */}
// Write. Note that this operation is now safe
peripheral.register.write(|w| w.field().bit(true));
// OR
peripheral.register.write(|w| w.field().set());- Don't generate code for reserved bit-fields as we shouldn't expose an API to modify those fields.
v0.7.2 - 2017-05-08
- Mark interrupt tokens as
!Send. This is required to fully fix the memory unsafety bug reported in rust-embedded/cortex-m#27.
v0.7.1 - 2017-05-07
- A
.reset()method, as a shorthand for "write the reset value to this register".
-
Make writing raw bits to a register safe if the SVD indicates so through the element.
-
Do not reject peripherals without registers.
- Code generation when the SVD file contains no information about interrupts.
v0.7.0 - 2017-04-25
- [breaking-change]. svd2rust no longer generates an API for core peripherals like NVIC. Instead, it just re-exports the cortex-m crate's API. Re-generating a crate with this new svd2rust may cause breaking changes in the API of core peripherals like NVIC and ITM if and only if the SVD contained information about those peripherals in the first place.
v0.6.2 - 2017-04-23
W.bitsis now safe if indicates that it's valid to write any value in the full range of the bitfield.
v0.6.1 - 2017-04-15
- Add
#[repr(C)]to theRegisterBlockstructs. Vanilla structs are not guaranteed to preserve the order of their fields as declared now that the field reordering optimization has landed.
v0.6.0 - 2017-04-11
- Interrupt tokens now implement the
Nrtrait
- [breaking change] the fields of the interrupt::Handlers struct has been changed to PascalCase.
v0.5.1 - 2017-04-01
- Code generated from SVD files that used enumeratedValues.derivedFrom didn't compile.
v0.5.0 - 2017-03-27
- [breaking change] each peripheral instance now has its own type. Direct use of the instances will continue working but function calls whose arguments include a peripheral instance will likely break.
v0.4.0 - 2017-03-12
- Support for whole device generation
- [breaking-change] The CLI have been totally changed. There's only one option now: whole device generation.
v0.3.0 - 2017-02-18
- The generated API now makes used of the SVD's enumeratedValues information if it's available. To make the API that doesn't use enumeratedValues info similar to the ones that does use it, the API has significantly changed from version
v0.2.1 - 2016-12-31
- Unsafe API to directly modify the bits of a register
v0.2.0 - 2016-12-28
- [breaking-change] Bitfields named RESERVED are no longer exposed. They were causing compilation errors because some registers have more than one bitfield named RESERVED. This, in theory, can change the API surface of the generated code given the same input SVD but I expect very little code to be affected and, actually, those RESERVED bitfields shouldn't have been exposed anyway.
v0.1.3 - 2016-12-21
-
Support for "register arrays".
-
Support for registers that have no declared "fields".
v0.1.2 - 2016-11-27
svd2rust -i $FILE tim1will now try to matchtim1, the name of the requested peripheral, exactly before looking for a peripheral that start withtim1. The result is that the previous command now returns the register map of TIM1 instead of e.g. the map of TIM15 which appeared "first" in the SVD file.
-
svd2rust now "sanitizes" register names that match existing Rust keywords. This means that if a register is named
modin the SVD file, svd2rust will, instead, usemod_as the name of the register for the generated Rust code. With this change, the generated Rust code will compile out of the box, without requiring further, manual changes. -
svd2rust no longer assumes that SVD files list the registers of a register block sorted by their "offsets". With this change, svd2rust now accepts more SVD files.
v0.1.1 - 2016-11-13
- Some SVD files specify that two registers exist at the same address.
svd2rustdidn't handle this case and panicked. A proper solution to handle this case will requireunions but those have not been stabilized. For now,svd2rustwill simply pick one of the two or more registers that overlap and ignore the rest.
- Initial version of the
svd2rusttool