aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--demos/SPC5/RT-SPC560B-EVB/main.c2
-rw-r--r--demos/SPC5/RT-SPC560D-EVB/main.c2
-rw-r--r--demos/SPC5/RT-SPC560P-EVB/main.c2
-rw-r--r--demos/SPC5/RT-SPC563M-EVB/main.c2
-rw-r--r--demos/SPC5/RT-SPC564A-EVB/main.c2
-rw-r--r--demos/SPC5/RT-SPC56EC-EVB/main.c2
-rw-r--r--demos/SPC5/RT-SPC56EL-EVB/main.c2
-rw-r--r--demos/STM32/RT-STM32F407-DISCOVERY-MEMS/main.c2
-rw-r--r--demos/STM32/RT-STM32F429-DISCOVERY/main.c2
-rw-r--r--os/various/chprintf.c26
-rw-r--r--testhal/STM32/STM32F1xx/USB_CDC/main.c2
-rw-r--r--testhal/STM32/STM32F1xx/USB_CDC_F107/main.c2
-rw-r--r--testhal/STM32/STM32F30x/USB_CDC/main.c2
-rw-r--r--testhal/STM32/STM32F37x/USB_CDC/main.c2
-rw-r--r--testhal/STM32/STM32F4xx/USB_CDC/main.c2
15 files changed, 31 insertions, 23 deletions
diff --git a/demos/SPC5/RT-SPC560B-EVB/main.c b/demos/SPC5/RT-SPC560B-EVB/main.c
index 4314c1538..4516c6224 100644
--- a/demos/SPC5/RT-SPC560B-EVB/main.c
+++ b/demos/SPC5/RT-SPC560B-EVB/main.c
@@ -49,7 +49,7 @@ static void cmd_threads(BaseSequentialStream *chp, int argc, char *argv[]) {
chprintf(chp, " addr stack prio refs state time\r\n");
tp = chRegFirstThread();
do {
- chprintf(chp, "%.8lx %.8lx %4lu %4lu %9s\r\n",
+ chprintf(chp, "%08lx %08lx %4lu %4lu %9s\r\n",
(uint32_t)tp, (uint32_t)tp->p_ctx.sp,
(uint32_t)tp->p_prio, (uint32_t)(tp->p_refs - 1),
states[tp->p_state]);
diff --git a/demos/SPC5/RT-SPC560D-EVB/main.c b/demos/SPC5/RT-SPC560D-EVB/main.c
index 4314c1538..4516c6224 100644
--- a/demos/SPC5/RT-SPC560D-EVB/main.c
+++ b/demos/SPC5/RT-SPC560D-EVB/main.c
@@ -49,7 +49,7 @@ static void cmd_threads(BaseSequentialStream *chp, int argc, char *argv[]) {
chprintf(chp, " addr stack prio refs state time\r\n");
tp = chRegFirstThread();
do {
- chprintf(chp, "%.8lx %.8lx %4lu %4lu %9s\r\n",
+ chprintf(chp, "%08lx %08lx %4lu %4lu %9s\r\n",
(uint32_t)tp, (uint32_t)tp->p_ctx.sp,
(uint32_t)tp->p_prio, (uint32_t)(tp->p_refs - 1),
states[tp->p_state]);
diff --git a/demos/SPC5/RT-SPC560P-EVB/main.c b/demos/SPC5/RT-SPC560P-EVB/main.c
index deac100c5..b17e1e523 100644
--- a/demos/SPC5/RT-SPC560P-EVB/main.c
+++ b/demos/SPC5/RT-SPC560P-EVB/main.c
@@ -49,7 +49,7 @@ static void cmd_threads(BaseSequentialStream *chp, int argc, char *argv[]) {
chprintf(chp, " addr stack prio refs state time\r\n");
tp = chRegFirstThread();
do {
- chprintf(chp, "%.8lx %.8lx %4lu %4lu %9s\r\n",
+ chprintf(chp, "%08lx %08lx %4lu %4lu %9s\r\n",
(uint32_t)tp, (uint32_t)tp->p_ctx.sp,
(uint32_t)tp->p_prio, (uint32_t)(tp->p_refs - 1),
states[tp->p_state]);
diff --git a/demos/SPC5/RT-SPC563M-EVB/main.c b/demos/SPC5/RT-SPC563M-EVB/main.c
index 93a001ffa..e90e683e3 100644
--- a/demos/SPC5/RT-SPC563M-EVB/main.c
+++ b/demos/SPC5/RT-SPC563M-EVB/main.c
@@ -49,7 +49,7 @@ static void cmd_threads(BaseSequentialStream *chp, int argc, char *argv[]) {
chprintf(chp, " addr stack prio refs state time\r\n");
tp = chRegFirstThread();
do {
- chprintf(chp, "%.8lx %.8lx %4lu %4lu %9s\r\n",
+ chprintf(chp, "%08lx %08lx %4lu %4lu %9s\r\n",
(uint32_t)tp, (uint32_t)tp->p_ctx.sp,
(uint32_t)tp->p_prio, (uint32_t)(tp->p_refs - 1),
states[tp->p_state]);
diff --git a/demos/SPC5/RT-SPC564A-EVB/main.c b/demos/SPC5/RT-SPC564A-EVB/main.c
index 93a001ffa..e90e683e3 100644
--- a/demos/SPC5/RT-SPC564A-EVB/main.c
+++ b/demos/SPC5/RT-SPC564A-EVB/main.c
@@ -49,7 +49,7 @@ static void cmd_threads(BaseSequentialStream *chp, int argc, char *argv[]) {
chprintf(chp, " addr stack prio refs state time\r\n");
tp = chRegFirstThread();
do {
- chprintf(chp, "%.8lx %.8lx %4lu %4lu %9s\r\n",
+ chprintf(chp, "%08lx %08lx %4lu %4lu %9s\r\n",
(uint32_t)tp, (uint32_t)tp->p_ctx.sp,
(uint32_t)tp->p_prio, (uint32_t)(tp->p_refs - 1),
states[tp->p_state]);
diff --git a/demos/SPC5/RT-SPC56EC-EVB/main.c b/demos/SPC5/RT-SPC56EC-EVB/main.c
index 4314c1538..4516c6224 100644
--- a/demos/SPC5/RT-SPC56EC-EVB/main.c
+++ b/demos/SPC5/RT-SPC56EC-EVB/main.c
@@ -49,7 +49,7 @@ static void cmd_threads(BaseSequentialStream *chp, int argc, char *argv[]) {
chprintf(chp, " addr stack prio refs state time\r\n");
tp = chRegFirstThread();
do {
- chprintf(chp, "%.8lx %.8lx %4lu %4lu %9s\r\n",
+ chprintf(chp, "%08lx %08lx %4lu %4lu %9s\r\n",
(uint32_t)tp, (uint32_t)tp->p_ctx.sp,
(uint32_t)tp->p_prio, (uint32_t)(tp->p_refs - 1),
states[tp->p_state]);
diff --git a/demos/SPC5/RT-SPC56EL-EVB/main.c b/demos/SPC5/RT-SPC56EL-EVB/main.c
index deac100c5..b17e1e523 100644
--- a/demos/SPC5/RT-SPC56EL-EVB/main.c
+++ b/demos/SPC5/RT-SPC56EL-EVB/main.c
@@ -49,7 +49,7 @@ static void cmd_threads(BaseSequentialStream *chp, int argc, char *argv[]) {
chprintf(chp, " addr stack prio refs state time\r\n");
tp = chRegFirstThread();
do {
- chprintf(chp, "%.8lx %.8lx %4lu %4lu %9s\r\n",
+ chprintf(chp, "%08lx %08lx %4lu %4lu %9s\r\n",
(uint32_t)tp, (uint32_t)tp->p_ctx.sp,
(uint32_t)tp->p_prio, (uint32_t)(tp->p_refs - 1),
states[tp->p_state]);
diff --git a/demos/STM32/RT-STM32F407-DISCOVERY-MEMS/main.c b/demos/STM32/RT-STM32F407-DISCOVERY-MEMS/main.c
index 85310332f..982981993 100644
--- a/demos/STM32/RT-STM32F407-DISCOVERY-MEMS/main.c
+++ b/demos/STM32/RT-STM32F407-DISCOVERY-MEMS/main.c
@@ -60,7 +60,7 @@ static void cmd_threads(BaseSequentialStream *chp, int argc, char *argv[]) {
chprintf(chp, " addr stack prio refs state\r\n");
tp = chRegFirstThread();
do {
- chprintf(chp, "%.8lx %.8lx %4lu %4lu %9s\r\n",
+ chprintf(chp, "%08lx %08lx %4lu %4lu %9s\r\n",
(uint32_t)tp, (uint32_t)tp->p_ctx.r13,
(uint32_t)tp->p_prio, (uint32_t)(tp->p_refs - 1),
states[tp->p_state]);
diff --git a/demos/STM32/RT-STM32F429-DISCOVERY/main.c b/demos/STM32/RT-STM32F429-DISCOVERY/main.c
index d857c3ddd..6db720300 100644
--- a/demos/STM32/RT-STM32F429-DISCOVERY/main.c
+++ b/demos/STM32/RT-STM32F429-DISCOVERY/main.c
@@ -91,7 +91,7 @@ static void cmd_threads(BaseSequentialStream *chp, int argc, char *argv[]) {
chprintf(chp, " addr stack prio refs state time\r\n");
tp = chRegFirstThread();
do {
- chprintf(chp, "%.8lx %.8lx %4lu %4lu %9s\r\n",
+ chprintf(chp, "%08lx %08lx %4lu %4lu %9s\r\n",
(uint32_t)tp, (uint32_t)tp->p_ctx.r13,
(uint32_t)tp->p_prio, (uint32_t)(tp->p_refs - 1),
states[tp->p_state]);
diff --git a/os/various/chprintf.c b/os/various/chprintf.c
index e39b4c324..838cd7ce8 100644
--- a/os/various/chprintf.c
+++ b/os/various/chprintf.c
@@ -32,7 +32,7 @@
#include "memstreams.h"
#define MAX_FILLER 11
-#define FLOAT_PRECISION 100000
+#define FLOAT_PRECISION 5
static char *long_to_string_with_divisor(char *p,
long num,
@@ -73,9 +73,16 @@ static char *ltoa(char *p, long num, unsigned radix) {
}
#if CHPRINTF_USE_FLOAT
-static char *ftoa(char *p, double num) {
+static long pow10[] = {10, 100, 1000, 10000, 100000, 1000000, 10000000,
+ 100000000, 1000000000, 10000000000, 100000000000,
+ 1000000000000, 10000000000000};
+
+static char *ftoa(char *p, double num, unsigned long precision) {
long l;
- unsigned long precision = FLOAT_PRECISION;
+
+ if (precision == 0)
+ precision = FLOAT_PRECISION;
+ precision = pow10[precision - 1];
l = (long)num;
p = long_to_string_with_divisor(p, l, 10, 0);
@@ -137,7 +144,7 @@ void chvprintf(BaseSequentialStream *chp, const char *fmt, va_list ap) {
left_align = TRUE;
}
filler = ' ';
- if ((*fmt == '.') || (*fmt == '0')) {
+ if (*fmt == '0') {
fmt++;
filler = '0';
}
@@ -211,7 +218,7 @@ void chvprintf(BaseSequentialStream *chp, const char *fmt, va_list ap) {
*p++ = '-';
f = -f;
}
- p = ftoa(p, f);
+ p = ftoa(p, f, precision);
break;
#endif
case 'X':
@@ -290,8 +297,9 @@ int chsnprintf(char *str, size_t size, const char *fmt, ...) {
MemoryStream ms;
BaseSequentialStream *chp;
- /* Memory stream object to be used as a string writer.*/
- msObjectInit(&ms, (uint8_t *)str, size, 0);
+ /* Memory stream object to be used as a string writer, reserving one
+ byte for the final zero.*/
+ msObjectInit(&ms, (uint8_t *)str, size - 1, 0);
/* Performing the print operation using the common code.*/
chp = (BaseSequentialStream *)&ms;
@@ -300,8 +308,8 @@ int chsnprintf(char *str, size_t size, const char *fmt, ...) {
va_end(ap);
/* Final zero and size return.*/
- chSequentialStreamPut(chp, 0);
- return ms.eos - 1;
+ str[ms.eos] = 0;
+ return ms.eos;
}
/** @} */
diff --git a/testhal/STM32/STM32F1xx/USB_CDC/main.c b/testhal/STM32/STM32F1xx/USB_CDC/main.c
index 38dc09260..3d556fce7 100644
--- a/testhal/STM32/STM32F1xx/USB_CDC/main.c
+++ b/testhal/STM32/STM32F1xx/USB_CDC/main.c
@@ -361,7 +361,7 @@ static void cmd_threads(BaseSequentialStream *chp, int argc, char *argv[]) {
chprintf(chp, " addr stack prio refs state\r\n");
tp = chRegFirstThread();
do {
- chprintf(chp, "%.8lx %.8lx %4lu %4lu %9s %lu\r\n",
+ chprintf(chp, "%08lx %08lx %4lu %4lu %9s %lu\r\n",
(uint32_t)tp, (uint32_t)tp->p_ctx.r13,
(uint32_t)tp->p_prio, (uint32_t)(tp->p_refs - 1),
states[tp->p_state]);
diff --git a/testhal/STM32/STM32F1xx/USB_CDC_F107/main.c b/testhal/STM32/STM32F1xx/USB_CDC_F107/main.c
index 8dda559c0..3ca3648f8 100644
--- a/testhal/STM32/STM32F1xx/USB_CDC_F107/main.c
+++ b/testhal/STM32/STM32F1xx/USB_CDC_F107/main.c
@@ -361,7 +361,7 @@ static void cmd_threads(BaseSequentialStream *chp, int argc, char *argv[]) {
chprintf(chp, " addr stack prio refs state time\r\n");
tp = chRegFirstThread();
do {
- chprintf(chp, "%.8lx %.8lx %4lu %4lu %9s %lu\r\n",
+ chprintf(chp, "%08lx %08lx %4lu %4lu %9s %lu\r\n",
(uint32_t)tp, (uint32_t)tp->p_ctx.r13,
(uint32_t)tp->p_prio, (uint32_t)(tp->p_refs - 1),
states[tp->p_state], (uint32_t)tp->p_time);
diff --git a/testhal/STM32/STM32F30x/USB_CDC/main.c b/testhal/STM32/STM32F30x/USB_CDC/main.c
index 31122bcbd..67cd65d4a 100644
--- a/testhal/STM32/STM32F30x/USB_CDC/main.c
+++ b/testhal/STM32/STM32F30x/USB_CDC/main.c
@@ -368,7 +368,7 @@ static void cmd_threads(BaseSequentialStream *chp, int argc, char *argv[]) {
chprintf(chp, " addr stack prio refs state\r\n");
tp = chRegFirstThread();
do {
- chprintf(chp, "%.8lx %.8lx %4lu %4lu %9s %lu\r\n",
+ chprintf(chp, "%08lx %08lx %4lu %4lu %9s %lu\r\n",
(uint32_t)tp, (uint32_t)tp->p_ctx.r13,
(uint32_t)tp->p_prio, (uint32_t)(tp->p_refs - 1),
states[tp->p_state]);
diff --git a/testhal/STM32/STM32F37x/USB_CDC/main.c b/testhal/STM32/STM32F37x/USB_CDC/main.c
index 8730cabe6..fadfc9092 100644
--- a/testhal/STM32/STM32F37x/USB_CDC/main.c
+++ b/testhal/STM32/STM32F37x/USB_CDC/main.c
@@ -367,7 +367,7 @@ static void cmd_threads(BaseSequentialStream *chp, int argc, char *argv[]) {
chprintf(chp, " addr stack prio refs state time\r\n");
tp = chRegFirstThread();
do {
- chprintf(chp, "%.8lx %.8lx %4lu %4lu %9s\r\n",
+ chprintf(chp, "%08lx %08lx %4lu %4lu %9s\r\n",
(uint32_t)tp, (uint32_t)tp->p_ctx.r13,
(uint32_t)tp->p_prio, (uint32_t)(tp->p_refs - 1),
states[tp->p_state]);
diff --git a/testhal/STM32/STM32F4xx/USB_CDC/main.c b/testhal/STM32/STM32F4xx/USB_CDC/main.c
index dd01ecb25..054c4e23c 100644
--- a/testhal/STM32/STM32F4xx/USB_CDC/main.c
+++ b/testhal/STM32/STM32F4xx/USB_CDC/main.c
@@ -361,7 +361,7 @@ static void cmd_threads(BaseSequentialStream *chp, int argc, char *argv[]) {
chprintf(chp, " addr stack prio refs state time\r\n");
tp = chRegFirstThread();
do {
- chprintf(chp, "%.8lx %.8lx %4lu %4lu %9s\r\n",
+ chprintf(chp, "%08lx %08lx %4lu %4lu %9s\r\n",
(uint32_t)tp, (uint32_t)tp->p_ctx.r13,
(uint32_t)tp->p_prio, (uint32_t)(tp->p_refs - 1),
states[tp->p_state]);