@@ -66,7 +66,15 @@ fn to_text(peripherals: &[Peripheral]) -> String {
66
66
& mut rmmap,
67
67
& mut pcov,
68
68
) ;
69
- get_peripheral ( p, & mut mmap, pcov) ;
69
+ get_peripheral (
70
+ p,
71
+ & mut mmap,
72
+ if p. derived_from . is_some ( ) {
73
+ CoveredFields :: default ( )
74
+ } else {
75
+ pcov
76
+ } ,
77
+ ) ;
70
78
get_interrupts ( p, & mut mmap) ;
71
79
mmap. extend ( rmmap) ;
72
80
coverage += pcov;
@@ -83,7 +91,15 @@ fn to_text(peripherals: &[Peripheral]) -> String {
83
91
& mut rmmap,
84
92
& mut pcov,
85
93
) ;
86
- get_peripheral ( & pi, & mut mmap, pcov) ;
94
+ get_peripheral (
95
+ & pi,
96
+ & mut mmap,
97
+ if pi. derived_from . is_some ( ) {
98
+ CoveredFields :: default ( )
99
+ } else {
100
+ pcov
101
+ } ,
102
+ ) ;
87
103
get_interrupts ( & pi, & mut mmap) ;
88
104
mmap. extend ( rmmap) ;
89
105
coverage += pcov;
@@ -116,13 +132,21 @@ fn get_periph_registers<'a>(
116
132
}
117
133
118
134
fn get_peripheral ( peripheral : & PeripheralInfo , mmap : & mut Vec < String > , coverage : CoveredFields ) {
119
- let text = format ! (
120
- "{} A PERIPHERAL {} ({}/{} fields covered)" ,
121
- str_utils:: format_address( peripheral. base_address) ,
122
- peripheral. name,
123
- coverage. covered,
124
- coverage. all,
125
- ) ;
135
+ let text = if coverage. all > 0 {
136
+ format ! (
137
+ "{} A PERIPHERAL {} ({}/{} fields covered)" ,
138
+ str_utils:: format_address( peripheral. base_address) ,
139
+ peripheral. name,
140
+ coverage. covered,
141
+ coverage. all,
142
+ )
143
+ } else {
144
+ format ! (
145
+ "{} A PERIPHERAL {}" ,
146
+ str_utils:: format_address( peripheral. base_address) ,
147
+ peripheral. name,
148
+ )
149
+ } ;
126
150
mmap. push ( text) ;
127
151
}
128
152
@@ -277,7 +301,7 @@ fn is_covered(f: &FieldInfo) -> bool {
277
301
mod tests {
278
302
use super :: * ;
279
303
280
- static SVD : & str = r"
304
+ static SVD : & str = r## "
281
305
<device>
282
306
<name>dev</name>
283
307
<peripherals>
@@ -361,8 +385,13 @@ mod tests {
361
385
</register>
362
386
</registers>
363
387
</peripheral>
388
+ <peripheral derivedFrom="PeriphB">
389
+ <name>PeriphC</name>
390
+ <description>Peripheral C</description>
391
+ <baseAddress>0x10020000</baseAddress>
392
+ </peripheral>
364
393
</peripherals>
365
- </device>" ;
394
+ </device>"## ;
366
395
367
396
static EXPECTED_MMAP : & str = r"0x10000000 A PERIPHERAL PeriphA (1/2 fields covered)
368
397
0x10000010 B REGISTER REG1: Register A1
@@ -372,6 +401,9 @@ mod tests {
372
401
0x10010000 A PERIPHERAL PeriphB (1/1 fields covered)
373
402
0x10010010 B REGISTER REG1: Register B1
374
403
0x10010010 C FIELD 10w01 F3: Field 3
404
+ 0x10020000 A PERIPHERAL PeriphC
405
+ 0x10020010 B REGISTER REG1: Register B1
406
+ 0x10020010 C FIELD 10w01 F3: Field 3
375
407
INTERRUPT 001: INT_A1 (PeriphA): Interrupt A1
376
408
INTERRUPT 002: INT_B2 (PeriphB): Interrupt B2" ;
377
409
0 commit comments