﻿{"id":1073,"date":"2026-10-25T22:33:02","date_gmt":"2026-10-25T21:33:02","guid":{"rendered":"https:\/\/www.marallo.sk\/?p=1073"},"modified":"2026-10-25T22:33:02","modified_gmt":"2026-10-25T21:33:02","slug":"benchmark-mikrokontrolerov-avr-stm32-rp2040-a-esp32","status":"publish","type":"post","link":"https:\/\/www.marallo.sk\/?p=1073","title":{"rendered":"Benchmark mikrokontrol\u00e9rov: AVR, STM32, RP2040 a ESP32"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Preberali sme s AI-kou v\u00fdkon mikrokontrol\u00e9rov, a pri\u0161li sme a\u017e k n\u00e1padu urobi\u0165 jednoduch\u00fd matematick\u00fd benchmark. Ako z\u00e1\u0165a\u017e sme pou\u017eili v\u00fdpo\u010det prvo\u010d\u00edsel pomocou algoritmu <strong>Trial Division<\/strong> (testovanie delite\u013enosti do odmocniny \u010d\u00edsla). Algoritmus intenz\u00edvne vyu\u017e\u00edva 32-bitov\u00fa celo\u010d\u00edseln\u00fa aritmetiku, cykly a oper\u00e1ciu modulo (<code>%<\/code>).<\/p>\n\n\n\n<!--more-->\n\n\n\n<p class=\"wp-block-paragraph\">Test teda po\u010d\u00edta prvo\u010d\u00edsla, a testoval som v 3 rozsahoch. Do 200 tis\u00edc, 1 mili\u00f3na a 10 mili\u00f3nov. <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">K\u00f3d vyzer\u00e1 nasledovne:<\/p>\n\n\n\n<pre class=\"wp-block-code has-midnight-gradient-background has-background\"><code>unsigned long startTime;\nunsigned long duration;\n\nvoid setup() {\n  Serial.begin(115200);\n  while (!Serial); \/\/ \u010cakanie na s\u00e9riov\u00fd port\n  delay(2000);\n\n  Serial.println(F(\"\\n========================================\"));\n  Serial.println(F(\"   HEAVY-DUTY PRIME NUMBER BENCHMARK    \"));\n  Serial.println(F(\"========================================\"));\n  \n  #if defined(ESP32)\n    Serial.println(F(\"Platform: ESP32 (240 MHz Dual Core)\"));\n  #elif defined(ARDUINO_ARCH_RP2040)\n    Serial.println(F(\"Platform: RP2040 (133 MHz Dual Core)\"));\n  #elif defined(STM32F1xx) || defined(STM32F4xx) || defined(ARDUINO_ARCH_STM32)\n    Serial.println(F(\"Platform: STM32\"));\n  #else\n    Serial.println(F(\"Platform: AVR (Arduino Uno\/Nano - 16 MHz)\"));\n  #endif\n  \n  Serial.println(F(\"----------------------------------------\"));\n  Serial.println(F(\"Sp\u00fa\u0161\u0165am v\u00fdpo\u010det... (toto chv\u00ed\u013eu potrv\u00e1)\"));\n\n  \/\/ Spust\u00edme meranie v milisekund\u00e1ch\n  startTime = millis();\n\n  uint32_t limit = 10000000;\n  uint32_t primeCount = 0;\n  uint32_t lastPrime = 0;\n  byte k = 0; \n\n  for (uint32_t n = 2; n &lt;= limit; n++) {\n    bool isPrime = true;\n    for (uint32_t i = 2; i * i &lt;= n; i++) {\n      if (n % i == 0) {\n        isPrime = false;\n        break;\n      }\n    }\n    if (isPrime) {\n      \/\/ Serial.print(n); Serial.print(\", \"); k++; if (k == 20) {Serial.println(); k = 0;}   \/\/ Vypis prvocisel na konzolu\n      primeCount++;\n      lastPrime = n;\n    }\n  }\n\n  duration = millis() - startTime;\n\n  \/\/ --- V\u00ddPIS V\u00ddSLEDKOV ---\n  Serial.println();\n  Serial.println(F(\"----------------------------------------\"));\n  Serial.print(F(\"Testovany limit:     \")); Serial.println(limit);\n  Serial.print(F(\"Najdenych prvocisel: \")); Serial.println(primeCount);\n  Serial.print(F(\"Posledne prvocislo:  \")); Serial.println(lastPrime);\n  Serial.print(F(\"Celkovy cas (ms):    \")); Serial.println(duration);\n  Serial.print(F(\"Celkovy cas (s):     \")); Serial.println(duration \/ 1000.0, 3);\n  Serial.println(F(\"========================================\"));\n  Serial.println(F(\"Benchmark dokon\u010den\u00fd!\\n\"));\n}\n\nvoid loop() {\n}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Nechal som ho zbehn\u00fa\u0165 na v\u00fdvojov\u00fdch dosk\u00e1ch \u010do som na\u0161iel doma. Najprv 8bitov\u00e9 Arduino Uno s ATmega328 na 16MHz, ESP32-WROOM-32 na takte 20MHz a tie\u017e 240MHz, Raspberry Pico RP2040 pretaktovan\u00fa na 200MHz a STM32L552ZEQ6 na takte 110MHz. V\u0161etky mikrokontrol\u00e9ry okrem ATmega328 s\u00fa 32bitov\u00e9  a rozdiel je priepastn\u00fd. AVR nem\u00e1 hardv\u00e9rov\u00fa deli\u010dku pre 32-bitov\u00e9 \u010d\u00edsla a oper\u00e1cia <code>%<\/code> (<code>n % i<\/code>) sa na 8-bitovom procesore sklad\u00e1 z obrovsk\u00e9ho mno\u017estva softv\u00e9rov\u00fdch in\u0161trukci\u00ed posunov a od\u010d\u00edtan\u00ed. Preto na Arduine som ani nespustil test do 10 mili\u00f3nov, v\u00fdsledku by som sa asi nedo\u017eil.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><td><strong>Mikrokontrol\u00e9r<\/strong><\/td><td><strong>Takt jadra<\/strong><\/td><td><strong>\u010cas do 200k<\/strong><\/td><td><strong>\u010cas do 1M<\/strong><\/td><td><strong>\u010cas do 10M<\/strong><\/td><\/tr><\/thead><tbody><tr><td><strong>ESP32-WROOM<\/strong><\/td><td>240 MHz<\/td><td><strong>0,48 s<\/strong><\/td><td><strong>4,62 s<\/strong><\/td><td><strong>1 min 59 s<\/strong><\/td><\/tr><tr><td><strong>STM32<\/strong><\/td><td>110MHz<\/td><td><strong>1,06 s<\/strong><\/td><td><strong>9,56 s<\/strong><\/td><td><strong>4 min 13 s<\/strong><\/td><\/tr><tr><td><strong>RP2040<\/strong> (Raspberry Pi Pico)<\/td><td>200 MHz <em>(pretaktovan\u00e9)<\/em><\/td><td><strong>1,16 s<\/strong><\/td><td><strong>10,91 s<\/strong><\/td><td><strong>4 min 40 s<\/strong><\/td><\/tr><tr><td><strong>ESP32-WROOM<\/strong><\/td><td>20 MHz <em>(podtaktovan\u00e9)<\/em><\/td><td><strong>6,09 s<\/strong><\/td><td><strong>57,86 s<\/strong><\/td><td><strong>24 min 54 s<\/strong><\/td><\/tr><tr><td><strong>Arduino Uno<\/strong> (ATmega328P)<\/td><td>16 MHz<\/td><td><strong>5 min 09 s<\/strong><\/td><td><strong>48 min 54 s<\/strong><\/td><td><em>netestovan\u00e9<\/em><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Preberali sme s AI-kou v\u00fdkon mikrokontrol\u00e9rov, a pri\u0161li sme a\u017e k n\u00e1padu urobi\u0165 jednoduch\u00fd matematick\u00fd benchmark. Ako z\u00e1\u0165a\u017e sme pou\u017eili v\u00fdpo\u010det prvo\u010d\u00edsel pomocou algoritmu Trial Division (testovanie delite\u013enosti do odmocniny \u010d\u00edsla). Algoritmus intenz\u00edvne vyu\u017e\u00edva 32-bitov\u00fa celo\u010d\u00edseln\u00fa aritmetiku, cykly a oper\u00e1ciu modulo (%).<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_links_to":"","_links_to_target":""},"categories":[16,9,17,11],"tags":[],"class_list":["post-1073","post","type-post","status-publish","format-standard","hentry","category-arduino","category-it","category-raspberry","category-all"],"views":1,"_links":{"self":[{"href":"https:\/\/www.marallo.sk\/index.php?rest_route=\/wp\/v2\/posts\/1073","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.marallo.sk\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.marallo.sk\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.marallo.sk\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.marallo.sk\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1073"}],"version-history":[{"count":8,"href":"https:\/\/www.marallo.sk\/index.php?rest_route=\/wp\/v2\/posts\/1073\/revisions"}],"predecessor-version":[{"id":1082,"href":"https:\/\/www.marallo.sk\/index.php?rest_route=\/wp\/v2\/posts\/1073\/revisions\/1082"}],"wp:attachment":[{"href":"https:\/\/www.marallo.sk\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1073"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.marallo.sk\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1073"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.marallo.sk\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1073"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}