硬汉嵌入式论坛

 找回密码
 立即注册
查看: 1878|回复: 1
收起左侧

[emWin] emWin专用的驱动性能测试文件BASIC_DriverPerformance.c

[复制链接]

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115778
QQ
发表于 2019-5-15 15:16:59 | 显示全部楼层 |阅读模式

准备给H7测试下

  1. /*********************************************************************
  2. *                SEGGER Microcontroller GmbH & Co. KG                *
  3. *        Solutions for real time microcontroller applications        *
  4. **********************************************************************
  5. *                                                                    *
  6. *        (c) 1996 - 2017  SEGGER Microcontroller GmbH & Co. KG       *
  7. *                                                                    *
  8. *        Internet: www.segger.com    Support:  support@segger.com    *
  9. *                                                                    *
  10. **********************************************************************

  11. ** emWin V5.46 - Graphical user interface for embedded applications **
  12. All  Intellectual Property rights  in the Software belongs to  SEGGER.
  13. emWin is protected by  international copyright laws.  Knowledge of the
  14. source code may not be used to write a similar product.  This file may
  15. only be used in accordance with the following terms:

  16. The software has been licensed to  ARM LIMITED whose registered office
  17. is situated at  110 Fulbourn Road,  Cambridge CB1 9NJ,  England solely
  18. for  the  purposes  of  creating  libraries  for  ARM7, ARM9, Cortex-M
  19. series,  and   Cortex-R4   processor-based  devices,  sublicensed  and
  20. distributed as part of the  MDK-ARM  Professional  under the terms and
  21. conditions  of  the   End  User  License  supplied  with  the  MDK-ARM
  22. Professional.
  23. Full source code is available at: www.segger.com

  24. We appreciate your understanding and fairness.
  25. ----------------------------------------------------------------------
  26. Licensing information
  27. Licensor:                 SEGGER Software GmbH
  28. Licensed to:              ARM Ltd, 110 Fulbourn Road, CB1 9NJ Cambridge, UK
  29. Licensed SEGGER software: emWin
  30. License number:           GUI-00181
  31. License model:            LES-SLA-20007, Agreement, effective since October 1st 2011
  32. Licensed product:         MDK-ARM Professional
  33. Licensed platform:        ARM7/9, Cortex-M/R4
  34. Licensed number of seats: -
  35. ----------------------------------------------------------------------
  36. File        : BASIC_DriverPerformance.c
  37. Purpose     : Display driver performance test
  38. Requirements: WindowManager - ( )
  39.               MemoryDevices - ( )
  40.               AntiAliasing  - ( )
  41.               VNC-Server    - ( )
  42.               PNG-Library   - ( )
  43.               TrueTypeFonts - ( )
  44. ----------------------------------------------------------------------
  45. */

  46. #include <stdlib.h>
  47. #include <stdio.h>
  48. #include "GUI.h"

  49. /*********************************************************************
  50. *
  51. *       Defines
  52. *
  53. **********************************************************************
  54. */
  55. #define XSIZE_XBPP             64
  56. #define YSIZE_XBPP             8
  57. #define LCDTEST_MEASURE_PERIOD 1000

  58. //
  59. // Recommended memory to run the sample with adequate performance
  60. //
  61. #define RECOMMENDED_MEMORY (1024L * 5)

  62. /*********************************************************************
  63. *
  64. *       Types
  65. *
  66. **********************************************************************
  67. */
  68. typedef struct {
  69.   GUI_BITMAP  Bm;
  70.   U32         aPixels[XSIZE_XBPP * YSIZE_XBPP];
  71. } PARAM_XBPP;

  72. /*********************************************************************
  73. *
  74. *       Static data
  75. *
  76. **********************************************************************
  77. */
  78. static PARAM_XBPP _Param;

  79. static const GUI_COLOR _Colors_1bpp[] = {
  80. #if (GUI_USE_ARGB == 1)
  81.   0xFF000000, 0xFFFFFFFF
  82. #else
  83.   0x000000, 0xFFFFFF
  84. #endif
  85. };
  86. static const GUI_COLOR _Colors_2bpp[] = {
  87. #if (GUI_USE_ARGB == 1)
  88.   0xFF000000, 0xFF808080, 0xFFC0C0C0, 0xFFFFFFFF
  89. #else
  90.   0x000000, 0x808080, 0xC0C0C0, 0xFFFFFF
  91. #endif
  92. };
  93. static const GUI_COLOR _Colors_4bpp[] = {
  94. #if (GUI_USE_ARGB == 1)
  95.   0xFF000000, 0xFF800000, 0xFF008000, 0xFF808000,
  96.   0xFF000080, 0xFF800080, 0xFF008080, 0xFF808080,
  97.   0xFFC0C0C0, 0xFFFF0000, 0xFF00FF00, 0xFFFFFF00,
  98.   0xFF0000FF, 0xFFFF00FF, 0xFF00FFFF, 0xFFFFFFFF
  99. #else
  100.   0x000000, 0x000080, 0x008000, 0x008080,
  101.   0x800000, 0x800080, 0x808000, 0x808080,
  102.   0xC0C0C0, 0x0000FF, 0x00FF00, 0x00FFFF,
  103.   0xFF0000, 0xFF00FF, 0xFFFF00, 0xFFFFFF
  104. #endif
  105. };
  106. static const GUI_COLOR _Colors_8bpp[] = {
  107. #if (GUI_USE_ARGB == 1)
  108.   0xFF000000, 0xFF800000, 0xFF008000, 0xFF808000, 0xFF000080, 0xFF800080, 0xFF008080, 0xFFC0C0C0, 0xFFC0DCC0, 0xFFA6CAF0, 0xFF402000, 0xFF602000, 0xFF802000, 0xFFA02000, 0xFFC02000, 0xFFE02000,
  109.   0xFF004000, 0xFF204000, 0xFF404000, 0xFF604000, 0xFF804000, 0xFFA04000, 0xFFC04000, 0xFFE04000, 0xFF006000, 0xFF206000, 0xFF406000, 0xFF606000, 0xFF806000, 0xFFA06000, 0xFFC06000, 0xFFE06000,
  110.   0xFF008000, 0xFF208000, 0xFF408000, 0xFF608000, 0xFF808000, 0xFFA08000, 0xFFC08000, 0xFFE08000, 0xFF00A000, 0xFF20A000, 0xFF40A000, 0xFF60A000, 0xFF80A000, 0xFFA0A000, 0xFFC0A000, 0xFFE0A000,
  111.   0xFF00C000, 0xFF20C000, 0xFF40C000, 0xFF60C000, 0xFF80C000, 0xFFA0C000, 0xFFC0C000, 0xFFE0C000, 0xFF00E000, 0xFF20E000, 0xFF40E000, 0xFF60E000, 0xFF80E000, 0xFFA0E000, 0xFFC0E000, 0xFFE0E000,
  112.   0xFF000040, 0xFF200040, 0xFF400040, 0xFF600040, 0xFF800040, 0xFFA00040, 0xFFC00040, 0xFFE00040, 0xFF002040, 0xFF202040, 0xFF402040, 0xFF602040, 0xFF802040, 0xFFA02040, 0xFFC02040, 0xFFE02040,
  113.   0xFF004040, 0xFF204040, 0xFF404040, 0xFF604040, 0xFF804040, 0xFFA04040, 0xFFC04040, 0xFFE04040, 0xFF006040, 0xFF206040, 0xFF406040, 0xFF606040, 0xFF806040, 0xFFA06040, 0xFFC06040, 0xFFE06040,
  114.   0xFF008040, 0xFF208040, 0xFF408040, 0xFF608040, 0xFF808040, 0xFFA08040, 0xFFC08040, 0xFFE08040, 0xFF00A040, 0xFF20A040, 0xFF40A040, 0xFF60A040, 0xFF80A040, 0xFFA0A040, 0xFFC0A040, 0xFFE0A040,
  115.   0xFF00C040, 0xFF20C040, 0xFF40C040, 0xFF60C040, 0xFF80C040, 0xFFA0C040, 0xFFC0C040, 0xFFE0C040, 0xFF00E040, 0xFF20E040, 0xFF40E040, 0xFF60E040, 0xFF80E040, 0xFFA0E040, 0xFFC0E040, 0xFFE0E040,
  116.   0xFF000080, 0xFF200080, 0xFF400080, 0xFF600080, 0xFF800080, 0xFFA00080, 0xFFC00080, 0xFFE00080, 0xFF002080, 0xFF202080, 0xFF402080, 0xFF602080, 0xFF802080, 0xFFA02080, 0xFFC02080, 0xFFE02080,
  117.   0xFF004080, 0xFF204080, 0xFF404080, 0xFF604080, 0xFF804080, 0xFFA04080, 0xFFC04080, 0xFFE04080, 0xFF006080, 0xFF206080, 0xFF406080, 0xFF606080, 0xFF806080, 0xFFA06080, 0xFFC06080, 0xFFE06080,
  118.   0xFF008080, 0xFF208080, 0xFF408080, 0xFF608080, 0xFF808080, 0xFFA08080, 0xFFC08080, 0xFFE08080, 0xFF00A080, 0xFF20A080, 0xFF40A080, 0xFF60A080, 0xFF80A080, 0xFFA0A080, 0xFFC0A080, 0xFFE0A080,
  119.   0xFF00C080, 0xFF20C080, 0xFF40C080, 0xFF60C080, 0xFF80C080, 0xFFA0C080, 0xFFC0C080, 0xFFE0C080, 0xFF00E080, 0xFF20E080, 0xFF40E080, 0xFF60E080, 0xFF80E080, 0xFFA0E080, 0xFFC0E080, 0xFFE0E080,
  120.   0xFF0000C0, 0xFF2000C0, 0xFF4000C0, 0xFF6000C0, 0xFF8000C0, 0xFFA000C0, 0xFFC000C0, 0xFFE000C0, 0xFF0020C0, 0xFF2020C0, 0xFF4020C0, 0xFF6020C0, 0xFF8020C0, 0xFFA020C0, 0xFFC020C0, 0xFFE020C0,
  121.   0xFF0040C0, 0xFF2040C0, 0xFF4040C0, 0xFF6040C0, 0xFF8040C0, 0xFFA040C0, 0xFFC040C0, 0xFFE040C0, 0xFF0060C0, 0xFF2060C0, 0xFF4060C0, 0xFF6060C0, 0xFF8060C0, 0xFFA060C0, 0xFFC060C0, 0xFFE060C0,
  122.   0xFF0080C0, 0xFF2080C0, 0xFF4080C0, 0xFF6080C0, 0xFF8080C0, 0xFFA080C0, 0xFFC080C0, 0xFFE080C0, 0xFF00A0C0, 0xFF20A0C0, 0xFF40A0C0, 0xFF60A0C0, 0xFF80A0C0, 0xFFA0A0C0, 0xFFC0A0C0, 0xFFE0A0C0,
  123.   0xFF00C0C0, 0xFF20C0C0, 0xFF40C0C0, 0xFF60C0C0, 0xFF80C0C0, 0xFFA0C0C0, 0xFFFFFBF0, 0xFFA0A0A4, 0xFF808080, 0xFFFF0000, 0xFF00FF00, 0xFFFFFF00, 0xFF0000FF, 0xFFFF00FF, 0xFF00FFFF, 0xFFFFFFFF
  124. #else
  125.   0x000000, 0x000080, 0x008000, 0x008080, 0x800000, 0x800080, 0x808000, 0xC0C0C0, 0xC0DCC0, 0xF0CAA6, 0x002040, 0x002060, 0x002080, 0x0020A0, 0x0020C0, 0x0020E0,
  126.   0x004000, 0x004020, 0x004040, 0x004060, 0x004080, 0x0040A0, 0x0040C0, 0x0040E0, 0x006000, 0x006020, 0x006040, 0x006060, 0x006080, 0x0060A0, 0x0060C0, 0x0060E0,
  127.   0x008000, 0x008020, 0x008040, 0x008060, 0x008080, 0x0080A0, 0x0080C0, 0x0080E0, 0x00A000, 0x00A020, 0x00A040, 0x00A060, 0x00A080, 0x00A0A0, 0x00A0C0, 0x00A0E0,
  128.   0x00C000, 0x00C020, 0x00C040, 0x00C060, 0x00C080, 0x00C0A0, 0x00C0C0, 0x00C0E0, 0x00E000, 0x00E020, 0x00E040, 0x00E060, 0x00E080, 0x00E0A0, 0x00E0C0, 0x00E0E0,
  129.   0x400000, 0x400020, 0x400040, 0x400060, 0x400080, 0x4000A0, 0x4000C0, 0x4000E0, 0x402000, 0x402020, 0x402040, 0x402060, 0x402080, 0x4020A0, 0x4020C0, 0x4020E0,
  130.   0x404000, 0x404020, 0x404040, 0x404060, 0x404080, 0x4040A0, 0x4040C0, 0x4040E0, 0x406000, 0x406020, 0x406040, 0x406060, 0x406080, 0x4060A0, 0x4060C0, 0x4060E0,
  131.   0x408000, 0x408020, 0x408040, 0x408060, 0x408080, 0x4080A0, 0x4080C0, 0x4080E0, 0x40A000, 0x40A020, 0x40A040, 0x40A060, 0x40A080, 0x40A0A0, 0x40A0C0, 0x40A0E0,
  132.   0x40C000, 0x40C020, 0x40C040, 0x40C060, 0x40C080, 0x40C0A0, 0x40C0C0, 0x40C0E0, 0x40E000, 0x40E020, 0x40E040, 0x40E060, 0x40E080, 0x40E0A0, 0x40E0C0, 0x40E0E0,
  133.   0x800000, 0x800020, 0x800040, 0x800060, 0x800080, 0x8000A0, 0x8000C0, 0x8000E0, 0x802000, 0x802020, 0x802040, 0x802060, 0x802080, 0x8020A0, 0x8020C0, 0x8020E0,
  134.   0x804000, 0x804020, 0x804040, 0x804060, 0x804080, 0x8040A0, 0x8040C0, 0x8040E0, 0x806000, 0x806020, 0x806040, 0x806060, 0x806080, 0x8060A0, 0x8060C0, 0x8060E0,
  135.   0x808000, 0x808020, 0x808040, 0x808060, 0x808080, 0x8080A0, 0x8080C0, 0x8080E0, 0x80A000, 0x80A020, 0x80A040, 0x80A060, 0x80A080, 0x80A0A0, 0x80A0C0, 0x80A0E0,
  136.   0x80C000, 0x80C020, 0x80C040, 0x80C060, 0x80C080, 0x80C0A0, 0x80C0C0, 0x80C0E0, 0x80E000, 0x80E020, 0x80E040, 0x80E060, 0x80E080, 0x80E0A0, 0x80E0C0, 0x80E0E0,
  137.   0xC00000, 0xC00020, 0xC00040, 0xC00060, 0xC00080, 0xC000A0, 0xC000C0, 0xC000E0, 0xC02000, 0xC02020, 0xC02040, 0xC02060, 0xC02080, 0xC020A0, 0xC020C0, 0xC020E0,
  138.   0xC04000, 0xC04020, 0xC04040, 0xC04060, 0xC04080, 0xC040A0, 0xC040C0, 0xC040E0, 0xC06000, 0xC06020, 0xC06040, 0xC06060, 0xC06080, 0xC060A0, 0xC060C0, 0xC060E0,
  139.   0xC08000, 0xC08020, 0xC08040, 0xC08060, 0xC08080, 0xC080A0, 0xC080C0, 0xC080E0, 0xC0A000, 0xC0A020, 0xC0A040, 0xC0A060, 0xC0A080, 0xC0A0A0, 0xC0A0C0, 0xC0A0E0,
  140.   0xC0C000, 0xC0C020, 0xC0C040, 0xC0C060, 0xC0C080, 0xC0C0A0, 0xF0FBFF, 0xA4A0A0, 0x808080, 0x0000FF, 0x00FF00, 0x00FFFF, 0xFF0000, 0xFF00FF, 0xFFFF00, 0xFFFFFF
  141. #endif
  142. };

  143. /*********************************************************************
  144. *
  145. *       Palettes
  146. */
  147. static const GUI_LOGPALETTE _Pal_1bpp    = {   2,  0,  &_Colors_1bpp[0] };
  148. static const GUI_LOGPALETTE _Pal_2bpp    = {   4,  0,  &_Colors_2bpp[0] };
  149. static const GUI_LOGPALETTE _Pal_4bpp    = {  16,  0,  &_Colors_4bpp[0] };
  150. static const GUI_LOGPALETTE _Pal_8bpp    = { 256,  0,  &_Colors_8bpp[0] };

  151. /*********************************************************************
  152. *
  153. *       Pixels
  154. */
  155. //
  156. // 1bpp
  157. //
  158. static const unsigned char _ac_1bpp_58x8[] = {
  159.   __X__XX_, __XX__X_, ___XXXX_, _XX__XXX, X__XX___, XX___XX_, __XX__XX, X_______,
  160.   _XX_X__X, _X__X_X_, ___X____, X__X____, X_X__X_X, __X_X__X, _X__X_X_, _X______,
  161.   X_X____X, ____X_X_, X__X____, X______X, __X__X_X, __X_X__X, _X__X_X_, _X______,
  162.   __X___X_, __XX__XX, XX_XXX__, XXX____X, ___XX___, XXX_X__X, _XXXX_XX, X_______,
  163.   __X__X__, ____X___, X_____X_, X__X__X_, __X__X__, __X_X__X, _X__X_X_, _X______,
  164.   __X_X___, ____X___, X_____X_, X__X__X_, __X__X__, __X_X__X, _X__X_X_, _X______,
  165.   __X_X___, _X__X___, X__X__X_, X__X_X__, __X__X_X, __X_X__X, _X__X_X_, _X______,
  166.   __X_XXXX, __XX____, X___XX__, _XX__X__, ___XX___, XX___XX_, _X__X_XX, X_______,
  167. };

  168. //
  169. // 2bpp
  170. //
  171. static const unsigned char _ac_2bpp_32x11[] = {
  172.   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  173.   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  174.   0x00, 0x00, 0x55, 0x55, 0xaa, 0xaa, 0xff, 0xff,
  175.   0x00, 0x00, 0x55, 0x55, 0xaa, 0xaa, 0xff, 0xff,
  176.   0x00, 0x00, 0x55, 0x55, 0xaa, 0xaa, 0xff, 0xff,
  177.   0x00, 0x00, 0x55, 0x55, 0xaa, 0xaa, 0xff, 0xff,
  178.   0x00, 0x00, 0x55, 0x55, 0xaa, 0xaa, 0xff, 0xff,
  179.   0x00, 0x00, 0x55, 0x55, 0xaa, 0xaa, 0xff, 0xff,
  180.   0x00, 0x00, 0x55, 0x55, 0xaa, 0xaa, 0xff, 0xff,
  181.   0x00, 0x00, 0x55, 0x55, 0xaa, 0xaa, 0xff, 0xff,
  182.   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff
  183. };

  184. //
  185. // 4bpp
  186. //
  187. static const unsigned char _ac_4bpp_32x11[] = {
  188.   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  189.   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  190.   0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff,
  191.   0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff,
  192.   0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff,
  193.   0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff,
  194.   0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff,
  195.   0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff,
  196.   0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff,
  197.   0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff,
  198.   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff
  199. };

  200. //
  201. // 8bpp
  202. //
  203. static const unsigned char _ac_8bpp_32x11[] = {
  204.   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  205.   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  206.   0x00, 0x10, 0x20, 0x30, 0x40, 0x50, 0x60, 0x70, 0x80, 0x90, 0xa0, 0xb0, 0xc0, 0xd0, 0xe0, 0xf0, 0x01, 0x11, 0x21, 0x31, 0x41, 0x51, 0x61, 0x71, 0x81, 0x91, 0xa1, 0xb1, 0xc1, 0xd1, 0xe1, 0xf1,
  207.   0x02, 0x12, 0x22, 0x32, 0x42, 0x52, 0x62, 0x72, 0x82, 0x92, 0xa2, 0xb2, 0xc2, 0xd2, 0xe2, 0xf2, 0x03, 0x13, 0x23, 0x33, 0x43, 0x53, 0x63, 0x73, 0x83, 0x93, 0xa3, 0xb3, 0xc3, 0xd3, 0xe3, 0xf3,
  208.   0x04, 0x14, 0x24, 0x34, 0x44, 0x54, 0x64, 0x74, 0x84, 0x94, 0xa4, 0xb4, 0xc4, 0xd4, 0xe4, 0xf4, 0x05, 0x15, 0x25, 0x35, 0x45, 0x55, 0x65, 0x75, 0x85, 0x95, 0xa5, 0xb5, 0xc5, 0xd5, 0xe5, 0xf5,
  209.   0x06, 0x16, 0x26, 0x36, 0x46, 0x56, 0x66, 0x76, 0x86, 0x96, 0xa6, 0xb6, 0xc6, 0xd6, 0xe6, 0xf6, 0x07, 0x17, 0x27, 0x37, 0x47, 0x57, 0x67, 0x77, 0x87, 0x97, 0xa7, 0xb7, 0xc7, 0xd7, 0xe7, 0xf7,
  210.   0x08, 0x18, 0x28, 0x38, 0x48, 0x58, 0x68, 0x78, 0x88, 0x98, 0xa8, 0xb8, 0xc8, 0xd8, 0xe8, 0xf8, 0x09, 0x19, 0x29, 0x39, 0x49, 0x59, 0x69, 0x79, 0x89, 0x99, 0xa9, 0xb9, 0xc9, 0xd9, 0xe9, 0xf9,
  211.   0x0a, 0x1a, 0x2a, 0x3a, 0x4a, 0x5a, 0x6a, 0x7a, 0x8a, 0x9a, 0xaa, 0xba, 0xca, 0xda, 0xea, 0xfa, 0x0b, 0x1b, 0x2b, 0x3b, 0x4b, 0x5b, 0x6b, 0x7b, 0x8b, 0x9b, 0xab, 0xbb, 0xcb, 0xdb, 0xeb, 0xfb,
  212.   0x0c, 0x1c, 0x2c, 0x3c, 0x4c, 0x5c, 0x6c, 0x7c, 0x8c, 0x9c, 0xac, 0xbc, 0xcc, 0xdc, 0xec, 0xfc, 0x0d, 0x1d, 0x2d, 0x3d, 0x4d, 0x5d, 0x6d, 0x7d, 0x8d, 0x9d, 0xad, 0xbd, 0xcd, 0xdd, 0xed, 0xfd,
  213.   0x0e, 0x1e, 0x2e, 0x3e, 0x4e, 0x5e, 0x6e, 0x7e, 0x8e, 0x9e, 0xae, 0xbe, 0xce, 0xde, 0xee, 0xfe, 0x0f, 0x1f, 0x2f, 0x3f, 0x4f, 0x5f, 0x6f, 0x7f, 0x8f, 0x9f, 0xaf, 0xbf, 0xcf, 0xdf, 0xef, 0xff,
  214.   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff
  215. };

  216. /*********************************************************************
  217. *
  218. *       Bitmaps
  219. */
  220. static const GUI_BITMAP _bm_1bpp_58x8     = {  58,   8,   8,   1,  _ac_1bpp_58x8 ,  &_Pal_1bpp};
  221. static const GUI_BITMAP _bm_2bpp_32x11    = {  32,  11,   8,   2,  _ac_2bpp_32x11,  &_Pal_2bpp};
  222. static const GUI_BITMAP _bm_4bpp_32x11    = {  32,  11,  16,   4,  _ac_4bpp_32x11,  &_Pal_4bpp};
  223. static const GUI_BITMAP _bm_8bpp_32x11    = {  32,  11,  32,   8,  _ac_8bpp_32x11,  &_Pal_8bpp};

  224. /*********************************************************************
  225. *
  226. *       Strings
  227. */
  228. static char _acSmall[] = "0123456789\n";
  229. static char _acBig[]   = "01234\n";

  230. /*********************************************************************
  231. *
  232. *       Static code
  233. *
  234. **********************************************************************
  235. */
  236. /*********************************************************************
  237. *
  238. *       _ExecFill
  239. */
  240. static void _ExecFill(void * p) {
  241.   GUI_POINT * pPoint;

  242.   pPoint = (GUI_POINT *)p;
  243.   GUI_SetBkColor(GUI_WHITE);
  244.   GUI_ClearRect(1, 1, pPoint->x - 3, pPoint->y - 3);
  245.   GUI_SetBkColor(GUI_BLACK);
  246.   GUI_ClearRect(3, 3, pPoint->x - 1, pPoint->y - 1);
  247. }

  248. /*********************************************************************
  249. *
  250. *       _ExecSmallFont
  251. */
  252. static void _ExecSmallFont(void * p) {
  253.   char * s;
  254.   int    i;

  255.   s = (char *)p;
  256.   GUI_SetLBorder(0);
  257.   GUI_DispStringAt(s, 0, 0);
  258.   for (i = 0; i < 7; i++) {
  259.     GUI_DispString(s);
  260.   }
  261.   GUI_SetLBorder(1);
  262.   GUI_DispStringAt(s, 1, 0);
  263.   for (i = 0; i < 7; i++) {
  264.     GUI_DispString(s);
  265.   }
  266.   GUI_SetLBorder(0);
  267. }

  268. /*********************************************************************
  269. *
  270. *       _ExecBigFont
  271. */
  272. static void _ExecBigFont(void * p) {
  273.   char * s;
  274.   int    i;

  275.   s = (char *)p;
  276.   GUI_SetLBorder(0);
  277.   GUI_DispStringAt(s, 0, 0);
  278.   for (i = 0; i < 1; i++) {
  279.     GUI_DispString(s);
  280.   }
  281.   GUI_SetLBorder(1);
  282.   GUI_DispStringAt(s, 1, 0);
  283.   for (i = 0; i < 1; i++) {
  284.     GUI_DispString(s);
  285.   }
  286.   GUI_SetLBorder(0);
  287. }

  288. /*********************************************************************
  289. *
  290. *       _Exec1bpp
  291. */
  292. static void _Exec1bpp(void * p) {
  293.   (void)p;
  294.   GUI_DrawBitmap(&_bm_1bpp_58x8, 0, 0);
  295.   GUI_DrawBitmap(&_bm_1bpp_58x8, 1, 1);
  296. }

  297. /*********************************************************************
  298. *
  299. *       _Exec2bpp
  300. */
  301. static void _Exec2bpp(void * p) {
  302.   (void)p;
  303.   GUI_DrawBitmap(&_bm_2bpp_32x11, 0, 0);
  304.   GUI_DrawBitmap(&_bm_2bpp_32x11, 1, 1);
  305. }

  306. /*********************************************************************
  307. *
  308. *       _Exec4bpp
  309. */
  310. static void _Exec4bpp(void * p) {
  311.   (void)p;
  312.   GUI_DrawBitmap(&_bm_4bpp_32x11, 0, 0);
  313.   GUI_DrawBitmap(&_bm_4bpp_32x11, 1, 1);
  314. }

  315. /*********************************************************************
  316. *
  317. *       _Exec8bpp
  318. */
  319. static void _Exec8bpp(void * p) {
  320.   (void)p;
  321.   GUI_DrawBitmap(&_bm_8bpp_32x11, 0, 0);
  322.   GUI_DrawBitmap(&_bm_8bpp_32x11, 1, 1);
  323. }

  324. /*********************************************************************
  325. *
  326. *       _InitXbppDDP
  327. */
  328. static void _InitXbppDDP(void) {
  329.   GUI_COLOR Color;
  330.   int       BytesPerPixel;
  331.   int       BitsPerPixel;
  332.   int       x;
  333.   int       y;
  334.   U32       MaxColor;

  335.   BitsPerPixel = LCD_GetBitsPerPixel();
  336.   if (BitsPerPixel <= 8) {
  337.     BytesPerPixel = 1;
  338.   } else if (BitsPerPixel <= 16) {
  339.     BytesPerPixel = 2;
  340.   } else {
  341.     BytesPerPixel = 4;
  342.   }
  343.   MaxColor               = 1L << BitsPerPixel;
  344.   _Param.Bm.XSize        = XSIZE_XBPP;
  345.   _Param.Bm.YSize        = YSIZE_XBPP;
  346.   _Param.Bm.BytesPerLine = (BitsPerPixel <= 8) ? XSIZE_XBPP : XSIZE_XBPP * (BitsPerPixel >> 3);
  347.   _Param.Bm.BitsPerPixel = BytesPerPixel << 3;
  348.   _Param.Bm.pData        = (U8 *)_Param.aPixels;
  349.   _Param.Bm.pPal         = NULL;
  350.   _Param.Bm.pMethods     = NULL;
  351.   Color = 0;
  352.   switch (BytesPerPixel) {
  353.   case 1: {
  354.       U8 * pData;
  355.       pData = (U8 *)_Param.aPixels;
  356.       for (y = 0; y < YSIZE_XBPP; y++) {
  357.         for (x = 0; x < XSIZE_XBPP; x++) {
  358.           *(pData++) = Color++;
  359.           if (Color >= MaxColor) {
  360.             Color = 0;
  361.           }
  362.         }
  363.       }
  364.     }
  365.     break;
  366.   case 2: {
  367.       U16 * pData;
  368.       pData = (U16 *)_Param.aPixels;
  369.       for (y = 0; y < YSIZE_XBPP; y++) {
  370.         for (x = 0; x < XSIZE_XBPP; x++) {
  371.           *(pData++) = Color++;
  372.           if (Color >= MaxColor) {
  373.             Color = 0;
  374.           }
  375.         }
  376.       }
  377.     }
  378.     break;
  379.   case 4: {
  380.       U32 * pData;
  381.       pData = (U32 *)_Param.aPixels;
  382.       for (y = 0; y < YSIZE_XBPP; y++) {
  383.         for (x = 0; x < XSIZE_XBPP; x++) {
  384. #if (GUI_USE_ARGB == 1)
  385.           *(pData++) = (Color * 0x10101) | 0xFF000000;
  386. #else
  387.           *(pData++) = (Color * 0x10101);
  388. #endif
  389.           ++Color;
  390.           if (MaxColor) {
  391.             if (Color >= MaxColor) {
  392.               Color = 0;
  393.             }
  394.           } else {
  395.             if (Color >= 0xFF) {
  396.               Color = 0;
  397.             }
  398.           }
  399.         }
  400.       }
  401.     }
  402.     break;
  403.   }
  404. }

  405. /*********************************************************************
  406. *
  407. *       _ExecXbppDDP
  408. */
  409. static void _ExecXbppDDP(void * p) {
  410.   (void)p;
  411.   GUI_DrawBitmap(&_Param.Bm, 0, 0);
  412.   GUI_DrawBitmap(&_Param.Bm, 1, 1);
  413. }

  414. /*********************************************************************
  415. *
  416. *       _Measure
  417. */
  418. static float _Measure(void (* pfOutput)(void * p), void * p) {
  419.   int Period;
  420.   int Cnt;
  421.   int t0;
  422.   int t;

  423.   Period = LCDTEST_MEASURE_PERIOD;
  424.   Cnt    = 0;
  425.   pfOutput(p);  // Eliminate one time effects like color conversion
  426.   t0 = GUI_GetTime();
  427.   while ((t=GUI_GetTime()-t0) < Period) {
  428.     pfOutput(p);
  429.     Cnt++;
  430.   }
  431.   GUI_Clear();
  432.   return 1000 * (float)Cnt / (float)t;
  433. }

  434. /*********************************************************************
  435. *
  436. *       _DispFillrate
  437. */
  438. static void _DispFillrate(char * sPre, float FillratePPS, char * sPost) {
  439.   unsigned int   i;
  440.   char         * apLabel[] = {" KPixel/s", " MPixel/s"};

  441.   GUI_DispString(sPre);
  442.   for (i = 0; i < GUI_COUNTOF(apLabel); i++) {
  443.     FillratePPS /= 1000;
  444.     if (FillratePPS < 1000) {
  445.       GUI_DispFloatFix((float)FillratePPS, 7, 3);
  446.       GUI_DispString(apLabel[i]);
  447.       break;
  448.     }
  449.   }
  450.   GUI_DispString(sPost);
  451. }

  452. /*********************************************************************
  453. *
  454. *       _LCDBench
  455. */
  456. static void _LCDBench(void) {
  457.   GUI_POINT   Point;
  458.   float       aPixelrateBitmap[5] = {0, 0, 0, 0, 0};
  459.   float       PixelrateBigFont;
  460.   float       PixelrateF6x8;
  461.   float       FillratePPS;
  462.   char      * s;
  463.   char        ac[80];
  464.   int         BitsPerPixel;
  465.   int         xSizeString;
  466.   int         ySizeFont;
  467.   int         NumColors;
  468.   int         MirrorX;
  469.   int         MirrorY;
  470.   int         SwapXY;
  471.   int         xSize;
  472.   int         ySize;

  473.   BitsPerPixel = LCD_GetBitsPerPixelEx(0);
  474.   xSize        = LCD_GetXSizeEx(0);
  475.   ySize        = LCD_GetYSizeEx(0);
  476.   MirrorX      = LCD_GetMirrorXEx(0);
  477.   MirrorY      = LCD_GetMirrorYEx(0);
  478.   SwapXY       = LCD_GetSwapXYEx(0);
  479.   NumColors    = (1 << BitsPerPixel);
  480.   _InitXbppDDP();
  481.   //
  482.   // Say hi !
  483.   //
  484.   GUI_X_Log("\nLCD driver benchmark. All values are  \xb5""s/pixel");
  485.   GUI_X_Log("\nLower values are better.");
  486.   GUI_SetBkColor(GUI_RED);
  487.   GUI_SetColor(GUI_WHITE);
  488.   GUI_Clear();
  489.   GUI_SetFont(&GUI_FontComic18B_1);
  490.   GUI_DispStringHCenterAt("LCD driver", xSize / 2, ySize / 3 - 10);
  491.   GUI_DispStringHCenterAt("Benchmark" , xSize / 2, ySize / 3 + 20);
  492.   GUI_Delay(1000);
  493.   GUI_SetBkColor(GUI_BLACK);
  494.   GUI_Clear();
  495.   GUI_SetLBorder(1);
  496.   //
  497.   // Log color depth, controller, orientation and cache
  498.   //
  499.   sprintf(ac, "\nColor depth: %d", BitsPerPixel);
  500.   GUI_X_Log(ac);
  501.   sprintf(ac, "\nOrientation: LCD_MIRROR_X = %d, LCD_MIRROR_Y = %d, LCD_SWAP_XY = %d", MirrorX, MirrorY, SwapXY);
  502.   GUI_X_Log(ac);
  503.   //
  504.   // Measure filling
  505.   //
  506.   Point.x             = xSize;
  507.   Point.y             = ySize;
  508.   FillratePPS         = _Measure(&_ExecFill, &Point)  * (float)(2 * ((U32)xSize - 4) * ((U32)ySize - 4));
  509.   sprintf(ac, "\nFill: %f", (float)1E6 / FillratePPS);
  510.   GUI_X_Log(ac);
  511.   //
  512.   // Measure small font
  513.   //
  514.   GUI_SetFont(&GUI_Font6x8);
  515.   s                   = _acSmall;
  516.   xSizeString         = GUI_GetStringDistX(s);
  517.   ySizeFont           = GUI_GetFontSizeY();
  518.   PixelrateF6x8       = _Measure(&_ExecSmallFont, s)  * (float)2 * xSizeString * ySizeFont * 8;
  519.   sprintf(ac, "\nF6x8: %f", (float)1E6 / PixelrateF6x8);
  520.   GUI_X_Log(ac);
  521.   //
  522.   // Measure big font
  523.   //
  524.   GUI_SetFont(&GUI_FontComic18B_ASCII);
  525.   s                   = _acBig;
  526.   xSizeString         = GUI_GetStringDistX(s);
  527.   ySizeFont           = GUI_GetFontSizeY();
  528.   PixelrateBigFont    = _Measure(&_ExecBigFont, s)    * (float)2 * xSizeString * ySizeFont * 2;
  529.   sprintf(ac, "\nFBig: %f", (float)1E6 / PixelrateBigFont);
  530.   GUI_X_Log(ac);
  531.   //
  532.   // Measure 1bpp bitmap
  533.   //
  534.   aPixelrateBitmap[0] = _Measure(&_Exec1bpp, NULL)    * (float)2 * _bm_1bpp_58x8.XSize * 8;
  535.   sprintf(ac, "\n1bpp: %f", (float)1E6 / aPixelrateBitmap[0]);
  536.   GUI_X_Log(ac);
  537.   //
  538.   // Measure 2bpp bitmap
  539.   //
  540.   aPixelrateBitmap[1] = _Measure(&_Exec2bpp, NULL)    * (float)2 * _bm_2bpp_32x11.XSize * 11;
  541.   sprintf(ac, "\n2bpp: %f", (float)1E6 / aPixelrateBitmap[1]);
  542.   GUI_X_Log(ac);
  543.   //
  544.   // Measure 4bpp bitmap
  545.   //
  546.   aPixelrateBitmap[2] = _Measure(&_Exec4bpp, NULL)    * (float)2 * _bm_4bpp_32x11.XSize * 11;
  547.   sprintf(ac, "\n4bpp: %f", (float)1E6 / aPixelrateBitmap[2]);
  548.   GUI_X_Log(ac);
  549.   //
  550.   // Measure 8bpp bitmap
  551.   //
  552.   aPixelrateBitmap[3] = _Measure(&_Exec8bpp, NULL)    * (float)2 * _bm_8bpp_32x11.XSize * 11;
  553.   sprintf(ac, "\n8bpp: %f", (float)1E6 / aPixelrateBitmap[3]);
  554.   GUI_X_Log(ac);
  555.   //
  556.   // Measure device dependent bitmap
  557.   //
  558.   aPixelrateBitmap[4] = _Measure(&_ExecXbppDDP, NULL) * (float)2 * XSIZE_XBPP * YSIZE_XBPP;
  559.   sprintf(ac, "\nXDDP: %f", (float)1E6 / aPixelrateBitmap[4]);
  560.   GUI_X_Log(ac);
  561.   //
  562.   // Show results on display
  563.   //
  564.   GUI_Clear();
  565.   if (xSize < 320) {
  566.     GUI_SetFont(&GUI_Font6x8);
  567.   } else {
  568.     GUI_SetFont(&GUI_Font8x16);
  569.   }
  570.   GUI_GotoXY(0, 0);
  571.   GUI_DispDecMin(BitsPerPixel);
  572.   GUI_DispString(" bpp, ");
  573.   GUI_DispDecMin(NumColors);
  574.   GUI_DispString(" colors\n\nMIRROR_X ");
  575.   GUI_DispDecMin(MirrorX);
  576.   GUI_DispString(", MIRROR_Y ");
  577.   GUI_DispDecMin(MirrorY);
  578.   GUI_DispString(", SWAPXY ");
  579.   GUI_DispDecMin(SwapXY);
  580.   GUI_SetLBorder(1);
  581.   GUI_SetFont(&GUI_Font6x8);
  582.   GUI_DispChar('\n');
  583.   _DispFillrate("\nFill: ", FillratePPS,         " Fill");
  584.   _DispFillrate("\nF6x8: ", PixelrateF6x8,       " F6x8");
  585.   _DispFillrate("\nFBig: ", PixelrateBigFont,    " FComic18");
  586.   _DispFillrate("\n1bpp: ", aPixelrateBitmap[0], " Bitmap 1bpp");
  587.   _DispFillrate("\n2bpp: ", aPixelrateBitmap[1], " Bitmap 2bpp");
  588.   _DispFillrate("\n4bpp: ", aPixelrateBitmap[2], " Bitmap 4bpp");
  589.   _DispFillrate("\n8bpp: ", aPixelrateBitmap[3], " Bitmap 8bpp");
  590.   _DispFillrate("\nXDDP: ", aPixelrateBitmap[4], " 8/16bppDDP");
  591. }

  592. /*********************************************************************
  593. *
  594. *       Public code
  595. *
  596. **********************************************************************
  597. */
  598. /*********************************************************************
  599. *
  600. *       MainTask
  601. */
  602. void MainTask(void);
  603. void MainTask(void) {
  604.   GUI_Init();
  605.   //
  606.   // Check if recommended memory for the sample is available
  607.   //
  608.   if (GUI_ALLOC_GetNumFreeBytes() < RECOMMENDED_MEMORY) {
  609.     GUI_ErrorOut("Not enough memory available.");
  610.     return;
  611.   }
  612.   while (1) {
  613.     _LCDBench();
  614.     GUI_Delay(10000);
  615.   }
  616. }

  617. /*************************** End of file ****************************/
复制代码



回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115778
QQ
 楼主| 发表于 2019-5-15 15:18:54 | 显示全部楼层
第7期:官方提供专业的LCD驱动性能测试功能BASIC_DriverPerformance
http://www.armbbs.cn/forum.php?m ... 3891&fromuid=58
(出处: 安富莱电子论坛)


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2025-5-17 22:09 , Processed in 0.208792 second(s), 24 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表