Simple program for the RETRO to compare the performance of the DisplayN18 and LCD_ST7735 libraries.
This is a very simple program for the RETRO to compare the performance of some of the primitives of the DisplayN18 and LCD_ST7735 libraries
WARNING - WARNING - WARNING
If you're sensitive to ugly coding techniques, lack of best practice, ignorance of proper design patterns, abuse of object orientation or to total disregards of any coding guidelines, then don't - I repeat - DON'T look at this code...
P.S. Regardless the performance, I do think the N18 library has a much nicer font!
main.cpp@0:59d6b70df5a4, 2015-01-16 (annotated)
- Committer:
- maxint
- Date:
- Fri Jan 16 19:18:45 2015 +0000
- Revision:
- 0:59d6b70df5a4
- Child:
- 1:e3193760dd98
Simple program fro the RETRO to compare the performance of the DisplayN18 and LCD_ST7735 libraries
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
maxint | 0:59d6b70df5a4 | 1 | //////////////////////// |
maxint | 0:59d6b70df5a4 | 2 | // |
maxint | 0:59d6b70df5a4 | 3 | // Simple program to compare the performance of the DisplayN18 and LCD_ST7735 libraries |
maxint | 0:59d6b70df5a4 | 4 | // |
maxint | 0:59d6b70df5a4 | 5 | /////////////////////// |
maxint | 0:59d6b70df5a4 | 6 | |
maxint | 0:59d6b70df5a4 | 7 | #include "mbed.h" |
maxint | 0:59d6b70df5a4 | 8 | #include "DisplayN18.h" |
maxint | 0:59d6b70df5a4 | 9 | #include "Color565.h" |
maxint | 0:59d6b70df5a4 | 10 | #include "font_IBM.h" |
maxint | 0:59d6b70df5a4 | 11 | #include "LCD_ST7735.h" |
maxint | 0:59d6b70df5a4 | 12 | |
maxint | 0:59d6b70df5a4 | 13 | int testDisplayN18() |
maxint | 0:59d6b70df5a4 | 14 | { // test N18 library functions |
maxint | 0:59d6b70df5a4 | 15 | DisplayN18 disp; |
maxint | 0:59d6b70df5a4 | 16 | Timer tPerformance; // timer used for measuring performance |
maxint | 0:59d6b70df5a4 | 17 | char buf[256]; |
maxint | 0:59d6b70df5a4 | 18 | int iPerfMs=0; |
maxint | 0:59d6b70df5a4 | 19 | int iStartUs=0; |
maxint | 0:59d6b70df5a4 | 20 | |
maxint | 0:59d6b70df5a4 | 21 | tPerformance.start(); // start the timer |
maxint | 0:59d6b70df5a4 | 22 | |
maxint | 0:59d6b70df5a4 | 23 | // text |
maxint | 0:59d6b70df5a4 | 24 | iStartUs=tPerformance.read_us(); |
maxint | 0:59d6b70df5a4 | 25 | disp.clear(); |
maxint | 0:59d6b70df5a4 | 26 | sprintf(buf,"drawString..."); |
maxint | 0:59d6b70df5a4 | 27 | for(int i=1; i<100; i++) |
maxint | 0:59d6b70df5a4 | 28 | { |
maxint | 0:59d6b70df5a4 | 29 | disp.drawString(DisplayN18::WIDTH / 2 - (DisplayN18::CHAR_WIDTH + DisplayN18::CHAR_SPACING) * strlen(buf) / 2, i, buf, DisplayN18::GREEN, DisplayN18::BLACK); |
maxint | 0:59d6b70df5a4 | 30 | } |
maxint | 0:59d6b70df5a4 | 31 | sprintf(buf,"drawString:%u ", tPerformance.read_us()-iStartUs); |
maxint | 0:59d6b70df5a4 | 32 | disp.drawString(DisplayN18::WIDTH / 2 - (DisplayN18::CHAR_WIDTH + DisplayN18::CHAR_SPACING) * strlen(buf) / 2, DisplayN18::HEIGHT-DisplayN18::CHAR_HEIGHT, buf, DisplayN18::GREEN, DisplayN18::BLACK); |
maxint | 0:59d6b70df5a4 | 33 | iPerfMs+=tPerformance.read_ms(); |
maxint | 0:59d6b70df5a4 | 34 | wait(0.5); |
maxint | 0:59d6b70df5a4 | 35 | |
maxint | 0:59d6b70df5a4 | 36 | // rectangles |
maxint | 0:59d6b70df5a4 | 37 | iStartUs=tPerformance.read_us(); |
maxint | 0:59d6b70df5a4 | 38 | disp.clear(); |
maxint | 0:59d6b70df5a4 | 39 | sprintf(buf,"drawRect..."); |
maxint | 0:59d6b70df5a4 | 40 | disp.drawString(DisplayN18::WIDTH / 2 - (DisplayN18::CHAR_WIDTH + DisplayN18::CHAR_SPACING) * strlen(buf) / 2, 0, buf, DisplayN18::GREEN, DisplayN18::BLACK); |
maxint | 0:59d6b70df5a4 | 41 | for(int i=1; i<100; i++) |
maxint | 0:59d6b70df5a4 | 42 | { |
maxint | 0:59d6b70df5a4 | 43 | disp.drawRect(0, 0, i, i, DisplayN18::GREEN); |
maxint | 0:59d6b70df5a4 | 44 | } |
maxint | 0:59d6b70df5a4 | 45 | sprintf(buf,"drawRect:%u ", tPerformance.read_us()-iStartUs); |
maxint | 0:59d6b70df5a4 | 46 | disp.drawString(DisplayN18::WIDTH / 2 - (DisplayN18::CHAR_WIDTH + DisplayN18::CHAR_SPACING) * strlen(buf) / 2, DisplayN18::HEIGHT-DisplayN18::CHAR_HEIGHT, buf, DisplayN18::GREEN, DisplayN18::BLACK); |
maxint | 0:59d6b70df5a4 | 47 | iPerfMs+=tPerformance.read_ms(); |
maxint | 0:59d6b70df5a4 | 48 | wait(0.5); |
maxint | 0:59d6b70df5a4 | 49 | |
maxint | 0:59d6b70df5a4 | 50 | // circles |
maxint | 0:59d6b70df5a4 | 51 | iStartUs=tPerformance.read_us(); |
maxint | 0:59d6b70df5a4 | 52 | disp.clear(); |
maxint | 0:59d6b70df5a4 | 53 | sprintf(buf,"drawCircle..."); |
maxint | 0:59d6b70df5a4 | 54 | disp.drawString(DisplayN18::WIDTH / 2 - (DisplayN18::CHAR_WIDTH + DisplayN18::CHAR_SPACING) * strlen(buf) / 2, 0, buf, DisplayN18::GREEN, DisplayN18::BLACK); |
maxint | 0:59d6b70df5a4 | 55 | for(int i=1; i<100; i++) |
maxint | 0:59d6b70df5a4 | 56 | { |
maxint | 0:59d6b70df5a4 | 57 | disp.drawCircle(i, i, i/2, DisplayN18::GREEN); |
maxint | 0:59d6b70df5a4 | 58 | } |
maxint | 0:59d6b70df5a4 | 59 | sprintf(buf,"drawCircle:%u ", tPerformance.read_us()-iStartUs); |
maxint | 0:59d6b70df5a4 | 60 | disp.drawString(DisplayN18::WIDTH / 2 - (DisplayN18::CHAR_WIDTH + DisplayN18::CHAR_SPACING) * strlen(buf) / 2, DisplayN18::HEIGHT-DisplayN18::CHAR_HEIGHT, buf, DisplayN18::GREEN, DisplayN18::BLACK); |
maxint | 0:59d6b70df5a4 | 61 | iPerfMs+=tPerformance.read_ms(); |
maxint | 0:59d6b70df5a4 | 62 | wait(0.5); |
maxint | 0:59d6b70df5a4 | 63 | |
maxint | 0:59d6b70df5a4 | 64 | // lines |
maxint | 0:59d6b70df5a4 | 65 | iStartUs=tPerformance.read_us(); |
maxint | 0:59d6b70df5a4 | 66 | disp.clear(); |
maxint | 0:59d6b70df5a4 | 67 | sprintf(buf,"drawLine..."); |
maxint | 0:59d6b70df5a4 | 68 | disp.drawString(DisplayN18::WIDTH / 2 - (DisplayN18::CHAR_WIDTH + DisplayN18::CHAR_SPACING) * strlen(buf) / 2, 0, buf, DisplayN18::GREEN, DisplayN18::BLACK); |
maxint | 0:59d6b70df5a4 | 69 | for(int i=1; i<100; i++) |
maxint | 0:59d6b70df5a4 | 70 | { |
maxint | 0:59d6b70df5a4 | 71 | disp.drawLine(0, 0, i, i, DisplayN18::GREEN); |
maxint | 0:59d6b70df5a4 | 72 | } |
maxint | 0:59d6b70df5a4 | 73 | sprintf(buf,"drawLine:%u ", tPerformance.read_us()-iStartUs); |
maxint | 0:59d6b70df5a4 | 74 | disp.drawString(DisplayN18::WIDTH / 2 - (DisplayN18::CHAR_WIDTH + DisplayN18::CHAR_SPACING) * strlen(buf) / 2, DisplayN18::HEIGHT-DisplayN18::CHAR_HEIGHT, buf, DisplayN18::GREEN, DisplayN18::BLACK); |
maxint | 0:59d6b70df5a4 | 75 | iPerfMs+=tPerformance.read_ms(); |
maxint | 0:59d6b70df5a4 | 76 | wait(0.5); |
maxint | 0:59d6b70df5a4 | 77 | |
maxint | 0:59d6b70df5a4 | 78 | disp.clear(); |
maxint | 0:59d6b70df5a4 | 79 | sprintf(buf,"Total:%u ms", iPerfMs); |
maxint | 0:59d6b70df5a4 | 80 | disp.drawString(DisplayN18::WIDTH / 2 - (DisplayN18::CHAR_WIDTH + DisplayN18::CHAR_SPACING) * strlen(buf) / 2, DisplayN18::HEIGHT-DisplayN18::CHAR_HEIGHT, buf, DisplayN18::GREEN, DisplayN18::BLACK); |
maxint | 0:59d6b70df5a4 | 81 | wait(2); |
maxint | 0:59d6b70df5a4 | 82 | |
maxint | 0:59d6b70df5a4 | 83 | return(iPerfMs); |
maxint | 0:59d6b70df5a4 | 84 | } |
maxint | 0:59d6b70df5a4 | 85 | |
maxint | 0:59d6b70df5a4 | 86 | int testDisplayST7735() |
maxint | 0:59d6b70df5a4 | 87 | { // test ST7735 library functions |
maxint | 0:59d6b70df5a4 | 88 | LCD_ST7735 disp( |
maxint | 0:59d6b70df5a4 | 89 | P0_19, |
maxint | 0:59d6b70df5a4 | 90 | P0_20, |
maxint | 0:59d6b70df5a4 | 91 | P0_7, |
maxint | 0:59d6b70df5a4 | 92 | P0_21, |
maxint | 0:59d6b70df5a4 | 93 | P0_22, |
maxint | 0:59d6b70df5a4 | 94 | P1_15, |
maxint | 0:59d6b70df5a4 | 95 | P0_2, |
maxint | 0:59d6b70df5a4 | 96 | LCD_ST7735::RGB); |
maxint | 0:59d6b70df5a4 | 97 | Timer tPerformance; // timer used for measuring performance |
maxint | 0:59d6b70df5a4 | 98 | char buf[256]; |
maxint | 0:59d6b70df5a4 | 99 | int iPerfMs=0; |
maxint | 0:59d6b70df5a4 | 100 | int iStartUs=0; |
maxint | 0:59d6b70df5a4 | 101 | |
maxint | 0:59d6b70df5a4 | 102 | tPerformance.start(); // start the timer |
maxint | 0:59d6b70df5a4 | 103 | disp.setOrientation(LCD_ST7735::Rotate270, false); |
maxint | 0:59d6b70df5a4 | 104 | disp.setForegroundColor(Color565::White); |
maxint | 0:59d6b70df5a4 | 105 | disp.setBackgroundColor(Color565::Blue); |
maxint | 0:59d6b70df5a4 | 106 | disp.clearScreen(); |
maxint | 0:59d6b70df5a4 | 107 | |
maxint | 0:59d6b70df5a4 | 108 | // text |
maxint | 0:59d6b70df5a4 | 109 | iStartUs=tPerformance.read_us(); |
maxint | 0:59d6b70df5a4 | 110 | disp.clearScreen(); |
maxint | 0:59d6b70df5a4 | 111 | sprintf(buf,"drawString..."); |
maxint | 0:59d6b70df5a4 | 112 | for(int i=1; i<100; i++) |
maxint | 0:59d6b70df5a4 | 113 | { |
maxint | 0:59d6b70df5a4 | 114 | //disp.drawString(font_ibm, disp.getWidth / 2 - (8 + 0) * strlen(buf) / 2, i, buf); |
maxint | 0:59d6b70df5a4 | 115 | disp.drawString(font_ibm, 160 / 2 - (8 + 0) * strlen(buf) / 2, i, buf); |
maxint | 0:59d6b70df5a4 | 116 | } |
maxint | 0:59d6b70df5a4 | 117 | sprintf(buf,"drawString:%u ", tPerformance.read_us()-iStartUs); |
maxint | 0:59d6b70df5a4 | 118 | //disp.drawString(font_ibm, disp.getWidth / 2 - (8 + 0) * strlen(buf) / 2, disp.getHeight-8, buf); |
maxint | 0:59d6b70df5a4 | 119 | disp.drawString(font_ibm, 160 / 2 - (8 + 0) * strlen(buf) / 2, 128-8, buf); |
maxint | 0:59d6b70df5a4 | 120 | iPerfMs+=tPerformance.read_ms(); |
maxint | 0:59d6b70df5a4 | 121 | wait(0.5); |
maxint | 0:59d6b70df5a4 | 122 | |
maxint | 0:59d6b70df5a4 | 123 | // rectangles |
maxint | 0:59d6b70df5a4 | 124 | iStartUs=tPerformance.read_us(); |
maxint | 0:59d6b70df5a4 | 125 | disp.clearScreen(); |
maxint | 0:59d6b70df5a4 | 126 | sprintf(buf,"drawRect..."); |
maxint | 0:59d6b70df5a4 | 127 | disp.drawString(font_ibm, 160 / 2 - (8 + 0) * strlen(buf) / 2, 0, buf); |
maxint | 0:59d6b70df5a4 | 128 | for(int i=1; i<100; i++) |
maxint | 0:59d6b70df5a4 | 129 | { |
maxint | 0:59d6b70df5a4 | 130 | disp.drawRect(0, 0, i, i, Color565::Blue); |
maxint | 0:59d6b70df5a4 | 131 | } |
maxint | 0:59d6b70df5a4 | 132 | sprintf(buf,"drawRect:%u ", tPerformance.read_us()-iStartUs); |
maxint | 0:59d6b70df5a4 | 133 | disp.drawString(font_ibm, 160 / 2 - (8 + 0) * strlen(buf) / 2, 128-8, buf); |
maxint | 0:59d6b70df5a4 | 134 | iPerfMs+=tPerformance.read_ms(); |
maxint | 0:59d6b70df5a4 | 135 | wait(0.5); |
maxint | 0:59d6b70df5a4 | 136 | |
maxint | 0:59d6b70df5a4 | 137 | // circles |
maxint | 0:59d6b70df5a4 | 138 | iStartUs=tPerformance.read_us(); |
maxint | 0:59d6b70df5a4 | 139 | disp.clearScreen(); |
maxint | 0:59d6b70df5a4 | 140 | sprintf(buf,"drawCircle..."); |
maxint | 0:59d6b70df5a4 | 141 | disp.drawString(font_ibm, 160 / 2 - (8 + 0) * strlen(buf) / 2, 0, buf); |
maxint | 0:59d6b70df5a4 | 142 | for(int i=1; i<100; i++) |
maxint | 0:59d6b70df5a4 | 143 | { |
maxint | 0:59d6b70df5a4 | 144 | disp.drawCircle(i, i, i/2, Color565::Blue); |
maxint | 0:59d6b70df5a4 | 145 | } |
maxint | 0:59d6b70df5a4 | 146 | sprintf(buf,"drawCircle:%u ", tPerformance.read_us()-iStartUs); |
maxint | 0:59d6b70df5a4 | 147 | disp.drawString(font_ibm, 160 / 2 - (8 + 0) * strlen(buf) / 2, 128-8, buf); |
maxint | 0:59d6b70df5a4 | 148 | iPerfMs+=tPerformance.read_ms(); |
maxint | 0:59d6b70df5a4 | 149 | wait(0.5); |
maxint | 0:59d6b70df5a4 | 150 | |
maxint | 0:59d6b70df5a4 | 151 | // lines |
maxint | 0:59d6b70df5a4 | 152 | iStartUs=tPerformance.read_us(); |
maxint | 0:59d6b70df5a4 | 153 | disp.clearScreen(); |
maxint | 0:59d6b70df5a4 | 154 | sprintf(buf,"drawLine..."); |
maxint | 0:59d6b70df5a4 | 155 | disp.drawString(font_ibm, 160 / 2 - (8 + 0) * strlen(buf) / 2, 0, buf); |
maxint | 0:59d6b70df5a4 | 156 | for(int i=1; i<100; i++) |
maxint | 0:59d6b70df5a4 | 157 | { |
maxint | 0:59d6b70df5a4 | 158 | disp.drawLine(0, 0, i, i, Color565::Blue); |
maxint | 0:59d6b70df5a4 | 159 | } |
maxint | 0:59d6b70df5a4 | 160 | sprintf(buf,"drawLine:%u ", tPerformance.read_us()-iStartUs); |
maxint | 0:59d6b70df5a4 | 161 | disp.drawString(font_ibm, 160 / 2 - (8 + 0) * strlen(buf) / 2, 128-8, buf); |
maxint | 0:59d6b70df5a4 | 162 | iPerfMs+=tPerformance.read_ms(); |
maxint | 0:59d6b70df5a4 | 163 | wait(0.5); |
maxint | 0:59d6b70df5a4 | 164 | |
maxint | 0:59d6b70df5a4 | 165 | disp.clearScreen(); |
maxint | 0:59d6b70df5a4 | 166 | sprintf(buf,"Total:%u ms", iPerfMs); |
maxint | 0:59d6b70df5a4 | 167 | disp.drawString(font_ibm, 160 / 2 - (8 + 0) * strlen(buf) / 2, 128-8, buf); |
maxint | 0:59d6b70df5a4 | 168 | wait(2); |
maxint | 0:59d6b70df5a4 | 169 | |
maxint | 0:59d6b70df5a4 | 170 | return(iPerfMs); |
maxint | 0:59d6b70df5a4 | 171 | } |
maxint | 0:59d6b70df5a4 | 172 | |
maxint | 0:59d6b70df5a4 | 173 | |
maxint | 0:59d6b70df5a4 | 174 | main() |
maxint | 0:59d6b70df5a4 | 175 | { |
maxint | 0:59d6b70df5a4 | 176 | int iDisplayN18=testDisplayN18(); |
maxint | 0:59d6b70df5a4 | 177 | int iDisplayST7735=testDisplayST7735(); |
maxint | 0:59d6b70df5a4 | 178 | |
maxint | 0:59d6b70df5a4 | 179 | DigitalOut led1(P0_9, false); |
maxint | 0:59d6b70df5a4 | 180 | |
maxint | 0:59d6b70df5a4 | 181 | while (true) { |
maxint | 0:59d6b70df5a4 | 182 | led1 = !led1; |
maxint | 0:59d6b70df5a4 | 183 | wait(.5); |
maxint | 0:59d6b70df5a4 | 184 | } |
maxint | 0:59d6b70df5a4 | 185 | |
maxint | 0:59d6b70df5a4 | 186 | } |