Simple program for the RETRO to compare the performance of the DisplayN18 and LCD_ST7735 libraries.

Dependencies:   LCD_ST7735 mbed

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!

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?

UserRevisionLine numberNew 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 }