Skip to content

Commit 313b33c

Browse files
author
Jorge Aparicio
committed
ignore registers that overlap
cc #16
1 parent f4a498d commit 313b33c

File tree

2 files changed

+18
-8
lines changed

2 files changed

+18
-8
lines changed

ci/run.sh

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ test_mode() {
2626
test_gen i2c1
2727
test_gen rcc
2828
test_gen spi1
29+
test_gen tim2
2930
test_gen tim6
3031
}
3132

src/lib.rs

Lines changed: 17 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,14 @@
1-
#![recursion_limit="100"]
1+
#![recursion_limit = "100"]
22

33
extern crate inflections;
44
extern crate svd_parser as svd;
55
#[macro_use]
66
extern crate quote;
77
extern crate syn;
88

9+
use std::io;
10+
use std::io::Write;
11+
912
use quote::Tokens;
1013
use syn::*;
1114

@@ -23,11 +26,18 @@ pub fn gen_peripheral(p: &Peripheral, d: &Defaults) -> Vec<Tokens> {
2326
.as_ref()
2427
.expect(&format!("{:#?} has no `registers` field", p));
2528
for register in registers {
26-
let pad = register.address_offset
27-
.checked_sub(offset)
28-
.unwrap_or_else(|| {
29-
panic!("{:#?} overlapped with other register!", p)
30-
});
29+
let pad = if let Some(pad) = register.address_offset
30+
.checked_sub(offset) {
31+
pad
32+
} else {
33+
writeln!(io::stderr(),
34+
"WARNING {} overlaps with another register at offset \
35+
{}. Ignoring.",
36+
register.name,
37+
register.address_offset)
38+
.ok();
39+
continue;
40+
};
3141

3242
if pad != 0 {
3343
let name = Ident::new(format!("_reserved{}", i));
@@ -38,8 +48,7 @@ pub fn gen_peripheral(p: &Peripheral, d: &Defaults) -> Vec<Tokens> {
3848
i += 1;
3949
}
4050

41-
let comment =
42-
&format!("0x{:02x} - {}",
51+
let comment = &format!("0x{:02x} - {}",
4352
register.address_offset,
4453
respace(&register.description))[..];
4554

0 commit comments

Comments
 (0)