Skip to content

Commit 25e2d97

Browse files
author
Dylan McKay
committed
Support printing floats
1 parent 9e27ea5 commit 25e2d97

File tree

2 files changed

+29
-3
lines changed

2 files changed

+29
-3
lines changed

avrlit.py.in

+2-1
Original file line numberDiff line numberDiff line change
@@ -151,7 +151,8 @@ def link(objects, config):
151151
executablePath = "{}/{}.elf".format(config.output_dir, "executable")
152152
libavrlit_path = os.path.join(libavrlit_dir, config.board, "libavrlit.a")
153153
arguments = objects + ["-mmcu=" + config.mcu,
154-
"-o", executablePath, libavrlit_path]
154+
"-o", executablePath, libavrlit_path,
155+
"-Wl,-u,vfprintf", "-lprintf_flt", "-lm"]
155156
runCommand(config.ld, arguments, config)
156157
return executablePath
157158

libavrlit/src/avrlit.cpp

+27-2
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
#include "serial/serial.h"
1212

1313
#include <stdlib.h>
14+
#include <stdio.h>
1415

1516
namespace {
1617

@@ -27,6 +28,18 @@ void reportInteger(const char *name, T result, bool includeColon) {
2728
avrlit::SerialImpl::GetCurrent()->send(buffer);
2829
}
2930

31+
void reportFloat(const char *name, float f, bool includeColon) {
32+
avrlit::SerialImpl::GetCurrent()->send(name);
33+
34+
if (includeColon)
35+
avrlit::SerialImpl::GetCurrent()->send(": ");
36+
37+
char buffer[40];
38+
sprintf(buffer, "%f", (double)f);
39+
40+
avrlit::SerialImpl::GetCurrent()->send(buffer);
41+
}
42+
3043
template<typename T>
3144
void reportArgumentInteger(const char *name, uint8_t idx, T result) {
3245
if (idx > 0) {
@@ -35,12 +48,24 @@ void reportArgumentInteger(const char *name, uint8_t idx, T result) {
3548

3649
reportInteger(name, result, true);
3750
}
51+
void reportArgumentFloat(const char *name, uint8_t idx, float result) {
52+
if (idx > 0) {
53+
avrlit::SerialImpl::GetCurrent()->send(", ");
54+
}
55+
56+
reportFloat(name, result, true);
57+
}
3858

3959
template<typename T>
4060
void reportResultInteger(T result) {
4161
reportInteger("return ", result, false);
4262
avrlit::SerialImpl::GetCurrent()->send('\n');
4363
}
64+
65+
void reportResultFloat(float result) {
66+
reportFloat("return ", result, false);
67+
avrlit::SerialImpl::GetCurrent()->send('\n');
68+
}
4469
}
4570

4671
extern "C" {
@@ -79,14 +104,14 @@ extern "C" {
79104
void avr_instrumentation_argument_i32(const char *argName, uint8_t idx, uint32_t val) { reportArgumentInteger(argName, idx, val); }
80105
void avr_instrumentation_argument_i64(const char *argName, uint8_t idx, uint64_t val) { reportArgumentInteger(argName, idx, val); }
81106

82-
void avr_instrumentation_argument_f32(const char *argName, uint8_t idx, float val) { }
107+
void avr_instrumentation_argument_f32(const char *argName, uint8_t idx, float val) { reportArgumentFloat(argName, idx, val); }
83108

84109
void avr_instrumentation_result_i8(uint8_t result) { reportResultInteger(result); }
85110
void avr_instrumentation_result_i16(uint16_t result) { reportResultInteger(result); }
86111
void avr_instrumentation_result_i32(uint32_t result) { reportResultInteger(result); }
87112
void avr_instrumentation_result_i64(uint64_t result) { reportResultInteger(result); }
88113

89-
void avr_instrumentation_result_f32(float result) { }
114+
void avr_instrumentation_result_f32(float result) { reportResultFloat(result); }
90115
}
91116

92117
extern "C" {

0 commit comments

Comments
 (0)