Better Serial C++ class library with interrupt
Dependents: Dumb_box_rev2 mbed_GPSproject
iSerial class library can easy be used just by swapping Serial declarations.
API
| iSerial | |
Examples
#include "mbed.h"
#include "iSerial.h"
char s[] = "12345678901234567890123456789012345678901234567890";
int main() {
iSerial pc(USBTX,USBRX);
char* c = s;
while(1) {
pc.puts(s);
while(pc.readable()){
int ret = pc.getc();
if(ret)
*c++ = ret;
if(c >= s+sizeof(s)-1)
c = s;
}
wait(1);
}
}
Example 2
Comparing speed of ordinary Serial functions
#include "mbed.h"
#include "iSerial.h"
char s[] = "12345678901234567890123456789012345678901234567890"; // 50 bytes
int main() {
Timer t;
Serial pc(USBTX,USBRX);
pc.baud(921600);
t.reset();
t.start();
for(int i=0; i<30; i++) {
pc.printf(s);
wait(0.001);
}
t.stop();
int t1 = t.read_us();
pc.puts("\n\n\n");
iSerial ipc(USBTX,USBRX,NULL,1000,100); // try NOT to set the buffer over flowed
// iSerial ipc(USBTX,USBRX); // set as default = 100, 100
ipc.baud(921600);
t.reset();
t.start();
for(int i=0; i<30; i++) {
ipc.printf(s);
wait(0.001);
}
t.stop();
int t2 = t.read_us();
ipc.printf("\n\n\nThe time %d, %d [us] was taken.\n", t1, t2);
ipc.puts("End.");
ipc.flush();
}
iSerial.h@8:20759f992d48, 2012-09-03 (annotated)
- Committer:
- ykuroda
- Date:
- Mon Sep 03 17:59:00 2012 +0000
- Revision:
- 8:20759f992d48
- Parent:
- 7:5a25789c3b55
bugfix of rx interrupt
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| ykuroda | 3:d5353b68105f | 1 | // |
| ykuroda | 3:d5353b68105f | 2 | // iSerial.h ... Serial Driver with Interrupt Rec/Send |
| ykuroda | 3:d5353b68105f | 3 | // |
| ykuroda | 3:d5353b68105f | 4 | // Copyright 2012 Yoji KURODA |
| ykuroda | 3:d5353b68105f | 5 | // |
| ykuroda | 3:d5353b68105f | 6 | // 2009.11.13 ... Originally written by Y.Kuroda for Renesas H83664 |
| ykuroda | 3:d5353b68105f | 7 | // 2012.08.31 ... Code convert for mbed in C++ |
| ykuroda | 3:d5353b68105f | 8 | // |
| ykuroda | 3:d5353b68105f | 9 | #ifndef _ISERIAL_H |
| ykuroda | 3:d5353b68105f | 10 | #define _ISERIAL_H |
| ykuroda | 3:d5353b68105f | 11 | |
| ykuroda | 3:d5353b68105f | 12 | #include <string.h> |
| ykuroda | 3:d5353b68105f | 13 | #include "RingBuffer.h" |
| ykuroda | 3:d5353b68105f | 14 | |
| ykuroda | 3:d5353b68105f | 15 | |
| ykuroda | 3:d5353b68105f | 16 | class iSerial : public Serial { |
| ykuroda | 3:d5353b68105f | 17 | protected: |
| ykuroda | 3:d5353b68105f | 18 | |
| ykuroda | 5:d83fc550ccbc | 19 | PinName tx; |
| ykuroda | 5:d83fc550ccbc | 20 | PinName rx; |
| ykuroda | 4:b38ef9675d39 | 21 | const int txbufsize; |
| ykuroda | 4:b38ef9675d39 | 22 | const int rxbufsize; |
| ykuroda | 3:d5353b68105f | 23 | RingBuffer txbuf; |
| ykuroda | 3:d5353b68105f | 24 | RingBuffer rxbuf; |
| ykuroda | 4:b38ef9675d39 | 25 | char* str; |
| ykuroda | 3:d5353b68105f | 26 | |
| ykuroda | 3:d5353b68105f | 27 | void tx_handler(void); |
| ykuroda | 3:d5353b68105f | 28 | void rx_handler(void); |
| ykuroda | 5:d83fc550ccbc | 29 | void enable_uart_irq(void); |
| ykuroda | 7:5a25789c3b55 | 30 | void disable_uart_irq(void); |
| ykuroda | 3:d5353b68105f | 31 | |
| ykuroda | 3:d5353b68105f | 32 | public: |
| ykuroda | 3:d5353b68105f | 33 | |
| ykuroda | 3:d5353b68105f | 34 | enum TERMINL_CODES { CR=0x0D, LF=0x0A }; |
| ykuroda | 3:d5353b68105f | 35 | |
| ykuroda | 3:d5353b68105f | 36 | iSerial(PinName _tx, PinName _rx, const char *_name=NULL, int _txbufsize=100, int _rxbufsize=100); |
| ykuroda | 4:b38ef9675d39 | 37 | virtual ~iSerial(); |
| ykuroda | 3:d5353b68105f | 38 | |
| ykuroda | 3:d5353b68105f | 39 | short int putstr(const char* s); |
| ykuroda | 3:d5353b68105f | 40 | |
| ykuroda | 4:b38ef9675d39 | 41 | int readable(void); |
| ykuroda | 4:b38ef9675d39 | 42 | int getc(void); |
| ykuroda | 4:b38ef9675d39 | 43 | void putc(short ch); |
| ykuroda | 3:d5353b68105f | 44 | short int puts(const char* s); |
| ykuroda | 4:b38ef9675d39 | 45 | //void printf(); |
| ykuroda | 4:b38ef9675d39 | 46 | char* printf(const char* format, ...); |
| ykuroda | 6:8d4b95b90c3b | 47 | |
| ykuroda | 6:8d4b95b90c3b | 48 | void flush(void); |
| ykuroda | 3:d5353b68105f | 49 | }; |
| ykuroda | 3:d5353b68105f | 50 | |
| ykuroda | 3:d5353b68105f | 51 | |
| ykuroda | 3:d5353b68105f | 52 | #endif /* _SCI_H */ |
Yoji KURODA