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@2:dcf8e6db342d, 2015-01-16 (annotated)
- Committer:
- maxint
- Date:
- Fri Jan 16 21:41:09 2015 +0000
- Revision:
- 2:dcf8e6db342d
- Parent:
- 1:e3193760dd98
Added bottomPrintf_xxx function to make the tests slightly more readable. Tiny bit of cleaning up the test functions.
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
maxint | 0:59d6b70df5a4 | 1 | //////////////////////// |
maxint | 0:59d6b70df5a4 | 2 | // |
maxint | 1:e3193760dd98 | 3 | // Simple program for the RETRO to compare the performance of the DisplayN18 and LCD_ST7735 libraries |
maxint | 0:59d6b70df5a4 | 4 | // |
maxint | 0:59d6b70df5a4 | 5 | /////////////////////// |
maxint | 0:59d6b70df5a4 | 6 | |
maxint | 2:dcf8e6db342d | 7 | #include <stdarg.h> |
maxint | 0:59d6b70df5a4 | 8 | #include "mbed.h" |
maxint | 0:59d6b70df5a4 | 9 | #include "DisplayN18.h" |
maxint | 0:59d6b70df5a4 | 10 | #include "Color565.h" |
maxint | 0:59d6b70df5a4 | 11 | #include "font_IBM.h" |
maxint | 0:59d6b70df5a4 | 12 | #include "LCD_ST7735.h" |
maxint | 0:59d6b70df5a4 | 13 | |
maxint | 2:dcf8e6db342d | 14 | void bottomPrintf_N18(DisplayN18 &disp, const char *szFormat, ...) |
maxint | 2:dcf8e6db342d | 15 | { |
maxint | 2:dcf8e6db342d | 16 | char szBuffer[256]; |
maxint | 2:dcf8e6db342d | 17 | va_list args; |
maxint | 2:dcf8e6db342d | 18 | |
maxint | 2:dcf8e6db342d | 19 | va_start(args, szFormat); |
maxint | 2:dcf8e6db342d | 20 | vsprintf(szBuffer, szFormat, args); |
maxint | 2:dcf8e6db342d | 21 | va_end(args); |
maxint | 2:dcf8e6db342d | 22 | disp.drawString(DisplayN18::WIDTH / 2 - (DisplayN18::CHAR_WIDTH + DisplayN18::CHAR_SPACING) * strlen(szBuffer) / 2, DisplayN18::HEIGHT-DisplayN18::CHAR_HEIGHT, szBuffer, DisplayN18::GREEN, DisplayN18::BLACK); |
maxint | 2:dcf8e6db342d | 23 | } |
maxint | 2:dcf8e6db342d | 24 | |
maxint | 0:59d6b70df5a4 | 25 | int testDisplayN18() |
maxint | 0:59d6b70df5a4 | 26 | { // test N18 library functions |
maxint | 0:59d6b70df5a4 | 27 | DisplayN18 disp; |
maxint | 0:59d6b70df5a4 | 28 | Timer tPerformance; // timer used for measuring performance |
maxint | 2:dcf8e6db342d | 29 | char szTest[]="123TestText456"; |
maxint | 0:59d6b70df5a4 | 30 | int iPerfMs=0; |
maxint | 0:59d6b70df5a4 | 31 | int iStartUs=0; |
maxint | 0:59d6b70df5a4 | 32 | |
maxint | 0:59d6b70df5a4 | 33 | tPerformance.start(); // start the timer |
maxint | 0:59d6b70df5a4 | 34 | |
maxint | 0:59d6b70df5a4 | 35 | // text |
maxint | 0:59d6b70df5a4 | 36 | iStartUs=tPerformance.read_us(); |
maxint | 0:59d6b70df5a4 | 37 | disp.clear(); |
maxint | 2:dcf8e6db342d | 38 | bottomPrintf_N18(disp, "drawString..."); |
maxint | 0:59d6b70df5a4 | 39 | for(int i=1; i<100; i++) |
maxint | 0:59d6b70df5a4 | 40 | { |
maxint | 2:dcf8e6db342d | 41 | disp.drawString(DisplayN18::WIDTH / 2 - (DisplayN18::CHAR_WIDTH + DisplayN18::CHAR_SPACING) * strlen(szTest) / 2, i, szTest, DisplayN18::GREEN, DisplayN18::BLACK); |
maxint | 0:59d6b70df5a4 | 42 | } |
maxint | 2:dcf8e6db342d | 43 | bottomPrintf_N18(disp, "drawString:%u ", tPerformance.read_us()-iStartUs); |
maxint | 0:59d6b70df5a4 | 44 | iPerfMs+=tPerformance.read_ms(); |
maxint | 0:59d6b70df5a4 | 45 | wait(0.5); |
maxint | 0:59d6b70df5a4 | 46 | |
maxint | 0:59d6b70df5a4 | 47 | // rectangles |
maxint | 0:59d6b70df5a4 | 48 | iStartUs=tPerformance.read_us(); |
maxint | 0:59d6b70df5a4 | 49 | disp.clear(); |
maxint | 2:dcf8e6db342d | 50 | bottomPrintf_N18(disp, "drawRect..."); |
maxint | 0:59d6b70df5a4 | 51 | for(int i=1; i<100; i++) |
maxint | 0:59d6b70df5a4 | 52 | { |
maxint | 0:59d6b70df5a4 | 53 | disp.drawRect(0, 0, i, i, DisplayN18::GREEN); |
maxint | 0:59d6b70df5a4 | 54 | } |
maxint | 2:dcf8e6db342d | 55 | bottomPrintf_N18(disp, "drawRect:%u ", tPerformance.read_us()-iStartUs); |
maxint | 0:59d6b70df5a4 | 56 | iPerfMs+=tPerformance.read_ms(); |
maxint | 0:59d6b70df5a4 | 57 | wait(0.5); |
maxint | 0:59d6b70df5a4 | 58 | |
maxint | 1:e3193760dd98 | 59 | // filled rectangles |
maxint | 1:e3193760dd98 | 60 | iStartUs=tPerformance.read_us(); |
maxint | 1:e3193760dd98 | 61 | disp.clear(); |
maxint | 2:dcf8e6db342d | 62 | bottomPrintf_N18(disp, "fillRect..."); |
maxint | 1:e3193760dd98 | 63 | for(int i=1; i<100; i+=2) |
maxint | 1:e3193760dd98 | 64 | { |
maxint | 1:e3193760dd98 | 65 | disp.fillRect(0, 0, i, i, DisplayN18::GREEN); |
maxint | 1:e3193760dd98 | 66 | } |
maxint | 2:dcf8e6db342d | 67 | bottomPrintf_N18(disp, "fillRect:%u ", tPerformance.read_us()-iStartUs); |
maxint | 1:e3193760dd98 | 68 | iPerfMs+=tPerformance.read_ms(); |
maxint | 1:e3193760dd98 | 69 | wait(0.5); |
maxint | 1:e3193760dd98 | 70 | |
maxint | 0:59d6b70df5a4 | 71 | // circles |
maxint | 0:59d6b70df5a4 | 72 | iStartUs=tPerformance.read_us(); |
maxint | 0:59d6b70df5a4 | 73 | disp.clear(); |
maxint | 2:dcf8e6db342d | 74 | bottomPrintf_N18(disp, "drawCircle..."); |
maxint | 0:59d6b70df5a4 | 75 | for(int i=1; i<100; i++) |
maxint | 0:59d6b70df5a4 | 76 | { |
maxint | 0:59d6b70df5a4 | 77 | disp.drawCircle(i, i, i/2, DisplayN18::GREEN); |
maxint | 0:59d6b70df5a4 | 78 | } |
maxint | 2:dcf8e6db342d | 79 | bottomPrintf_N18(disp, "drawCircle:%u ", tPerformance.read_us()-iStartUs); |
maxint | 0:59d6b70df5a4 | 80 | iPerfMs+=tPerformance.read_ms(); |
maxint | 0:59d6b70df5a4 | 81 | wait(0.5); |
maxint | 0:59d6b70df5a4 | 82 | |
maxint | 1:e3193760dd98 | 83 | // filled circles |
maxint | 1:e3193760dd98 | 84 | iStartUs=tPerformance.read_us(); |
maxint | 1:e3193760dd98 | 85 | disp.clear(); |
maxint | 2:dcf8e6db342d | 86 | bottomPrintf_N18(disp, "fillCircle..."); |
maxint | 1:e3193760dd98 | 87 | for(int i=1; i<100; i+=2) |
maxint | 1:e3193760dd98 | 88 | { |
maxint | 1:e3193760dd98 | 89 | disp.fillCircle(i, i, i/2, DisplayN18::GREEN); |
maxint | 1:e3193760dd98 | 90 | } |
maxint | 2:dcf8e6db342d | 91 | bottomPrintf_N18(disp, "fillCircle:%u ", tPerformance.read_us()-iStartUs); |
maxint | 1:e3193760dd98 | 92 | iPerfMs+=tPerformance.read_ms(); |
maxint | 1:e3193760dd98 | 93 | wait(0.5); |
maxint | 1:e3193760dd98 | 94 | |
maxint | 0:59d6b70df5a4 | 95 | // lines |
maxint | 0:59d6b70df5a4 | 96 | iStartUs=tPerformance.read_us(); |
maxint | 0:59d6b70df5a4 | 97 | disp.clear(); |
maxint | 2:dcf8e6db342d | 98 | bottomPrintf_N18(disp, "drawLine..."); |
maxint | 0:59d6b70df5a4 | 99 | for(int i=1; i<100; i++) |
maxint | 0:59d6b70df5a4 | 100 | { |
maxint | 1:e3193760dd98 | 101 | disp.drawLine(0, 0, i, 100, DisplayN18::GREEN); |
maxint | 0:59d6b70df5a4 | 102 | } |
maxint | 2:dcf8e6db342d | 103 | bottomPrintf_N18(disp, "drawLine:%u ", tPerformance.read_us()-iStartUs); |
maxint | 0:59d6b70df5a4 | 104 | iPerfMs+=tPerformance.read_ms(); |
maxint | 0:59d6b70df5a4 | 105 | wait(0.5); |
maxint | 0:59d6b70df5a4 | 106 | |
maxint | 0:59d6b70df5a4 | 107 | disp.clear(); |
maxint | 2:dcf8e6db342d | 108 | bottomPrintf_N18(disp, "Total:%u ms", iPerfMs); |
maxint | 0:59d6b70df5a4 | 109 | wait(2); |
maxint | 0:59d6b70df5a4 | 110 | |
maxint | 0:59d6b70df5a4 | 111 | return(iPerfMs); |
maxint | 0:59d6b70df5a4 | 112 | } |
maxint | 0:59d6b70df5a4 | 113 | |
maxint | 2:dcf8e6db342d | 114 | void bottomPrintf_ST7735(LCD_ST7735 &disp, const char *szFormat, ...) |
maxint | 2:dcf8e6db342d | 115 | { |
maxint | 2:dcf8e6db342d | 116 | char szBuffer[256]; |
maxint | 2:dcf8e6db342d | 117 | va_list args; |
maxint | 2:dcf8e6db342d | 118 | |
maxint | 2:dcf8e6db342d | 119 | va_start(args, szFormat); |
maxint | 2:dcf8e6db342d | 120 | vsprintf(szBuffer, szFormat, args); |
maxint | 2:dcf8e6db342d | 121 | va_end(args); |
maxint | 2:dcf8e6db342d | 122 | disp.drawString(font_ibm, disp.getWidth() / 2 - (8 + 0) * strlen(szBuffer) / 2, disp.getHeight()-8, szBuffer); |
maxint | 2:dcf8e6db342d | 123 | } |
maxint | 2:dcf8e6db342d | 124 | |
maxint | 0:59d6b70df5a4 | 125 | int testDisplayST7735() |
maxint | 0:59d6b70df5a4 | 126 | { // test ST7735 library functions |
maxint | 0:59d6b70df5a4 | 127 | LCD_ST7735 disp( |
maxint | 0:59d6b70df5a4 | 128 | P0_19, |
maxint | 0:59d6b70df5a4 | 129 | P0_20, |
maxint | 0:59d6b70df5a4 | 130 | P0_7, |
maxint | 0:59d6b70df5a4 | 131 | P0_21, |
maxint | 0:59d6b70df5a4 | 132 | P0_22, |
maxint | 0:59d6b70df5a4 | 133 | P1_15, |
maxint | 0:59d6b70df5a4 | 134 | P0_2, |
maxint | 0:59d6b70df5a4 | 135 | LCD_ST7735::RGB); |
maxint | 0:59d6b70df5a4 | 136 | Timer tPerformance; // timer used for measuring performance |
maxint | 2:dcf8e6db342d | 137 | char szTest[]="123TestText456"; |
maxint | 0:59d6b70df5a4 | 138 | int iPerfMs=0; |
maxint | 0:59d6b70df5a4 | 139 | int iStartUs=0; |
maxint | 0:59d6b70df5a4 | 140 | |
maxint | 0:59d6b70df5a4 | 141 | tPerformance.start(); // start the timer |
maxint | 0:59d6b70df5a4 | 142 | disp.setOrientation(LCD_ST7735::Rotate270, false); |
maxint | 2:dcf8e6db342d | 143 | disp.setForegroundColor(Color565::Blue); |
maxint | 2:dcf8e6db342d | 144 | disp.setBackgroundColor(Color565::Black); |
maxint | 0:59d6b70df5a4 | 145 | disp.clearScreen(); |
maxint | 0:59d6b70df5a4 | 146 | |
maxint | 0:59d6b70df5a4 | 147 | // text |
maxint | 0:59d6b70df5a4 | 148 | iStartUs=tPerformance.read_us(); |
maxint | 0:59d6b70df5a4 | 149 | disp.clearScreen(); |
maxint | 2:dcf8e6db342d | 150 | bottomPrintf_ST7735(disp, "drawString..."); |
maxint | 0:59d6b70df5a4 | 151 | for(int i=1; i<100; i++) |
maxint | 0:59d6b70df5a4 | 152 | { |
maxint | 0:59d6b70df5a4 | 153 | //disp.drawString(font_ibm, disp.getWidth / 2 - (8 + 0) * strlen(buf) / 2, i, buf); |
maxint | 2:dcf8e6db342d | 154 | disp.drawString(font_ibm, 160 / 2 - (8 + 0) * strlen(szTest) / 2, i, szTest); |
maxint | 0:59d6b70df5a4 | 155 | } |
maxint | 2:dcf8e6db342d | 156 | bottomPrintf_ST7735(disp, "drawString:%u ", tPerformance.read_us()-iStartUs); |
maxint | 0:59d6b70df5a4 | 157 | iPerfMs+=tPerformance.read_ms(); |
maxint | 0:59d6b70df5a4 | 158 | wait(0.5); |
maxint | 0:59d6b70df5a4 | 159 | |
maxint | 0:59d6b70df5a4 | 160 | // rectangles |
maxint | 0:59d6b70df5a4 | 161 | iStartUs=tPerformance.read_us(); |
maxint | 0:59d6b70df5a4 | 162 | disp.clearScreen(); |
maxint | 2:dcf8e6db342d | 163 | bottomPrintf_ST7735(disp, "drawRect..."); |
maxint | 0:59d6b70df5a4 | 164 | for(int i=1; i<100; i++) |
maxint | 0:59d6b70df5a4 | 165 | { |
maxint | 0:59d6b70df5a4 | 166 | disp.drawRect(0, 0, i, i, Color565::Blue); |
maxint | 0:59d6b70df5a4 | 167 | } |
maxint | 2:dcf8e6db342d | 168 | bottomPrintf_ST7735(disp, "drawRect:%u ", tPerformance.read_us()-iStartUs); |
maxint | 0:59d6b70df5a4 | 169 | iPerfMs+=tPerformance.read_ms(); |
maxint | 0:59d6b70df5a4 | 170 | wait(0.5); |
maxint | 0:59d6b70df5a4 | 171 | |
maxint | 1:e3193760dd98 | 172 | // filled rectangles |
maxint | 1:e3193760dd98 | 173 | iStartUs=tPerformance.read_us(); |
maxint | 1:e3193760dd98 | 174 | disp.clearScreen(); |
maxint | 2:dcf8e6db342d | 175 | bottomPrintf_ST7735(disp, "fillRect..."); |
maxint | 1:e3193760dd98 | 176 | for(int i=1; i<100; i+=2) |
maxint | 1:e3193760dd98 | 177 | { |
maxint | 1:e3193760dd98 | 178 | disp.fillRect(0, 0, i, i, Color565::Yellow, Color565::Blue); |
maxint | 1:e3193760dd98 | 179 | } |
maxint | 2:dcf8e6db342d | 180 | bottomPrintf_ST7735(disp, "fillRect:%u ", tPerformance.read_us()-iStartUs); |
maxint | 1:e3193760dd98 | 181 | iPerfMs+=tPerformance.read_ms(); |
maxint | 1:e3193760dd98 | 182 | wait(0.5); |
maxint | 1:e3193760dd98 | 183 | |
maxint | 0:59d6b70df5a4 | 184 | // circles |
maxint | 0:59d6b70df5a4 | 185 | iStartUs=tPerformance.read_us(); |
maxint | 0:59d6b70df5a4 | 186 | disp.clearScreen(); |
maxint | 2:dcf8e6db342d | 187 | bottomPrintf_ST7735(disp, "drawCircle..."); |
maxint | 0:59d6b70df5a4 | 188 | for(int i=1; i<100; i++) |
maxint | 0:59d6b70df5a4 | 189 | { |
maxint | 0:59d6b70df5a4 | 190 | disp.drawCircle(i, i, i/2, Color565::Blue); |
maxint | 0:59d6b70df5a4 | 191 | } |
maxint | 2:dcf8e6db342d | 192 | bottomPrintf_ST7735(disp, "drawCircle:%u ", tPerformance.read_us()-iStartUs); |
maxint | 0:59d6b70df5a4 | 193 | iPerfMs+=tPerformance.read_ms(); |
maxint | 0:59d6b70df5a4 | 194 | wait(0.5); |
maxint | 0:59d6b70df5a4 | 195 | |
maxint | 1:e3193760dd98 | 196 | // filled circles |
maxint | 1:e3193760dd98 | 197 | iStartUs=tPerformance.read_us(); |
maxint | 1:e3193760dd98 | 198 | disp.clearScreen(); |
maxint | 2:dcf8e6db342d | 199 | bottomPrintf_ST7735(disp, "fillCircle..."); |
maxint | 1:e3193760dd98 | 200 | for(int i=1; i<100; i+=2) |
maxint | 1:e3193760dd98 | 201 | { |
maxint | 1:e3193760dd98 | 202 | disp.fillCircle(i, i, i/2, Color565::Yellow, Color565::Blue); |
maxint | 1:e3193760dd98 | 203 | } |
maxint | 2:dcf8e6db342d | 204 | bottomPrintf_ST7735(disp, "fillCircle:%u ", tPerformance.read_us()-iStartUs); |
maxint | 1:e3193760dd98 | 205 | iPerfMs+=tPerformance.read_ms(); |
maxint | 1:e3193760dd98 | 206 | wait(0.5); |
maxint | 1:e3193760dd98 | 207 | |
maxint | 0:59d6b70df5a4 | 208 | // lines |
maxint | 0:59d6b70df5a4 | 209 | iStartUs=tPerformance.read_us(); |
maxint | 0:59d6b70df5a4 | 210 | disp.clearScreen(); |
maxint | 2:dcf8e6db342d | 211 | bottomPrintf_ST7735(disp, "drawLine..."); |
maxint | 0:59d6b70df5a4 | 212 | for(int i=1; i<100; i++) |
maxint | 0:59d6b70df5a4 | 213 | { |
maxint | 1:e3193760dd98 | 214 | disp.drawLine(0, 0, i, 100, Color565::Blue); |
maxint | 0:59d6b70df5a4 | 215 | } |
maxint | 2:dcf8e6db342d | 216 | bottomPrintf_ST7735(disp, "drawLine:%u ", tPerformance.read_us()-iStartUs); |
maxint | 0:59d6b70df5a4 | 217 | iPerfMs+=tPerformance.read_ms(); |
maxint | 0:59d6b70df5a4 | 218 | wait(0.5); |
maxint | 0:59d6b70df5a4 | 219 | |
maxint | 0:59d6b70df5a4 | 220 | disp.clearScreen(); |
maxint | 2:dcf8e6db342d | 221 | bottomPrintf_ST7735(disp, "Total:%u ms", iPerfMs); |
maxint | 0:59d6b70df5a4 | 222 | wait(2); |
maxint | 0:59d6b70df5a4 | 223 | |
maxint | 0:59d6b70df5a4 | 224 | return(iPerfMs); |
maxint | 0:59d6b70df5a4 | 225 | } |
maxint | 0:59d6b70df5a4 | 226 | |
maxint | 0:59d6b70df5a4 | 227 | |
maxint | 0:59d6b70df5a4 | 228 | main() |
maxint | 0:59d6b70df5a4 | 229 | { |
maxint | 0:59d6b70df5a4 | 230 | int iDisplayN18=testDisplayN18(); |
maxint | 0:59d6b70df5a4 | 231 | int iDisplayST7735=testDisplayST7735(); |
maxint | 1:e3193760dd98 | 232 | char buf[256]; |
maxint | 1:e3193760dd98 | 233 | |
maxint | 1:e3193760dd98 | 234 | DisplayN18 disp; |
maxint | 1:e3193760dd98 | 235 | disp.clear(); |
maxint | 1:e3193760dd98 | 236 | sprintf(buf,"Totals --->"); |
maxint | 1:e3193760dd98 | 237 | disp.drawString(0, 0, buf, DisplayN18::WHITE, DisplayN18::BLACK); |
maxint | 1:e3193760dd98 | 238 | sprintf(buf,"N18: %u ms", iDisplayN18); |
maxint | 1:e3193760dd98 | 239 | disp.drawString(0, DisplayN18::CHAR_HEIGHT, buf, DisplayN18::GREEN, DisplayN18::BLACK); |
maxint | 1:e3193760dd98 | 240 | sprintf(buf,"ST7735: %u ms", iDisplayST7735); |
maxint | 1:e3193760dd98 | 241 | disp.drawString(0, 2*DisplayN18::CHAR_HEIGHT, buf, DisplayN18::BLUE, DisplayN18::BLACK); |
maxint | 1:e3193760dd98 | 242 | |
maxint | 0:59d6b70df5a4 | 243 | |
maxint | 0:59d6b70df5a4 | 244 | DigitalOut led1(P0_9, false); |
maxint | 1:e3193760dd98 | 245 | DigitalOut led2(P0_8, true); |
maxint | 0:59d6b70df5a4 | 246 | |
maxint | 0:59d6b70df5a4 | 247 | while (true) { |
maxint | 0:59d6b70df5a4 | 248 | led1 = !led1; |
maxint | 1:e3193760dd98 | 249 | led2 = !led2; |
maxint | 0:59d6b70df5a4 | 250 | wait(.5); |
maxint | 0:59d6b70df5a4 | 251 | } |
maxint | 0:59d6b70df5a4 | 252 | |
maxint | 0:59d6b70df5a4 | 253 | } |