Перейти к содержанию

StanislavI

Members
  • Постов

    1
  • Зарегистрирован

  • Посещение

Электроника

  • Стаж в электронике
    3-5 лет
  • Сфера радиоэлектроники
    Хобби

Достижения StanislavI

Новичок

Новичок (1/14)

  • Неделя на форуме
  • Месяц на форуме
  • Год на форуме

Последние значки

0

Репутация

  1. Для тестирования ESP8266 ( и возможно ESP32) использовать этот код. Кстати, этот код же можно использовать под другие платформы, самое важное улучшение по сравнению с оригинальным кодом (не влияет на быстроту исполнения, но предупреждает вылеты) рабочий массив чисел перенесен в свободную оперативку ( A=(uint8_t*) malloc(len); ) #include <ESP8266WiFi.h> #include <math.h> #ifdef ESP8266 extern "C" { #include "user_interface.h" } #endif #define N 10000 //#define ENABLE_PRINT void setup(void) { Serial.begin(921600); system_update_cpu_freq(SYS_CPU_160MHZ); } void loop() { uint32_t len = floor(10 * N/3) + 1; uint32_t freeM = system_get_free_heap_size(); Serial.print("Free memory:"); Serial.println(freeM); Serial.print("buffer length:"); Serial.println(len); delay(1000); uint8_t* A; uint8_t have_a_rest_timeout=20; A=(uint8_t*) malloc(len); freeM = system_get_free_heap_size(); Serial.print("Free memory:"); Serial.println(freeM); unsigned long tim; tim = millis(); memset(A,2,len); int nines = 0; int predigit = 0; for(uint16_t j = 1; j < N + 1; ++j) { int q = 0; for(uint16_t i = len; i > 0; --i) { int x = 10 * A[i-1] + q*i; A[i-1] = x % (2*i - 1); q = x / (2*i - 1); //yield(); } have_a_rest_timeout--; if (!have_a_rest_timeout){ have_a_rest_timeout=20; yield(); } A[0] = q%10; q = q/10; if (9 == q) { ++nines; } else if (10 == q) { #ifdef ENABLE_PRINT Serial.print(predigit + 1); #endif for (uint16_t k = 0; k < nines; ++k) { #ifdef ENABLE_PRINT Serial.print("0"); #endif } predigit, nines = 0; } else { #ifdef ENABLE_PRINT Serial.print(predigit); #endif predigit = q; if (0 != nines) { for (uint16_t k = 0; k < nines; ++k) { #ifdef ENABLE_PRINT Serial.print("9"); #endif } nines = 0; } } } free(A ); #ifdef ENABLE_PRINT Serial.println(predigit); #endif tim = millis()-tim; Serial.print("Time : "); Serial.println(tim/1000.0f,4); delay(5000); } П.С. Могу так же протестировать на Orange Pi Lite
×
×
  • Создать...