Inherit from Serial and use software buffers for TX and RX. This allows the UART peripherals to operate in a IRQ driven mode. Overrides most (but not all) stdio functions as Serial did
Dependents: buffered_serial_test BLE_Police_HRM evena_BLE_Police_HRM df-2014-workshop-rfid-case-generator-k64f ... more
Example
#include "mbed.h" #include "BufferedSerial.h" BufferedSerial pc(USBTX, USBRX); int main() { pc.baud(115200); while(1) { Timer s; s.start(); pc.printf("Hello World - buff\n"); int buffered_time = s.read_us(); wait(0.1f); // give time for the buffer to empty s.reset(); printf("Hello World - poll\n"); int polled_time = s.read_us(); s.stop(); wait(0.1f); // give time for the buffer to empty pc.printf("printf buffered took %d us\n", buffered_time); pc.printf("printf polled took %d us\n", polled_time); wait(0.5f); } }
Diff: BufferedSerial.h
- Revision:
- 2:7e8a450a9101
- Parent:
- 1:57a11fb5d529
- Child:
- 3:6b76fcf27545
--- a/BufferedSerial.h Thu May 23 23:47:04 2013 +0000 +++ b/BufferedSerial.h Fri May 24 22:00:26 2013 +0000 @@ -73,8 +73,8 @@ class BufferedSerial : public Serial { private: - Buffer <char> _rxbuf; - Buffer <char> _txbuf; + Buffer <char> _rxbuf; + Buffer <char> _txbuf; void rxIrq(void); void txIrq(void); @@ -110,22 +110,28 @@ /** Write a single byte to the BufferedSerial Port. * @param c The byte to write to the Serial Port - * @return The byte that was written to the Serial Port + * @return The byte that was written to the Serial Port Buffer */ virtual int putc(int c); /** Write a string to the BufferedSerial Port. Must be NULL terminated * @param s The string to write to the Serial Port - * @return The number of bytes written to the Serial Port + * @return The number of bytes written to the Serial Port Buffer */ virtual int puts(const char *s); /** Write a formatted string to the BufferedSerial Port. * @param format The string + format specifiers to write to the Serial Port - * @return The number of bytes written to the Serial Port + * @return The number of bytes written to the Serial Port Buffer */ virtual int printf(const char* format, ...); + /** Write data to the Buffered Serial Port + * @param s A pointer to data to send + * @param length The amount of data being pointed to + * @return The number of bytes written to the Serial Port Buffer + */ + virtual ssize_t write(const void *s, std::size_t length); }; #endif