Skip to content

Commit bc4a225

Browse files
author
Pascal Hertleif
committed
f64->f32
Our ARM target doesn't have double precision floats in hardware.
1 parent 069d4dc commit bc4a225

File tree

3 files changed

+41
-41
lines changed

3 files changed

+41
-41
lines changed

src/main.rs

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -292,7 +292,7 @@ fn render_signal(mut w: impl Write, signal: &Signal, dbc: &DBC, msg: &Message) -
292292
let type_name = enum_name(msg, signal);
293293
let match_on_raw_type = match signal_to_rust_type(signal).as_str() {
294294
"bool" => |x: f64| format!("{}", (x as i64) == 1),
295-
"f64" => |x: f64| format!("{}", x),
295+
"f32" => |x: f64| format!("{}", x),
296296
_ => |x: f64| format!("{}", x as i64),
297297
};
298298

@@ -395,9 +395,9 @@ fn signal_from_payload(mut w: impl Write, signal: &Signal) -> Result<()> {
395395
writeln!(&mut w, "signal == 1")?;
396396
} else if signal_is_float_in_rust(signal) {
397397
// Scaling is always done on floats
398-
writeln!(&mut w, "let factor = {}_f64;", signal.factor)?;
399-
writeln!(&mut w, "let offset = {}_f64;", signal.offset)?;
400-
writeln!(&mut w, "(signal as f64) * factor + offset")?;
398+
writeln!(&mut w, "let factor = {}_f32;", signal.factor)?;
399+
writeln!(&mut w, "let offset = {}_f32;", signal.offset)?;
400+
writeln!(&mut w, "(signal as f32) * factor + offset")?;
401401
} else {
402402
writeln!(&mut w, "signal")?;
403403
}
@@ -410,8 +410,8 @@ fn signal_to_payload(mut w: impl Write, signal: &Signal) -> Result<()> {
410410
writeln!(&mut w, "let value = value as u8;")?;
411411
} else if signal_is_float_in_rust(signal) {
412412
// Massage value into an int
413-
writeln!(&mut w, "let factor = {}_f64;", signal.factor)?;
414-
writeln!(&mut w, "let offset = {}_f64;", signal.offset)?;
413+
writeln!(&mut w, "let factor = {}_f32;", signal.factor)?;
414+
writeln!(&mut w, "let offset = {}_f32;", signal.offset)?;
415415
writeln!(
416416
&mut w,
417417
"let value = ((value - offset) / factor) as {};",
@@ -483,8 +483,8 @@ fn signal_to_rust_type(signal: &Signal) -> String {
483483
if signal.signal_size == 1 {
484484
String::from("bool")
485485
} else if signal_is_float_in_rust(signal) {
486-
// If there is any scaling needed, go for double precision
487-
String::from("f64")
486+
// If there is any scaling needed, go for float
487+
String::from("f32")
488488
} else {
489489
signal_to_rust_int(signal)
490490
}

testing/can-messages/src/messages.rs

Lines changed: 26 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ impl Foo {
4848
pub const MESSAGE_ID: u32 = 256;
4949

5050
/// Construct new Foo from values
51-
pub fn new(voltage: f64, current: f64) -> Result<Self, CanError> {
51+
pub fn new(voltage: f32, current: f32) -> Result<Self, CanError> {
5252
let mut res = Self { raw: [0u8; 4] };
5353
res.set_voltage(voltage)?;
5454
res.set_current(current)?;
@@ -62,7 +62,7 @@ impl Foo {
6262
/// - Unit: "V"
6363
/// - Receivers: Vector__XXX
6464
#[inline(always)]
65-
pub fn voltage(&self) -> f64 {
65+
pub fn voltage(&self) -> f32 {
6666
self.voltage_raw()
6767
}
6868

@@ -75,19 +75,19 @@ impl Foo {
7575
/// - Byte order: LittleEndian
7676
/// - Value type: Unsigned
7777
#[inline(always)]
78-
pub fn voltage_raw(&self) -> f64 {
78+
pub fn voltage_raw(&self) -> f32 {
7979
let signal = u16::unpack_le_bits(&self.raw, 16, 16);
8080

81-
let factor = 0.000976562_f64;
82-
let offset = 0_f64;
83-
(signal as f64) * factor + offset
81+
let factor = 0.000976562_f32;
82+
let offset = 0_f32;
83+
(signal as f32) * factor + offset
8484
}
8585

8686
/// Set value of Voltage
8787
#[inline(always)]
88-
pub fn set_voltage(&mut self, value: f64) -> Result<(), CanError> {
89-
let factor = 0.000976562_f64;
90-
let offset = 0_f64;
88+
pub fn set_voltage(&mut self, value: f32) -> Result<(), CanError> {
89+
let factor = 0.000976562_f32;
90+
let offset = 0_f32;
9191
let value = ((value - offset) / factor) as u16;
9292

9393
let start_bit = 16;
@@ -103,7 +103,7 @@ impl Foo {
103103
/// - Unit: "A"
104104
/// - Receivers: Vector__XXX
105105
#[inline(always)]
106-
pub fn current(&self) -> f64 {
106+
pub fn current(&self) -> f32 {
107107
self.current_raw()
108108
}
109109

@@ -116,19 +116,19 @@ impl Foo {
116116
/// - Byte order: LittleEndian
117117
/// - Value type: Signed
118118
#[inline(always)]
119-
pub fn current_raw(&self) -> f64 {
119+
pub fn current_raw(&self) -> f32 {
120120
let signal = i16::unpack_le_bits(&self.raw, 0, 16);
121121

122-
let factor = 0.0625_f64;
123-
let offset = 0_f64;
124-
(signal as f64) * factor + offset
122+
let factor = 0.0625_f32;
123+
let offset = 0_f32;
124+
(signal as f32) * factor + offset
125125
}
126126

127127
/// Set value of Current
128128
#[inline(always)]
129-
pub fn set_current(&mut self, value: f64) -> Result<(), CanError> {
130-
let factor = 0.0625_f64;
131-
let offset = 0_f64;
129+
pub fn set_current(&mut self, value: f32) -> Result<(), CanError> {
130+
let factor = 0.0625_f32;
131+
let offset = 0_f32;
132132
let value = ((value - offset) / factor) as i16;
133133

134134
let start_bit = 0;
@@ -167,7 +167,7 @@ impl Bar {
167167
pub const MESSAGE_ID: u32 = 512;
168168

169169
/// Construct new Bar from values
170-
pub fn new(one: u8, two: f64, three: u8, four: u8) -> Result<Self, CanError> {
170+
pub fn new(one: u8, two: f32, three: u8, four: u8) -> Result<Self, CanError> {
171171
let mut res = Self { raw: [0u8; 8] };
172172
res.set_one(one)?;
173173
res.set_two(two)?;
@@ -218,7 +218,7 @@ impl Bar {
218218
/// - Unit: "%"
219219
/// - Receivers: Dolor
220220
#[inline(always)]
221-
pub fn two(&self) -> f64 {
221+
pub fn two(&self) -> f32 {
222222
self.two_raw()
223223
}
224224

@@ -231,19 +231,19 @@ impl Bar {
231231
/// - Byte order: BigEndian
232232
/// - Value type: Unsigned
233233
#[inline(always)]
234-
pub fn two_raw(&self) -> f64 {
234+
pub fn two_raw(&self) -> f32 {
235235
let signal = u8::unpack_be_bits(&self.raw, (7 - (8 - 1)), 8);
236236

237-
let factor = 0.39_f64;
238-
let offset = 0_f64;
239-
(signal as f64) * factor + offset
237+
let factor = 0.39_f32;
238+
let offset = 0_f32;
239+
(signal as f32) * factor + offset
240240
}
241241

242242
/// Set value of Two
243243
#[inline(always)]
244-
pub fn set_two(&mut self, value: f64) -> Result<(), CanError> {
245-
let factor = 0.39_f64;
246-
let offset = 0_f64;
244+
pub fn set_two(&mut self, value: f32) -> Result<(), CanError> {
245+
let factor = 0.39_f32;
246+
let offset = 0_f32;
247247
let value = ((value - offset) / factor) as u8;
248248

249249
let start_bit = 7;

testing/rust-integration/tests/compare_to_socketcan.rs

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -6,17 +6,17 @@ fn simple_byte_aligned_message() {
66
let (_, payload) = parse_canframe("100#20000008");
77
let msg = messages::Foo::try_from(payload.as_slice()).unwrap();
88

9-
assert_f64_eq(msg.voltage(), 2_f64);
10-
assert_f64_eq(msg.current(), 2_f64);
9+
assert_f32_eq(msg.voltage(), 2_f32);
10+
assert_f32_eq(msg.current(), 2_f32);
1111
}
1212

1313
#[test]
1414
fn another_simple_byte_aligned_message() {
1515
let (_, payload) = parse_canframe("100#D500AEA9");
1616
let msg = messages::Foo::try_from(payload.as_slice()).unwrap();
1717

18-
assert_f64_eq(msg.voltage(), 42.42_f64);
19-
assert_f64_eq(msg.current(), 13.37_f64);
18+
assert_f32_eq(msg.voltage(), 42.42_f32);
19+
assert_f32_eq(msg.current(), 13.37_f32);
2020
}
2121

2222
#[test]
@@ -25,7 +25,7 @@ fn weirdly_aligned_bigendian_message_1() {
2525
let msg = messages::Bar::try_from(payload.as_slice()).unwrap();
2626

2727
assert_eq!(msg.one(), 2);
28-
assert_f64_eq(msg.two(), 2_f64);
28+
assert_f32_eq(msg.two(), 2_f32);
2929
assert_eq!(msg.three(), 2);
3030
assert!(matches!(msg.four(), messages::BarFour::Oner));
3131
}
@@ -36,7 +36,7 @@ fn weirdly_aligned_bigendian_message_2() {
3636
let msg = messages::Bar::try_from(payload.as_slice()).unwrap();
3737

3838
assert_eq!(msg.one(), 1);
39-
assert_f64_eq(msg.two(), 2_f64);
39+
assert_f32_eq(msg.two(), 2_f32);
4040
assert_eq!(msg.three(), 3);
4141
assert!(matches!(msg.four(), messages::BarFour::On));
4242
}
@@ -55,6 +55,6 @@ fn parse_canframe(candump_line: &str) -> (u32, Vec<u8>) {
5555
(id, payload)
5656
}
5757

58-
fn assert_f64_eq(a: f64, b: f64) {
58+
fn assert_f32_eq(a: f32, b: f32) {
5959
let _ = approx::abs_diff_eq!(a, b);
6060
}

0 commit comments

Comments
 (0)