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: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?

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