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 19:59:19 2015 +0000
Revision:
1:e3193760dd98
Parent:
0:59d6b70df5a4
Child:
2:dcf8e6db342d
some bugs fixed and additional primitives tested.

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 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 1:e3193760dd98 50 // filled rectangles
maxint 1:e3193760dd98 51 iStartUs=tPerformance.read_us();
maxint 1:e3193760dd98 52 disp.clear();
maxint 1:e3193760dd98 53 sprintf(buf,"fillRect...");
maxint 1:e3193760dd98 54 disp.drawString(DisplayN18::WIDTH / 2 - (DisplayN18::CHAR_WIDTH + DisplayN18::CHAR_SPACING) * strlen(buf) / 2, 0, buf, DisplayN18::GREEN, DisplayN18::BLACK);
maxint 1:e3193760dd98 55 for(int i=1; i<100; i+=2)
maxint 1:e3193760dd98 56 {
maxint 1:e3193760dd98 57 disp.fillRect(0, 0, i, i, DisplayN18::GREEN);
maxint 1:e3193760dd98 58 }
maxint 1:e3193760dd98 59 sprintf(buf,"fillRect:%u ", tPerformance.read_us()-iStartUs);
maxint 1:e3193760dd98 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 1:e3193760dd98 61 iPerfMs+=tPerformance.read_ms();
maxint 1:e3193760dd98 62 wait(0.5);
maxint 1:e3193760dd98 63
maxint 0:59d6b70df5a4 64 // circles
maxint 0:59d6b70df5a4 65 iStartUs=tPerformance.read_us();
maxint 0:59d6b70df5a4 66 disp.clear();
maxint 0:59d6b70df5a4 67 sprintf(buf,"drawCircle...");
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.drawCircle(i, i, i/2, DisplayN18::GREEN);
maxint 0:59d6b70df5a4 72 }
maxint 0:59d6b70df5a4 73 sprintf(buf,"drawCircle:%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 1:e3193760dd98 78 // filled circles
maxint 1:e3193760dd98 79 iStartUs=tPerformance.read_us();
maxint 1:e3193760dd98 80 disp.clear();
maxint 1:e3193760dd98 81 sprintf(buf,"fillCircle...");
maxint 1:e3193760dd98 82 disp.drawString(DisplayN18::WIDTH / 2 - (DisplayN18::CHAR_WIDTH + DisplayN18::CHAR_SPACING) * strlen(buf) / 2, 0, buf, DisplayN18::GREEN, DisplayN18::BLACK);
maxint 1:e3193760dd98 83 for(int i=1; i<100; i+=2)
maxint 1:e3193760dd98 84 {
maxint 1:e3193760dd98 85 disp.fillCircle(i, i, i/2, DisplayN18::GREEN);
maxint 1:e3193760dd98 86 }
maxint 1:e3193760dd98 87 sprintf(buf,"fillCircle:%u ", tPerformance.read_us()-iStartUs);
maxint 1:e3193760dd98 88 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 1:e3193760dd98 89 iPerfMs+=tPerformance.read_ms();
maxint 1:e3193760dd98 90 wait(0.5);
maxint 1:e3193760dd98 91
maxint 0:59d6b70df5a4 92 // lines
maxint 0:59d6b70df5a4 93 iStartUs=tPerformance.read_us();
maxint 0:59d6b70df5a4 94 disp.clear();
maxint 0:59d6b70df5a4 95 sprintf(buf,"drawLine...");
maxint 0:59d6b70df5a4 96 disp.drawString(DisplayN18::WIDTH / 2 - (DisplayN18::CHAR_WIDTH + DisplayN18::CHAR_SPACING) * strlen(buf) / 2, 0, buf, DisplayN18::GREEN, DisplayN18::BLACK);
maxint 0:59d6b70df5a4 97 for(int i=1; i<100; i++)
maxint 0:59d6b70df5a4 98 {
maxint 1:e3193760dd98 99 disp.drawLine(0, 0, i, 100, DisplayN18::GREEN);
maxint 0:59d6b70df5a4 100 }
maxint 0:59d6b70df5a4 101 sprintf(buf,"drawLine:%u ", tPerformance.read_us()-iStartUs);
maxint 0:59d6b70df5a4 102 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 103 iPerfMs+=tPerformance.read_ms();
maxint 0:59d6b70df5a4 104 wait(0.5);
maxint 0:59d6b70df5a4 105
maxint 0:59d6b70df5a4 106 disp.clear();
maxint 0:59d6b70df5a4 107 sprintf(buf,"Total:%u ms", iPerfMs);
maxint 0:59d6b70df5a4 108 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 109 wait(2);
maxint 0:59d6b70df5a4 110
maxint 0:59d6b70df5a4 111 return(iPerfMs);
maxint 0:59d6b70df5a4 112 }
maxint 0:59d6b70df5a4 113
maxint 0:59d6b70df5a4 114 int testDisplayST7735()
maxint 0:59d6b70df5a4 115 { // test ST7735 library functions
maxint 0:59d6b70df5a4 116 LCD_ST7735 disp(
maxint 0:59d6b70df5a4 117 P0_19,
maxint 0:59d6b70df5a4 118 P0_20,
maxint 0:59d6b70df5a4 119 P0_7,
maxint 0:59d6b70df5a4 120 P0_21,
maxint 0:59d6b70df5a4 121 P0_22,
maxint 0:59d6b70df5a4 122 P1_15,
maxint 0:59d6b70df5a4 123 P0_2,
maxint 0:59d6b70df5a4 124 LCD_ST7735::RGB);
maxint 0:59d6b70df5a4 125 Timer tPerformance; // timer used for measuring performance
maxint 0:59d6b70df5a4 126 char buf[256];
maxint 0:59d6b70df5a4 127 int iPerfMs=0;
maxint 0:59d6b70df5a4 128 int iStartUs=0;
maxint 0:59d6b70df5a4 129
maxint 0:59d6b70df5a4 130 tPerformance.start(); // start the timer
maxint 0:59d6b70df5a4 131 disp.setOrientation(LCD_ST7735::Rotate270, false);
maxint 0:59d6b70df5a4 132 disp.setForegroundColor(Color565::White);
maxint 0:59d6b70df5a4 133 disp.setBackgroundColor(Color565::Blue);
maxint 0:59d6b70df5a4 134 disp.clearScreen();
maxint 0:59d6b70df5a4 135
maxint 0:59d6b70df5a4 136 // text
maxint 0:59d6b70df5a4 137 iStartUs=tPerformance.read_us();
maxint 0:59d6b70df5a4 138 disp.clearScreen();
maxint 0:59d6b70df5a4 139 sprintf(buf,"drawString...");
maxint 0:59d6b70df5a4 140 for(int i=1; i<100; i++)
maxint 0:59d6b70df5a4 141 {
maxint 0:59d6b70df5a4 142 //disp.drawString(font_ibm, disp.getWidth / 2 - (8 + 0) * strlen(buf) / 2, i, buf);
maxint 0:59d6b70df5a4 143 disp.drawString(font_ibm, 160 / 2 - (8 + 0) * strlen(buf) / 2, i, buf);
maxint 0:59d6b70df5a4 144 }
maxint 0:59d6b70df5a4 145 sprintf(buf,"drawString:%u ", tPerformance.read_us()-iStartUs);
maxint 0:59d6b70df5a4 146 //disp.drawString(font_ibm, disp.getWidth / 2 - (8 + 0) * strlen(buf) / 2, disp.getHeight-8, buf);
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 // rectangles
maxint 0:59d6b70df5a4 152 iStartUs=tPerformance.read_us();
maxint 0:59d6b70df5a4 153 disp.clearScreen();
maxint 0:59d6b70df5a4 154 sprintf(buf,"drawRect...");
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.drawRect(0, 0, i, i, Color565::Blue);
maxint 0:59d6b70df5a4 159 }
maxint 0:59d6b70df5a4 160 sprintf(buf,"drawRect:%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 1:e3193760dd98 165 // filled rectangles
maxint 1:e3193760dd98 166 iStartUs=tPerformance.read_us();
maxint 1:e3193760dd98 167 disp.clearScreen();
maxint 1:e3193760dd98 168 sprintf(buf,"drawRect...");
maxint 1:e3193760dd98 169 disp.drawString(font_ibm, 160 / 2 - (8 + 0) * strlen(buf) / 2, 0, buf);
maxint 1:e3193760dd98 170 for(int i=1; i<100; i+=2)
maxint 1:e3193760dd98 171 {
maxint 1:e3193760dd98 172 disp.fillRect(0, 0, i, i, Color565::Yellow, Color565::Blue);
maxint 1:e3193760dd98 173 }
maxint 1:e3193760dd98 174 sprintf(buf,"drawRect:%u ", tPerformance.read_us()-iStartUs);
maxint 1:e3193760dd98 175 disp.drawString(font_ibm, 160 / 2 - (8 + 0) * strlen(buf) / 2, 128-8, buf);
maxint 1:e3193760dd98 176 iPerfMs+=tPerformance.read_ms();
maxint 1:e3193760dd98 177 wait(0.5);
maxint 1:e3193760dd98 178
maxint 0:59d6b70df5a4 179 // circles
maxint 0:59d6b70df5a4 180 iStartUs=tPerformance.read_us();
maxint 0:59d6b70df5a4 181 disp.clearScreen();
maxint 0:59d6b70df5a4 182 sprintf(buf,"drawCircle...");
maxint 0:59d6b70df5a4 183 disp.drawString(font_ibm, 160 / 2 - (8 + 0) * strlen(buf) / 2, 0, buf);
maxint 0:59d6b70df5a4 184 for(int i=1; i<100; i++)
maxint 0:59d6b70df5a4 185 {
maxint 0:59d6b70df5a4 186 disp.drawCircle(i, i, i/2, Color565::Blue);
maxint 0:59d6b70df5a4 187 }
maxint 0:59d6b70df5a4 188 sprintf(buf,"drawCircle:%u ", tPerformance.read_us()-iStartUs);
maxint 0:59d6b70df5a4 189 disp.drawString(font_ibm, 160 / 2 - (8 + 0) * strlen(buf) / 2, 128-8, buf);
maxint 0:59d6b70df5a4 190 iPerfMs+=tPerformance.read_ms();
maxint 0:59d6b70df5a4 191 wait(0.5);
maxint 0:59d6b70df5a4 192
maxint 1:e3193760dd98 193 // filled circles
maxint 1:e3193760dd98 194 iStartUs=tPerformance.read_us();
maxint 1:e3193760dd98 195 disp.clearScreen();
maxint 1:e3193760dd98 196 sprintf(buf,"fillCircle...");
maxint 1:e3193760dd98 197 disp.drawString(font_ibm, 160 / 2 - (8 + 0) * strlen(buf) / 2, 0, buf);
maxint 1:e3193760dd98 198 for(int i=1; i<100; i+=2)
maxint 1:e3193760dd98 199 {
maxint 1:e3193760dd98 200 disp.fillCircle(i, i, i/2, Color565::Yellow, Color565::Blue);
maxint 1:e3193760dd98 201 }
maxint 1:e3193760dd98 202 sprintf(buf,"fillCircle:%u ", tPerformance.read_us()-iStartUs);
maxint 1:e3193760dd98 203 disp.drawString(font_ibm, 160 / 2 - (8 + 0) * strlen(buf) / 2, 128-8, buf);
maxint 1:e3193760dd98 204 iPerfMs+=tPerformance.read_ms();
maxint 1:e3193760dd98 205 wait(0.5);
maxint 1:e3193760dd98 206
maxint 0:59d6b70df5a4 207 // lines
maxint 0:59d6b70df5a4 208 iStartUs=tPerformance.read_us();
maxint 0:59d6b70df5a4 209 disp.clearScreen();
maxint 0:59d6b70df5a4 210 sprintf(buf,"drawLine...");
maxint 0:59d6b70df5a4 211 disp.drawString(font_ibm, 160 / 2 - (8 + 0) * strlen(buf) / 2, 0, buf);
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 0:59d6b70df5a4 216 sprintf(buf,"drawLine:%u ", tPerformance.read_us()-iStartUs);
maxint 0:59d6b70df5a4 217 disp.drawString(font_ibm, 160 / 2 - (8 + 0) * strlen(buf) / 2, 128-8, buf);
maxint 0:59d6b70df5a4 218 iPerfMs+=tPerformance.read_ms();
maxint 0:59d6b70df5a4 219 wait(0.5);
maxint 0:59d6b70df5a4 220
maxint 0:59d6b70df5a4 221 disp.clearScreen();
maxint 0:59d6b70df5a4 222 sprintf(buf,"Total:%u ms", iPerfMs);
maxint 0:59d6b70df5a4 223 disp.drawString(font_ibm, 160 / 2 - (8 + 0) * strlen(buf) / 2, 128-8, buf);
maxint 0:59d6b70df5a4 224 wait(2);
maxint 0:59d6b70df5a4 225
maxint 0:59d6b70df5a4 226 return(iPerfMs);
maxint 0:59d6b70df5a4 227 }
maxint 0:59d6b70df5a4 228
maxint 0:59d6b70df5a4 229
maxint 0:59d6b70df5a4 230 main()
maxint 0:59d6b70df5a4 231 {
maxint 0:59d6b70df5a4 232 int iDisplayN18=testDisplayN18();
maxint 0:59d6b70df5a4 233 int iDisplayST7735=testDisplayST7735();
maxint 1:e3193760dd98 234 char buf[256];
maxint 1:e3193760dd98 235
maxint 1:e3193760dd98 236 DisplayN18 disp;
maxint 1:e3193760dd98 237 disp.clear();
maxint 1:e3193760dd98 238 sprintf(buf,"Totals --->");
maxint 1:e3193760dd98 239 disp.drawString(0, 0, buf, DisplayN18::WHITE, DisplayN18::BLACK);
maxint 1:e3193760dd98 240 sprintf(buf,"N18: %u ms", iDisplayN18);
maxint 1:e3193760dd98 241 disp.drawString(0, DisplayN18::CHAR_HEIGHT, buf, DisplayN18::GREEN, DisplayN18::BLACK);
maxint 1:e3193760dd98 242 sprintf(buf,"ST7735: %u ms", iDisplayST7735);
maxint 1:e3193760dd98 243 disp.drawString(0, 2*DisplayN18::CHAR_HEIGHT, buf, DisplayN18::BLUE, DisplayN18::BLACK);
maxint 1:e3193760dd98 244
maxint 0:59d6b70df5a4 245
maxint 0:59d6b70df5a4 246 DigitalOut led1(P0_9, false);
maxint 1:e3193760dd98 247 DigitalOut led2(P0_8, true);
maxint 0:59d6b70df5a4 248
maxint 0:59d6b70df5a4 249 while (true) {
maxint 0:59d6b70df5a4 250 led1 = !led1;
maxint 1:e3193760dd98 251 led2 = !led2;
maxint 0:59d6b70df5a4 252 wait(.5);
maxint 0:59d6b70df5a4 253 }
maxint 0:59d6b70df5a4 254
maxint 0:59d6b70df5a4 255 }