diff --git a/ci/script.sh b/ci/script.sh index 8814e56e..2e8eb961 100644 --- a/ci/script.sh +++ b/ci/script.sh @@ -38,6 +38,7 @@ main() { echo 'cortex-m = "0.4.0"' >> $td/Cargo.toml echo 'cortex-m-rt = "0.3.0"' >> $td/Cargo.toml echo 'vcell = "0.1.0"' >> $td/Cargo.toml + echo 'msp430 = "0.1.0"' >> $td/Cargo.toml echo '[profile.dev]' >> $td/Cargo.toml echo 'incremental = false' >> $td/Cargo.toml @@ -386,8 +387,6 @@ main() { # test other targets (architectures) OTHER) - echo 'msp430 = "0.1.0"' >> $td/Cargo.toml - ( cd $td && curl -LO \ diff --git a/src/generate.rs b/src/generate.rs index 2bd61a69..9b06d292 100644 --- a/src/generate.rs +++ b/src/generate.rs @@ -566,20 +566,28 @@ fn register_block(registers: &[Register], defs: &Defaults) -> Result { Register::Array(ref info, ref array_info) => { let sequential_adresses = register_size == array_info.dim_increment * BITS_PER_BYTE; - let numeral_indexes = array_info - .dim_index - .clone() - .ok_or_else(|| { - format!("Register {} has no `dim_index` field", register.name) - })? + let indexes = if register.name.contains("[%s]") { + // From: http://www.keil.com/pack/doc/CMSIS/SVD/html/elem_registers.html + // "dimIndex should not be used together with the placeholder [%s], + // but rather with %s" + (0..array_info.dim) + .map(|i| i.to_string()) + .collect() + } else { + array_info + .dim_index + .clone() + .ok_or_else(|| { + format!("Register {} has no `dim_index` field", register.name) + })? + }; + + let numeral_indexes = indexes .iter() .all(|element| element.parse::().is_ok()); let sequential_indexes = if numeral_indexes && sequential_adresses { - array_info - .dim_index - .clone() - .unwrap() + indexes .iter() .map(|element| element.parse::().unwrap()) .collect::>()