Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Diff: main.cpp
- Revision:
- 5:887081decd5c
- Parent:
- 4:dcdcb25d1069
- Child:
- 6:6c1c38d4faa4
--- a/main.cpp Sat Mar 13 13:49:08 2021 +0100
+++ b/main.cpp Sat Mar 13 15:21:09 2021 +0100
@@ -1,16 +1,18 @@
#include "mbed.h"
#include "platform/mbed_thread.h"
-
+#include "iostream"
+#include "string"
#include "BufferedSerial.h"
+#include <math.h>
+#include <stdio.h>
#define pi 3.14159265358979323846
using namespace std::chrono;
-InterruptIn user_button(USER_BUTTON);
-DigitalOut led(LED1);
-// Serial pc(SERIAL_TX, SERIAL_RX);
- BufferedSerial pc(USBTX, USBRX);
+InterruptIn user_button(USER_BUTTON);
+DigitalOut led(LED1);
+BufferedSerial pc(USBTX, USBRX);
bool executeMainTask = false;
Timer user_button_timer, loop_timer;
@@ -19,6 +21,10 @@
void button_fall(); // stuff
void button_rise(); // stuff
+void reverse(char* str, int len);
+int intToStr(int x, char str[], int d);
+void ftoa(float n, char* res, int afterpoint);
+
AnalogIn analogIn(PA_0);
float dist = 0.0f;
@@ -38,22 +44,40 @@
// printf("measurement: %d\r\n", (static_cast<int>(dist * 1000)));
Timer s;
+
+ s.start();
+ char res0[20];
+ float val0 = 233.007;
+ ftoa(val0, res0, 4);
+ pc.write(res0, sizeof(res0));
+ int buffered_time_ftoa = duration_cast<milliseconds>(s.elapsed_time()).count();
+ thread_sleep_for(100);
- s.start();
+ s.reset();
+ char res1[20];
+ float val1 = 233.007;
+ ftoa(val1, res1, 4);
+ printf("%s\r\n", res1);
+ int polled_time_ftoa = duration_cast<milliseconds>(s.elapsed_time()).count();
+ thread_sleep_for(100);
+
+ s.reset();
char msg[] = "Hello World - buffered\n";
pc.write(msg, sizeof(msg));
int buffered_time = duration_cast<milliseconds>(s.elapsed_time()).count();
- thread_sleep_for(100);; // give time for the buffer to empty
+ thread_sleep_for(100);
s.reset();
printf("Hello World - blocking\n");
int polled_time = duration_cast<milliseconds>(s.elapsed_time()).count();
s.stop();
- thread_sleep_for(100);; // give time for the buffer to empty
+ thread_sleep_for(100);
+ printf("printf buffered took %d us\n", buffered_time_ftoa);
+ printf("printf blocking took %d us\n", polled_time_ftoa);
printf("printf buffered took %d us\n", buffered_time);
printf("printf blocking took %d us\n", polled_time);
- thread_sleep_for(100);; // give time for the buffer to empty
+ thread_sleep_for(100);
@@ -82,4 +106,58 @@
int t_button = duration_cast<milliseconds>(user_button_timer.elapsed_time()).count();
user_button_timer.stop();
if(t_button > 200) executeMainTask = !executeMainTask;
-}
\ No newline at end of file
+}
+
+void reverse(char* str, int len)
+{
+ int i = 0, j = len - 1, temp;
+ while (i < j) {
+ temp = str[i];
+ str[i] = str[j];
+ str[j] = temp;
+ i++;
+ j--;
+ }
+}
+
+int intToStr(int x, char str[], int d)
+{
+ int i = 0;
+ while (x) {
+ str[i++] = (x % 10) + '0';
+ x = x / 10;
+ }
+
+ // If number of digits required is more, then
+ // add 0s at the beginning
+ while (i < d)
+ str[i++] = '0';
+
+ reverse(str, i);
+ str[i] = '\0';
+ return i;
+}
+
+void ftoa(float n, char* res, int afterpoint)
+{
+ // Extract integer part
+ int ipart = (int)n;
+
+ // Extract floating part
+ float fpart = n - (float)ipart;
+
+ // convert integer part to string
+ int i = intToStr(ipart, res, 0);
+
+ // check for display option after point
+ if (afterpoint != 0) {
+ res[i] = '.'; // add dot
+
+ // Get the value of fraction part upto given no.
+ // of points after dot. The third parameter
+ // is needed to handle cases like 233.007
+ fpart = fpart * pow(10, afterpoint);
+
+ intToStr((int)fpart, res + i + 1, afterpoint);
+ }
+}
\ No newline at end of file