riscv-rust / k210-pac

Peripheral access API crate (PAC) for K210 SoC, generated by svd2rust
29 stars 23 forks source link

K210.svd is malformed #35

Closed Knight-Ops closed 3 years ago

Knight-Ops commented 3 years ago

This looks like it happened 10 months ago in 8032503c588159e8366a67b77aeeb0db85f7427f. It looks like this is a side effect of some script that didn't do its replacement properly since svd2rust doesn't like %s in the name of a field.

Current SVD:

                          <field>
                            <name>pin%s</name>
                            <lsb>0</lsb>
                            <msb>0</msb>
                            <dim>32</dim>
                            <dimIncrement>1</dimIncrement>
                        </field>

Error from svd2rust:

thread 'main' panicked at '"PIN%S_A" is not a valid Ident', ~/.cargo/registry/src/github.com-1ecc6299db9ec823/proc-macro2-1.0.24/src/fallback.rs:693:9
stack backtrace:
   0: rust_begin_unwind
             at /rustc/d9a105fdd46c926ae606777a46dd90e5b838f92f/library/std/src/panicking.rs:493:5
   1: std::panicking::begin_panic_fmt
             at /rustc/d9a105fdd46c926ae606777a46dd90e5b838f92f/library/std/src/panicking.rs:435:5
   2: proc_macro2::fallback::Ident::_new
   3: proc_macro2::Ident::new
   4: svd2rust::generate::register::fields::<impl svd2rust::generate::register::F>::from
   5: <core::iter::adapters::map::Map<I,F> as core::iter::traits::iterator::Iterator>::try_fold
   6: <alloc::vec::Vec<T> as alloc::vec::SpecFromIter<T,I>>::from_iter
   7: core::iter::adapters::process_results
   8: svd2rust::generate::register::fields
   9: svd2rust::generate::register::render
  10: svd2rust::generate::peripheral::render
  11: svd2rust::generate::device::render
  12: svd2rust::main
note: Some details are omitted, run with `RUST_BACKTRACE=full` for a verbose backtrace.

Prior to commit SVD:

                        <field><name>pin0</name><lsb>0</lsb><msb>0</msb></field>
                        <field><name>pin1</name><lsb>1</lsb><msb>1</msb></field>
                        <field><name>pin2</name><lsb>2</lsb><msb>2</msb></field>
                        <field><name>pin3</name><lsb>3</lsb><msb>3</msb></field>
                        <field><name>pin4</name><lsb>4</lsb><msb>4</msb></field>
                        <field><name>pin5</name><lsb>5</lsb><msb>5</msb></field>
                        <field><name>pin6</name><lsb>6</lsb><msb>6</msb></field>
                        <field><name>pin7</name><lsb>7</lsb><msb>7</msb></field>
                        <field><name>pin8</name><lsb>8</lsb><msb>8</msb></field>
                        <field><name>pin9</name><lsb>9</lsb><msb>9</msb></field>
                        <field><name>pin10</name><lsb>10</lsb><msb>10</msb></field>
                        <field><name>pin11</name><lsb>11</lsb><msb>11</msb></field>
                        <field><name>pin12</name><lsb>12</lsb><msb>12</msb></field>
                        <field><name>pin13</name><lsb>13</lsb><msb>13</msb></field>
                        <field><name>pin14</name><lsb>14</lsb><msb>14</msb></field>
                        <field><name>pin15</name><lsb>15</lsb><msb>15</msb></field>
                        <field><name>pin16</name><lsb>16</lsb><msb>16</msb></field>
                        <field><name>pin17</name><lsb>17</lsb><msb>17</msb></field>
                        <field><name>pin18</name><lsb>18</lsb><msb>18</msb></field>
                        <field><name>pin19</name><lsb>19</lsb><msb>19</msb></field>
                        <field><name>pin20</name><lsb>20</lsb><msb>20</msb></field>
                        <field><name>pin21</name><lsb>21</lsb><msb>21</msb></field>
                        <field><name>pin22</name><lsb>22</lsb><msb>22</msb></field>
                        <field><name>pin23</name><lsb>23</lsb><msb>23</msb></field>
                        <field><name>pin24</name><lsb>24</lsb><msb>24</msb></field>
                        <field><name>pin25</name><lsb>25</lsb><msb>25</msb></field>
                        <field><name>pin26</name><lsb>26</lsb><msb>26</msb></field>
                        <field><name>pin27</name><lsb>27</lsb><msb>27</msb></field>
                        <field><name>pin28</name><lsb>28</lsb><msb>28</msb></field>
                        <field><name>pin29</name><lsb>29</lsb><msb>29</msb></field>
                        <field><name>pin30</name><lsb>30</lsb><msb>30</msb></field>
                        <field><name>pin31</name><lsb>31</lsb><msb>31</msb></field>

I am using svd2rust 0.17.0, as it is possible this could be an issue in svd2rust instead.

Knight-Ops commented 3 years ago

This seems to be related. Looks to be a svd2rust issue not supporting field expansion with %s, so probably should format the SVD without supported expansions if possible?

https://github.com/rust-embedded/svd2rust/issues/44

Knight-Ops commented 3 years ago

Source that this should be supported according to the CMSIS-SVD Spec : https://arm-software.github.io/CMSIS_5/SVD/html/elem_registers.html#elem_field

Disasm commented 3 years ago

svd2rust already supports these, but not in the latest released version ;)

Disasm commented 3 years ago

https://github.com/rust-embedded/svd2rust/pull/400

Knight-Ops commented 3 years ago

Awesome, maybe hit up that open issue on svd2rust? It may also be worth a note in the README to use the bleeding edge svd2rust for support? Thanks for letting me know though, that's great!