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.
Revision 0:51977f75213d, committed 2015-07-13
- Comitter:
- SteveKim
- Date:
- Mon Jul 13 04:38:28 2015 +0000
- Commit message:
- async_print for test
Changed in this revision
diff -r 000000000000 -r 51977f75213d CBuffer.h
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/CBuffer.h Mon Jul 13 04:38:28 2015 +0000
@@ -0,0 +1,75 @@
+/* Copyright (C) 2012 mbed.org, MIT License
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy of this software
+ * and associated documentation files (the "Software"), to deal in the Software without restriction,
+ * including without limitation the rights to use, copy, modify, merge, publish, distribute,
+ * sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all copies or
+ * substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
+ * BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+ * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ */
+
+#ifndef CIRCBUFFER_H_
+#define CIRCBUFFER_H_
+
+template <class T>
+class CircBuffer {
+public:
+ CircBuffer(int length) {
+ write = 0;
+ read = 0;
+ size = length + 1;
+ buf = (T *)malloc(size * sizeof(T));
+ };
+
+ bool isFull() {
+ return (((write + 1) % size) == read);
+ };
+
+ bool isEmpty() {
+ return (read == write);
+ };
+
+ void queue(T k) {
+ if (isFull()) {
+ read++;
+ read %= size;
+ }
+ buf[write++] = k;
+ write %= size;
+ }
+
+ void flush() {
+ read = 0;
+ write = 0;
+ }
+
+
+ uint32_t available() {
+ return (write >= read) ? write - read : size - read + write;
+ };
+
+ bool dequeue(T * c) {
+ bool empty = isEmpty();
+ if (!empty) {
+ *c = buf[read++];
+ read %= size;
+ }
+ return(!empty);
+ };
+
+private:
+ volatile uint32_t write;
+ volatile uint32_t read;
+ uint32_t size;
+ T * buf;
+};
+
+#endif
diff -r 000000000000 -r 51977f75213d main.cpp
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp Mon Jul 13 04:38:28 2015 +0000
@@ -0,0 +1,77 @@
+#include "mbed.h"
+#include "CBuffer.h"
+#include <stdarg.h>
+
+DigitalOut led1(LED1);
+DigitalOut led4(LED4);
+
+RawSerial pc(USBTX, USBRX); // tx, rx
+
+////////////////////////////////////////////////////////////////////////////////////////////////
+// mbed Async Debug Print
+Timeout timer_async_print;
+CircBuffer<char> buffer_async_print(1024);
+static char debug_line[64];
+
+void timerfunction_async_print()
+{
+ char c=0;
+
+ while ( buffer_async_print.available() ) {
+ buffer_async_print.dequeue(&c);
+ pc.putc(c);
+ }
+ timer_async_print.attach(&timerfunction_async_print, 0.1);
+}
+
+void async_print(const char *format, ...)
+{
+ va_list args;
+
+ va_start(args, format);
+
+ vsnprintf(debug_line, sizeof(debug_line), format, args);
+ int length = strlen(debug_line);
+
+ for (int i=0; i<length; i++)
+ buffer_async_print.queue(debug_line[i]);
+
+ va_end(args);
+}
+
+extern void (*p_async_print)(const char *format, ...);
+////////////////////////////////////////////////////////////////////////////////////////////////
+
+
+extern int rx_irq_counter;
+void pc_recv()
+{
+ led4 = !led4;
+ while(pc.readable()) {
+ pc.printf("RECV [%c]\r\n", pc.getc());
+ }
+}
+
+int main()
+{
+ for (int i=0; i<20; i++)
+ {
+ led1 = !led1;
+ led4 = !led4;
+ wait(0.05);
+ }
+
+ // Initialize AsyncPrint
+ timer_async_print.attach(&timerfunction_async_print, 0.1);
+ p_async_print = &async_print;
+
+ pc.baud(115200);
+ pc.printf("AsyncPrint Test. \r\n");
+
+ pc.attach(&pc_recv, Serial::RxIrq);
+
+ while(1) {
+ wait(1);
+ }
+}
+
diff -r 000000000000 -r 51977f75213d mbed-src.lib --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mbed-src.lib Mon Jul 13 04:38:28 2015 +0000 @@ -0,0 +1,1 @@ +http://developer.mbed.org/users/SteveKim/code/mbed-src/#3825fc0ad3d1