Nie możesz wybrać więcej, niż 25 tematów Tematy muszą się zaczynać od litery lub cyfry, mogą zawierać myślniki ('-') i mogą mieć do 35 znaków.

122 lines
2.6KB

  1. /*
  2. * This program is a simple Print benchmark.
  3. */
  4. #include <SPI.h>
  5. #include <SD.h>
  6. // SD chip select pin
  7. const uint8_t chipSelect = SS;
  8. // number of lines to print
  9. const uint16_t N_PRINT = 20000;
  10. // test file
  11. File file;
  12. //------------------------------------------------------------------------------
  13. void error(const char* s) {
  14. Serial.println(s);
  15. while (1) {
  16. yield();
  17. }
  18. }
  19. //------------------------------------------------------------------------------
  20. void setup() {
  21. Serial.begin(9600);
  22. // Wait for USB Serial
  23. while (!Serial) {
  24. yield();
  25. }
  26. }
  27. //------------------------------------------------------------------------------
  28. void loop() {
  29. uint32_t maxLatency;
  30. uint32_t minLatency;
  31. uint32_t totalLatency;
  32. while (Serial.read() >= 0) {
  33. }
  34. // F() stores strings in flash to save RAM
  35. Serial.println(F("Type any character to start"));
  36. while (Serial.read() <= 0) {
  37. yield();
  38. }
  39. // initialize the SD card
  40. if (!SD.begin(chipSelect)) {
  41. error("begin");
  42. }
  43. Serial.println(F("Starting print test. Please wait.\n"));
  44. // do write test
  45. for (int test = 0; test < 2; test++) {
  46. file = SD.open("bench.txt", FILE_WRITE);
  47. if (!file) {
  48. error("open failed");
  49. }
  50. switch(test) {
  51. case 0:
  52. Serial.println(F("Test of println(uint16_t)"));
  53. break;
  54. case 1:
  55. Serial.println(F("Test of println(double)"));
  56. break;
  57. }
  58. maxLatency = 0;
  59. minLatency = 999999;
  60. totalLatency = 0;
  61. uint32_t t = millis();
  62. for (uint16_t i = 0; i < N_PRINT; i++) {
  63. uint32_t m = micros();
  64. switch(test) {
  65. case 0:
  66. file.println(i);
  67. break;
  68. case 1:
  69. file.println((double)0.01*i);
  70. break;
  71. }
  72. if (file.getWriteError()) {
  73. error("write failed");
  74. }
  75. m = micros() - m;
  76. if (maxLatency < m) {
  77. maxLatency = m;
  78. }
  79. if (minLatency > m) {
  80. minLatency = m;
  81. }
  82. totalLatency += m;
  83. }
  84. file.flush();
  85. t = millis() - t;
  86. double s = file.size();
  87. Serial.print(F("Time "));
  88. Serial.print(0.001*t);
  89. Serial.println(F(" sec"));
  90. Serial.print(F("File size "));
  91. Serial.print(0.001*s);
  92. Serial.print(F(" KB\n"));
  93. Serial.print(F("Write "));
  94. Serial.print(s/t);
  95. Serial.print(F(" KB/sec\n"));
  96. Serial.print(F("Maximum latency: "));
  97. Serial.print(maxLatency);
  98. Serial.print(F(" usec, Minimum Latency: "));
  99. Serial.print(minLatency);
  100. Serial.print(F(" usec, Avg Latency: "));
  101. Serial.print(totalLatency/N_PRINT);
  102. Serial.println(F(" usec\n"));
  103. SD.remove("bench.txt");
  104. }
  105. file.close();
  106. Serial.println(F("Done!\n"));
  107. }