<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/">
	<channel>
		<title><![CDATA[DIY Electronic projects - ARM]]></title>
		<link>https://forum.yu3ma.net/</link>
		<description><![CDATA[DIY Electronic projects - https://forum.yu3ma.net]]></description>
		<pubDate>Thu, 08 Oct 2026 13:09:21 +0000</pubDate>
		<generator>MyBB</generator>
		<item>
			<title><![CDATA[STM32H755 ecmx — HTTP/S server po nginx-ovim pravilima, na mikrokontroleru]]></title>
			<link>https://forum.yu3ma.net/showthread.php?tid=3155</link>
			<pubDate>Fri, 28 Aug 2026 19:38:52 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://forum.yu3ma.net/member.php?action=profile&uid=107">mikikg</a>]]></dc:creator>
			<guid isPermaLink="false">https://forum.yu3ma.net/showthread.php?tid=3155</guid>
			<description><![CDATA[<span style="font-weight: bold;" class="mycode_b">ecmx — HTTP/S server po nginx-ovim pravilima, na mikrokontroleru</span><br />
<br />
Svaki embedded web server koji sam do sada koristio ima isti problem: rute su C funkcije zakucane u firmver. Hoćeš da dodaš redirect, promeniš timeout, zaštitiš /admin klijentskim sertifikatom? Novi build, novo flešovanje, i moli se da usput nisi slomio nešto drugo. A taj problem je na serverskoj strani rešen pre dvadeset godina — rešenje se zove nginx.conf.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">ecmx</span> je HTTP/S server za mikrokontrolere koji <span style="font-weight: bold;" class="mycode_b">čita nginx-ovu konfiguraciju</span>: isti format fajla, isti location blokovi (prefiks, =, ^~, ~, ~*), iste direktive — podskup, ne sve, o tome pošteno niže. I što je važnije od sintakse: <span style="font-weight: bold;" class="mycode_b">pušta nginx-ove sopstvene testove</span>, pa se njegovo ponašanje ne dokazuje mojom rečju nego test suite-om koji svako može da pokrene.<br />
<br />
Uz njega, na drugom jezgru istog čipa, radi <span style="font-weight: bold;" class="mycode_b">ecm-forth</span> — real-time Forth interpreter u kome živi aplikaciona logika. Rezultat: ponašanje uređaja se menja izmenom tekst fajla i reload-om, ne flešovanjem.<br />
<br />
Meta: NUCLEO-H755ZI-Q — Cortex-M7 na 480 MHz (server) plus Cortex-M4 na 240 MHz (Forth, sa tvrdim rokom od 1 ms).<br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Zašto ne neki od običnih embedded servera?</span><br />
<br />
Legitimno pitanje — za prosto "serviraj mi index.html sa senzorskim očitavanjima" ecmx je overkill. Razlika se vidi kad uređaj treba da živi godinama kod klijenta:<br />
<ul class="mycode_list"><li><span style="font-weight: bold;" class="mycode_b">Konfiguracija umesto rekompajliranja.</span> Rute, TLS, keepalive, pristup — tekst fajl, ne #ifdef šuma. Ko je ikad pisao nginx.conf, već zna da podesi ovaj server.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Ponašanje koje je neko već dokumentovao.</span> Ne izmišljam semantiku pa je opisujem u README-u — preuzimam nginx-ovu, koja je opisana, poznata adminima i pokrivena tuđim testovima. Kad se ecmx i nginx ne slažu, to je po definiciji bug u ecmx-u.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Deterministička memorija.</span> Nula malloc-a — nigde, uključujući TLS. Nema fragmentacije hipa, nema "radio je tri nedelje pa stao". Sve što će ikad biti zauzeto zna se u trenutku linkovanja.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Logika bez flešovanja.</span> Forth skripta se kompajlira jednom pri boot-u, pa se VM zapečati. Izmena logike = nova skripta + reload. Firmver se ne dira.<br />
</li>
</ul>
<br />
Ne znam ni za jedan drugi server u ovoj klasi koji se meri nginx-ovim testovima — ako neko zna, neka javi, ozbiljno me zanima.<br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Kako je građen</span><br />
<br />
Jezgro servera je sans-I/O: transport mu doda bajtove, ono vrati nameru (WANT_READ, WANT_WRITE, CLOSE, IDLE). Zato isto jezgro radi i preko POSIX soketa i na golom metalu bez sloja za kompatibilnost — i zato može da se testira punom brzinom na radnoj stanici.<br />
<br />
Dve tvrde odluke, za ceo sistem: <span style="font-weight: bold;" class="mycode_b">nula malloc-a</span> (uključujući TLS i Forth VM) i <span style="font-weight: bold;" class="mycode_b">nula statičkog RAM-a</span> — 0 data i 0 bss u svih 19 modula servera.<br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Memorija</span><br />
<br />
Svaki broj je marginalna cena iz <span style="font-style: italic;" class="mycode_i">dva prava linkovanja</span> — sagradi sa modulom, sagradi bez njega, oduzmi. Zbir veličina objektnih fajlova se ne koristi, jer se tako deljene pomoćne funkcije i niske naplate dvaput.<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>komponenta                    fleš (B)   RAM fiksni   RAM po vezi
--------------------------------------------------------------------
jezgro (petlja, parser,         16 196          664         2 651
        odgovor, baferi, tajmeri)
TLS (mbedTLS, bez hipa)        101 744       20 792        23 552
regex mašina                     6 052            0             0
telnet konzola                   5 384            0             0
promenljive                      3 684            0             0
ciklus konfiguracije             2 620            0             0
datum / vreme                    2 336            0             0
merni brojači                    1 892          480             0
parser konfiguracije             1 724            0             0
statički fajlovi                 1 116            0             0
auth kuka                          316            0             0
--------------------------------------------------------------------
sve osim TLS-a                  41 320        1 144         2 651</code></div></div><br />
Zauzeće čipa: fleš 317 376 od 1 048 576 B (30,3 %), RAM 482 016 od 524 288 B (91,9 % — server, stekovi, mrežni baferi, 16 TLS veza).<br />
<br />
<span style="font-weight: bold;" class="mycode_b">TLS pojede sve.</span> Na 23,5 KB po vezi, 16 istovremenih TLS sesija traži oko 400 KB od 512 KB koliko ovaj čip ima. Pravi budžet nije broj funkcija nego <span style="font-weight: bold;" class="mycode_b">broj veza</span> — podizanje sa 16 na 64 košta 127 KB, više nego svi opcioni moduli zajedno.<br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Brzina</span><br />
<br />
Četiri izmene, svaka merena posebno na hardveru. Merenja na radnoj stanici su <span style="font-style: italic;" class="mycode_i">svaki put</span> pogrešno predvidela veličinu dobitka, pa ih ovde i ne navodim.<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>                                       zaht/s     promena
------------------------------------------------------------
1. polazno                              3 567
2. -O2                                  4 155      +16,5 %
3. izbačen snprintf                     4 305       +3,6 %
4. međujezgarni prekid (HSEM)           4 149       -3,6 %</code></div></div><br />
Korak 2: radna stanica je predvidela 1,58×, hardver dao 1,17×. Korak 3: snprintf zamenjen formaterom celih brojeva od 709 bajtova, proverenim protiv samog snprintf-a na 3,5 miliona slučajeva.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Korak 4 je zanimljiv.</span> Na ruti koja stvarno prelazi na drugo jezgro, propusnost je otišla sa <span style="font-weight: bold;" class="mycode_b">631 na 3 853 zaht/s — 6,1×</span>, a p99 kašnjenje sa 32 ms na 8,2 ms. Na svim ostalim rutama je <span style="font-weight: bold;" class="mycode_b">oduzeo 3,6 %</span>. Da sam naveo samo ono 6,1× ispalo bi lepše i bilo bi manje korisno.<br />
<br />
Usko grlo nikad nije bilo sanduče između jezgara nego <span style="font-weight: bold;" class="mycode_b">milisekundna granulacija tajmera</span>: drugo jezgro odgovori za 51 µs, dvadeset puta brže nego što petlja ume da probudi vezu. Prekid je omogućio da se red tajmera potpuno preskoči. Sama granulacija je i dalje tu.<br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b">ecm-forth — logika na drugom jezgru, sa rokom</span><br />
<br />
Server servira; logiku uređaja piše korisnik — u Forth-u. ecm-forth je threaded-code VM po Chuck Moore modelu: reči se <span style="font-weight: bold;" class="mycode_b">jednom</span> kompajliraju u tokene, runtime vidi samo brojeve, imena posle boot-a više ne postoje. Ćelija je mašinska reč (32-bit na STM32, 64-bit na serveru), dispatch je computed-goto, ceo VM je ~10 KB .text na Cortex-M7 (-Os).<br />
<br />
Tri odluke koje ga čine upotrebljivim u produkciji, ne samo na demo tabli:<br />
<ul class="mycode_list"><li><span style="font-weight: bold;" class="mycode_b">Budžet koraka</span> — nijedna reč ne može da vrti večno. "begin 0 until" vrati grešku "limit izvršavanja"; čip ne trepne, ništa se ne obesi.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Pečat</span> — posle boot-a VM odbija SVAKO novo definisanje. Izvršava se samo ono što je već kompajlirano. Nema "eval user inputa" rupe, po dizajnu.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Nula alokacija</span> — VM se digne nad statičkim baferom, ista priča kao server.<br />
</li>
</ul>
<br />
Na H755 Forth radi na Cortex-M4 sa <span style="font-weight: bold;" class="mycode_b">tvrdim rokom od 1 ms po otkucaju</span>. Sa ploče, u trenutku pisanja ovog posta:<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>najgori slučaj ikada          21 µs   (od 1 000 µs budžeta)
propušteni rokovi od reseta       0
greške Forth koda                 0</code></div></div><br />
Onaj međujezgarni prekid iz koraka 4 gore dodao je tačno <span style="font-weight: bold;" class="mycode_b">2 µs</span> na najgori slučaj — zato je i smeo da uđe.<br />
<br />
I VM je testiran kako treba: <span style="font-weight: bold;" class="mycode_b">303 provere × 5 konfiguracija</span> (host 64-bit computed-goto, host 64-bit switch, host 32-bit, MCU profil, ASan+UBSan) plus prevod za M0/M4/M7 — na svakoj gradnji. U kompajler su ugrađene tri tehnike iz PicForth-a (tail-call na ";", constant folding, fuzija poređenja i grane), svaka izmerena istim bench harnessom: konstantna petlja 2,7×, flag petlja 1,7×, a repna rekurzija od 100k nivoa pretvorena iz "ruši stek" u "radi".<br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Naspram nginx-a — 25 imena direktiva prema 459</span><br />
<br />
Referenca je nginx 1.24.0 sa podrazumevanim modulima plus http_ssl: 459 jedinstvenih direktiva u 53 modula. Pošteno sortirano, tri korpe:<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>radi           statički fajlovi   uslovni zahtevi, opsezi bajtova, ETag,
                                  gzip_static; 77 od 78 diferencijalnih
                                  provera se poklapa sa pravim nginx-om
               location           prefiks, =, ^~, ~, ~*
               TLS                mbedTLS bez alokacije, klijentski certi,
                                  ECDSA P-256/P-384

delimično      keepalive          4 direktive; granulacija tajminga 1 ms

nema           error_page         svaki 404/403/301 ide sa Content-Length: 0
                                  (nginx šalje 153-169 B HTML-a)
               rewrite/if/set     19 od 34 testa pada; regex mašina POSTOJI,
                                  modul ne
               allow/deny         mali moduli, ali vidi upozorenje dole
               auth_basic

neće ni biti   gzip u radu        zlib deflate traži ~262 KB po vezi na
                                  nginx-ovim podrazumevanim vrednostima;
                                  gzip_static pokriva isti posao
               proxy/FastCGI      221 direktiva; traže klijentsku stranu,
               upstream           upstream skup, keš na disku i deljenu
                                  memoriju između procesa — ovde je jedan
                                  proces i jedna nit
               HTTP/2, HTTP/3     van opsega za ovu klasu uređaja
               stream, mail</code></div></div><br />
<span style="font-weight: bold;" class="mycode_b">Najoštrija ivica, otvoreno:</span> nepoznata direktiva se trenutno <span style="font-weight: bold;" class="mycode_b">ćutke ignoriše</span>. nginx odbija da se digne na njoj. To znači da konfiguracija koja sadrži <span style="font-style: italic;" class="mycode_i">deny all</span> ili <span style="font-style: italic;" class="mycode_i">auth_basic</span> ovde uredno prođe i <span style="font-weight: bold;" class="mycode_b">ne sprovodi ništa</span> — bezbednosna zamka, ne neudobnost. To je sledeća stvar koja se popravlja.<br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Kako se proverava</span><br />
<br />
Tvrdnje o ugrađenom serveru su jeftine. Ovih pet provera je teško lažirati i puštaju se na svakoj gradnji.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">1. Nula alokacija, dokazano linkerom.</span> Test binarni fajl se linkuje sa -Wl,--wrap=malloc,--wrap=calloc,--wrap=realloc. Svaka alokacija bilo gde — uključujući unutar mbedTLS-a — uveća brojač. Pun mTLS handshake i raskid prijavljuju nulu. Ovo nije tvrdnja iz pregleda koda; build pada ako ikad prestane da važi.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">2. nginx-ovi sopstveni testovi, sa imeniocem koji se ne pumpa.</span> 279 od 313. Dve ograde, obe čine broj gorim: 476 od 495 test fajlova se preskoči jer traže proxy, stream ili HTTP/2 — i konfiguracija koju server prijavljuje <span style="font-weight: bold;" class="mycode_b">namerno ne tvrdi</span> --without-http_rewrite_module, iako rewrite-a nema. Da tvrdi, rezultat bi bio 279/294, tako što bi padove sakrio umesto popravio.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">3. Diferencijalno protiv pravog nginx-a.</span> Isti zahtevi se puste na ecmx i na pravi nginx 1.24.0 nad istim fajlom, pa se odgovori porede polje po polje. Odvojeno, regex mašina se poredi sa PCRE2 10.42 na 367 584 parova obrazac/ulaz, uključujući nasumično generisanje obrazaca. Oba trenutno prijavljuju nula neslaganja.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">4. Greška koju je ovo našlo prošle nedelje.</span> POSIX klase znakova — <span style="font-style: italic;" class="mycode_i">[[:digit:]]</span>, <span style="font-style: italic;" class="mycode_i">[[:alnum:]]</span> — kompajlirale su se bez greške i čitale kao običan skup znakova:<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>[[:digit:]]+  nad "123"  -&gt;  ne hvata      &lt;- trebalo bi da hvata
[[:digit:]]+  nad ":]"   -&gt;  HVATA         &lt;- ne bi smelo
[0-9]+        nad "123"  -&gt;  HVATA         (kontrola, ispravno)</code></div></div><br />
Znači <span style="font-style: italic;" class="mycode_i">location ~ ^/admin/[[:alnum:]]+&#36;</span> ne bi hvatao <span style="font-weight: bold;" class="mycode_b">ništa</span>. Preživelo je 354 415 nasumičnih poređenja zato što generator obrazaca nikad ne emituje <span style="font-style: italic;" class="mycode_i">[[:</span>. Uhvatio ga je harness sa fiksnim obrascima. To je argument za to da se puštaju oba, i razlog zašto se "nula neslaganja" uvek mora čitati zajedno sa "nad kojim ulazima". Sad je popravljeno: svih 14 POSIX klasa, negacija, i PCRE-ova tačna pravila za neispravne slučajeve.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">5. Ploča opisuje samu sebe.</span> Sve gore je i "datasheet" stranica koju servira sam H755 — sa živim brojačima (uptime, opsluženi zahtevi, najgori slučaj RT jezgra, propušteni rokovi) koje stranica vuče sa /api/sve svake tri sekunde. Server koji se opisuje je server koji ti odgovara.<br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Otvoreno</span><br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>nepoznate direktive se ćutke ignorišu    bezbednost   konfiguracija koja izgleda
                                                      zaštitno to nije
istek sertifikata se ne proverava        bezbednost   istekli klijentski certi
                                                      se prihvataju
listen [::]:port ubija server blok       ispravnost   proces radi bez slušača
granulacija tajmera je 1 ms              brzina       spori rukovaoci plaćaju
                                                      &gt;=1 ms po krugu
nema rewrite / if / set                  funkcije     19 padova; mašina postoji
prazna tela odgovora na greške           kozmetika    odstupa od nginx-a na
                                                      svakom statusu greške</code></div></div><br />
<br />
<span style="font-weight: bold;" class="mycode_b">Sitno</span><br />
<br />
Merenja: NUCLEO-H755ZI-Q, GCC -Os / -O2, mbedTLS bez hipa. Propusnost preko wrk -t2 -c8 -d20s na 100 Mbit Ethernetu, isti parametri u svakom prolazu. Referenca: nginx 1.24.0, PCRE2 10.42. Forth: 303 provere × 5 konfiguracija, bench harness identičan pre i posle optimizacija.<br />
<br />
Pitanja i rupe u rezonovanju su dobrodošli — pola gornjeg spiska "otvoreno" je nastalo tako što je neko pitao "a jesi proverio...".]]></description>
			<content:encoded><![CDATA[<span style="font-weight: bold;" class="mycode_b">ecmx — HTTP/S server po nginx-ovim pravilima, na mikrokontroleru</span><br />
<br />
Svaki embedded web server koji sam do sada koristio ima isti problem: rute su C funkcije zakucane u firmver. Hoćeš da dodaš redirect, promeniš timeout, zaštitiš /admin klijentskim sertifikatom? Novi build, novo flešovanje, i moli se da usput nisi slomio nešto drugo. A taj problem je na serverskoj strani rešen pre dvadeset godina — rešenje se zove nginx.conf.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">ecmx</span> je HTTP/S server za mikrokontrolere koji <span style="font-weight: bold;" class="mycode_b">čita nginx-ovu konfiguraciju</span>: isti format fajla, isti location blokovi (prefiks, =, ^~, ~, ~*), iste direktive — podskup, ne sve, o tome pošteno niže. I što je važnije od sintakse: <span style="font-weight: bold;" class="mycode_b">pušta nginx-ove sopstvene testove</span>, pa se njegovo ponašanje ne dokazuje mojom rečju nego test suite-om koji svako može da pokrene.<br />
<br />
Uz njega, na drugom jezgru istog čipa, radi <span style="font-weight: bold;" class="mycode_b">ecm-forth</span> — real-time Forth interpreter u kome živi aplikaciona logika. Rezultat: ponašanje uređaja se menja izmenom tekst fajla i reload-om, ne flešovanjem.<br />
<br />
Meta: NUCLEO-H755ZI-Q — Cortex-M7 na 480 MHz (server) plus Cortex-M4 na 240 MHz (Forth, sa tvrdim rokom od 1 ms).<br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Zašto ne neki od običnih embedded servera?</span><br />
<br />
Legitimno pitanje — za prosto "serviraj mi index.html sa senzorskim očitavanjima" ecmx je overkill. Razlika se vidi kad uređaj treba da živi godinama kod klijenta:<br />
<ul class="mycode_list"><li><span style="font-weight: bold;" class="mycode_b">Konfiguracija umesto rekompajliranja.</span> Rute, TLS, keepalive, pristup — tekst fajl, ne #ifdef šuma. Ko je ikad pisao nginx.conf, već zna da podesi ovaj server.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Ponašanje koje je neko već dokumentovao.</span> Ne izmišljam semantiku pa je opisujem u README-u — preuzimam nginx-ovu, koja je opisana, poznata adminima i pokrivena tuđim testovima. Kad se ecmx i nginx ne slažu, to je po definiciji bug u ecmx-u.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Deterministička memorija.</span> Nula malloc-a — nigde, uključujući TLS. Nema fragmentacije hipa, nema "radio je tri nedelje pa stao". Sve što će ikad biti zauzeto zna se u trenutku linkovanja.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Logika bez flešovanja.</span> Forth skripta se kompajlira jednom pri boot-u, pa se VM zapečati. Izmena logike = nova skripta + reload. Firmver se ne dira.<br />
</li>
</ul>
<br />
Ne znam ni za jedan drugi server u ovoj klasi koji se meri nginx-ovim testovima — ako neko zna, neka javi, ozbiljno me zanima.<br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Kako je građen</span><br />
<br />
Jezgro servera je sans-I/O: transport mu doda bajtove, ono vrati nameru (WANT_READ, WANT_WRITE, CLOSE, IDLE). Zato isto jezgro radi i preko POSIX soketa i na golom metalu bez sloja za kompatibilnost — i zato može da se testira punom brzinom na radnoj stanici.<br />
<br />
Dve tvrde odluke, za ceo sistem: <span style="font-weight: bold;" class="mycode_b">nula malloc-a</span> (uključujući TLS i Forth VM) i <span style="font-weight: bold;" class="mycode_b">nula statičkog RAM-a</span> — 0 data i 0 bss u svih 19 modula servera.<br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Memorija</span><br />
<br />
Svaki broj je marginalna cena iz <span style="font-style: italic;" class="mycode_i">dva prava linkovanja</span> — sagradi sa modulom, sagradi bez njega, oduzmi. Zbir veličina objektnih fajlova se ne koristi, jer se tako deljene pomoćne funkcije i niske naplate dvaput.<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>komponenta                    fleš (B)   RAM fiksni   RAM po vezi
--------------------------------------------------------------------
jezgro (petlja, parser,         16 196          664         2 651
        odgovor, baferi, tajmeri)
TLS (mbedTLS, bez hipa)        101 744       20 792        23 552
regex mašina                     6 052            0             0
telnet konzola                   5 384            0             0
promenljive                      3 684            0             0
ciklus konfiguracije             2 620            0             0
datum / vreme                    2 336            0             0
merni brojači                    1 892          480             0
parser konfiguracije             1 724            0             0
statički fajlovi                 1 116            0             0
auth kuka                          316            0             0
--------------------------------------------------------------------
sve osim TLS-a                  41 320        1 144         2 651</code></div></div><br />
Zauzeće čipa: fleš 317 376 od 1 048 576 B (30,3 %), RAM 482 016 od 524 288 B (91,9 % — server, stekovi, mrežni baferi, 16 TLS veza).<br />
<br />
<span style="font-weight: bold;" class="mycode_b">TLS pojede sve.</span> Na 23,5 KB po vezi, 16 istovremenih TLS sesija traži oko 400 KB od 512 KB koliko ovaj čip ima. Pravi budžet nije broj funkcija nego <span style="font-weight: bold;" class="mycode_b">broj veza</span> — podizanje sa 16 na 64 košta 127 KB, više nego svi opcioni moduli zajedno.<br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Brzina</span><br />
<br />
Četiri izmene, svaka merena posebno na hardveru. Merenja na radnoj stanici su <span style="font-style: italic;" class="mycode_i">svaki put</span> pogrešno predvidela veličinu dobitka, pa ih ovde i ne navodim.<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>                                       zaht/s     promena
------------------------------------------------------------
1. polazno                              3 567
2. -O2                                  4 155      +16,5 %
3. izbačen snprintf                     4 305       +3,6 %
4. međujezgarni prekid (HSEM)           4 149       -3,6 %</code></div></div><br />
Korak 2: radna stanica je predvidela 1,58×, hardver dao 1,17×. Korak 3: snprintf zamenjen formaterom celih brojeva od 709 bajtova, proverenim protiv samog snprintf-a na 3,5 miliona slučajeva.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Korak 4 je zanimljiv.</span> Na ruti koja stvarno prelazi na drugo jezgro, propusnost je otišla sa <span style="font-weight: bold;" class="mycode_b">631 na 3 853 zaht/s — 6,1×</span>, a p99 kašnjenje sa 32 ms na 8,2 ms. Na svim ostalim rutama je <span style="font-weight: bold;" class="mycode_b">oduzeo 3,6 %</span>. Da sam naveo samo ono 6,1× ispalo bi lepše i bilo bi manje korisno.<br />
<br />
Usko grlo nikad nije bilo sanduče između jezgara nego <span style="font-weight: bold;" class="mycode_b">milisekundna granulacija tajmera</span>: drugo jezgro odgovori za 51 µs, dvadeset puta brže nego što petlja ume da probudi vezu. Prekid je omogućio da se red tajmera potpuno preskoči. Sama granulacija je i dalje tu.<br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b">ecm-forth — logika na drugom jezgru, sa rokom</span><br />
<br />
Server servira; logiku uređaja piše korisnik — u Forth-u. ecm-forth je threaded-code VM po Chuck Moore modelu: reči se <span style="font-weight: bold;" class="mycode_b">jednom</span> kompajliraju u tokene, runtime vidi samo brojeve, imena posle boot-a više ne postoje. Ćelija je mašinska reč (32-bit na STM32, 64-bit na serveru), dispatch je computed-goto, ceo VM je ~10 KB .text na Cortex-M7 (-Os).<br />
<br />
Tri odluke koje ga čine upotrebljivim u produkciji, ne samo na demo tabli:<br />
<ul class="mycode_list"><li><span style="font-weight: bold;" class="mycode_b">Budžet koraka</span> — nijedna reč ne može da vrti večno. "begin 0 until" vrati grešku "limit izvršavanja"; čip ne trepne, ništa se ne obesi.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Pečat</span> — posle boot-a VM odbija SVAKO novo definisanje. Izvršava se samo ono što je već kompajlirano. Nema "eval user inputa" rupe, po dizajnu.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Nula alokacija</span> — VM se digne nad statičkim baferom, ista priča kao server.<br />
</li>
</ul>
<br />
Na H755 Forth radi na Cortex-M4 sa <span style="font-weight: bold;" class="mycode_b">tvrdim rokom od 1 ms po otkucaju</span>. Sa ploče, u trenutku pisanja ovog posta:<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>najgori slučaj ikada          21 µs   (od 1 000 µs budžeta)
propušteni rokovi od reseta       0
greške Forth koda                 0</code></div></div><br />
Onaj međujezgarni prekid iz koraka 4 gore dodao je tačno <span style="font-weight: bold;" class="mycode_b">2 µs</span> na najgori slučaj — zato je i smeo da uđe.<br />
<br />
I VM je testiran kako treba: <span style="font-weight: bold;" class="mycode_b">303 provere × 5 konfiguracija</span> (host 64-bit computed-goto, host 64-bit switch, host 32-bit, MCU profil, ASan+UBSan) plus prevod za M0/M4/M7 — na svakoj gradnji. U kompajler su ugrađene tri tehnike iz PicForth-a (tail-call na ";", constant folding, fuzija poređenja i grane), svaka izmerena istim bench harnessom: konstantna petlja 2,7×, flag petlja 1,7×, a repna rekurzija od 100k nivoa pretvorena iz "ruši stek" u "radi".<br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Naspram nginx-a — 25 imena direktiva prema 459</span><br />
<br />
Referenca je nginx 1.24.0 sa podrazumevanim modulima plus http_ssl: 459 jedinstvenih direktiva u 53 modula. Pošteno sortirano, tri korpe:<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>radi           statički fajlovi   uslovni zahtevi, opsezi bajtova, ETag,
                                  gzip_static; 77 od 78 diferencijalnih
                                  provera se poklapa sa pravim nginx-om
               location           prefiks, =, ^~, ~, ~*
               TLS                mbedTLS bez alokacije, klijentski certi,
                                  ECDSA P-256/P-384

delimično      keepalive          4 direktive; granulacija tajminga 1 ms

nema           error_page         svaki 404/403/301 ide sa Content-Length: 0
                                  (nginx šalje 153-169 B HTML-a)
               rewrite/if/set     19 od 34 testa pada; regex mašina POSTOJI,
                                  modul ne
               allow/deny         mali moduli, ali vidi upozorenje dole
               auth_basic

neće ni biti   gzip u radu        zlib deflate traži ~262 KB po vezi na
                                  nginx-ovim podrazumevanim vrednostima;
                                  gzip_static pokriva isti posao
               proxy/FastCGI      221 direktiva; traže klijentsku stranu,
               upstream           upstream skup, keš na disku i deljenu
                                  memoriju između procesa — ovde je jedan
                                  proces i jedna nit
               HTTP/2, HTTP/3     van opsega za ovu klasu uređaja
               stream, mail</code></div></div><br />
<span style="font-weight: bold;" class="mycode_b">Najoštrija ivica, otvoreno:</span> nepoznata direktiva se trenutno <span style="font-weight: bold;" class="mycode_b">ćutke ignoriše</span>. nginx odbija da se digne na njoj. To znači da konfiguracija koja sadrži <span style="font-style: italic;" class="mycode_i">deny all</span> ili <span style="font-style: italic;" class="mycode_i">auth_basic</span> ovde uredno prođe i <span style="font-weight: bold;" class="mycode_b">ne sprovodi ništa</span> — bezbednosna zamka, ne neudobnost. To je sledeća stvar koja se popravlja.<br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Kako se proverava</span><br />
<br />
Tvrdnje o ugrađenom serveru su jeftine. Ovih pet provera je teško lažirati i puštaju se na svakoj gradnji.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">1. Nula alokacija, dokazano linkerom.</span> Test binarni fajl se linkuje sa -Wl,--wrap=malloc,--wrap=calloc,--wrap=realloc. Svaka alokacija bilo gde — uključujući unutar mbedTLS-a — uveća brojač. Pun mTLS handshake i raskid prijavljuju nulu. Ovo nije tvrdnja iz pregleda koda; build pada ako ikad prestane da važi.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">2. nginx-ovi sopstveni testovi, sa imeniocem koji se ne pumpa.</span> 279 od 313. Dve ograde, obe čine broj gorim: 476 od 495 test fajlova se preskoči jer traže proxy, stream ili HTTP/2 — i konfiguracija koju server prijavljuje <span style="font-weight: bold;" class="mycode_b">namerno ne tvrdi</span> --without-http_rewrite_module, iako rewrite-a nema. Da tvrdi, rezultat bi bio 279/294, tako što bi padove sakrio umesto popravio.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">3. Diferencijalno protiv pravog nginx-a.</span> Isti zahtevi se puste na ecmx i na pravi nginx 1.24.0 nad istim fajlom, pa se odgovori porede polje po polje. Odvojeno, regex mašina se poredi sa PCRE2 10.42 na 367 584 parova obrazac/ulaz, uključujući nasumično generisanje obrazaca. Oba trenutno prijavljuju nula neslaganja.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">4. Greška koju je ovo našlo prošle nedelje.</span> POSIX klase znakova — <span style="font-style: italic;" class="mycode_i">[[:digit:]]</span>, <span style="font-style: italic;" class="mycode_i">[[:alnum:]]</span> — kompajlirale su se bez greške i čitale kao običan skup znakova:<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>[[:digit:]]+  nad "123"  -&gt;  ne hvata      &lt;- trebalo bi da hvata
[[:digit:]]+  nad ":]"   -&gt;  HVATA         &lt;- ne bi smelo
[0-9]+        nad "123"  -&gt;  HVATA         (kontrola, ispravno)</code></div></div><br />
Znači <span style="font-style: italic;" class="mycode_i">location ~ ^/admin/[[:alnum:]]+&#36;</span> ne bi hvatao <span style="font-weight: bold;" class="mycode_b">ništa</span>. Preživelo je 354 415 nasumičnih poređenja zato što generator obrazaca nikad ne emituje <span style="font-style: italic;" class="mycode_i">[[:</span>. Uhvatio ga je harness sa fiksnim obrascima. To je argument za to da se puštaju oba, i razlog zašto se "nula neslaganja" uvek mora čitati zajedno sa "nad kojim ulazima". Sad je popravljeno: svih 14 POSIX klasa, negacija, i PCRE-ova tačna pravila za neispravne slučajeve.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">5. Ploča opisuje samu sebe.</span> Sve gore je i "datasheet" stranica koju servira sam H755 — sa živim brojačima (uptime, opsluženi zahtevi, najgori slučaj RT jezgra, propušteni rokovi) koje stranica vuče sa /api/sve svake tri sekunde. Server koji se opisuje je server koji ti odgovara.<br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Otvoreno</span><br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>nepoznate direktive se ćutke ignorišu    bezbednost   konfiguracija koja izgleda
                                                      zaštitno to nije
istek sertifikata se ne proverava        bezbednost   istekli klijentski certi
                                                      se prihvataju
listen [::]:port ubija server blok       ispravnost   proces radi bez slušača
granulacija tajmera je 1 ms              brzina       spori rukovaoci plaćaju
                                                      &gt;=1 ms po krugu
nema rewrite / if / set                  funkcije     19 padova; mašina postoji
prazna tela odgovora na greške           kozmetika    odstupa od nginx-a na
                                                      svakom statusu greške</code></div></div><br />
<br />
<span style="font-weight: bold;" class="mycode_b">Sitno</span><br />
<br />
Merenja: NUCLEO-H755ZI-Q, GCC -Os / -O2, mbedTLS bez hipa. Propusnost preko wrk -t2 -c8 -d20s na 100 Mbit Ethernetu, isti parametri u svakom prolazu. Referenca: nginx 1.24.0, PCRE2 10.42. Forth: 303 provere × 5 konfiguracija, bench harness identičan pre i posle optimizacija.<br />
<br />
Pitanja i rupe u rezonovanju su dobrodošli — pola gornjeg spiska "otvoreno" je nastalo tako što je neko pitao "a jesi proverio...".]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Level shifter 1.8V <> 3.3V]]></title>
			<link>https://forum.yu3ma.net/showthread.php?tid=2776</link>
			<pubDate>Thu, 03 Nov 2022 23:18:42 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://forum.yu3ma.net/member.php?action=profile&uid=107">mikikg</a>]]></dc:creator>
			<guid isPermaLink="false">https://forum.yu3ma.net/showthread.php?tid=2776</guid>
			<description><![CDATA[Pozdrav,<br />
<br />
da li može možda jednostavnije ili da se još ubrza?<br />
Ovaj sklop ima oko 120ns rise-delay i oko 300ns fall-delay ali je makar signal vrlo korektan sa dobrim nivoima.<br />
<br />
Sve ostale kombnijacije sa MOS-FET nisu mi se pokazale dobro na ovim naponima, nekako je složen signal ali je vrlo problematičnog oblika sa dosta nekih brljotina i traži specifične MOS-FET.<br />
<br />
Treba mi pomoćno rešenje da vežem 1.8V &lt;&gt; 3.3V digitaliju, tri linije u jednom smeru i jedna linija u drugom, unidirekcione su sve linije, <br />
<br />
Znam da imaju IC rešenja ali mi treba neko brzinsko rešenje samo da proradi je treba sa SW da radim dalje, sad imam problem sa tim naponskim nivoima, ova 3.3V periferija ne može da skonta kao logičko 1 ako je signal 1.8V, treba da bude oko 2.3V i tako za toliko sve ne-radi, mora da se pomeri nivo ...<br />
<br />
<img src="https://forum.yu3ma.net/attachment.php?aid=38678" loading="lazy"  alt="[Image: attachment.php?aid=38678]" class="mycode_img" /><br /><!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://forum.yu3ma.net/images/attachtypes/image.gif" title="PNG Image" border="0" alt=".png" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=38678" target="_blank" title="">Screen Shot 2022-11-04 at 00.16.35.png</a> (Size: 33,48 KB / Downloads: 129)
<!-- end: postbit_attachments_attachment -->]]></description>
			<content:encoded><![CDATA[Pozdrav,<br />
<br />
da li može možda jednostavnije ili da se još ubrza?<br />
Ovaj sklop ima oko 120ns rise-delay i oko 300ns fall-delay ali je makar signal vrlo korektan sa dobrim nivoima.<br />
<br />
Sve ostale kombnijacije sa MOS-FET nisu mi se pokazale dobro na ovim naponima, nekako je složen signal ali je vrlo problematičnog oblika sa dosta nekih brljotina i traži specifične MOS-FET.<br />
<br />
Treba mi pomoćno rešenje da vežem 1.8V &lt;&gt; 3.3V digitaliju, tri linije u jednom smeru i jedna linija u drugom, unidirekcione su sve linije, <br />
<br />
Znam da imaju IC rešenja ali mi treba neko brzinsko rešenje samo da proradi je treba sa SW da radim dalje, sad imam problem sa tim naponskim nivoima, ova 3.3V periferija ne može da skonta kao logičko 1 ako je signal 1.8V, treba da bude oko 2.3V i tako za toliko sve ne-radi, mora da se pomeri nivo ...<br />
<br />
<img src="https://forum.yu3ma.net/attachment.php?aid=38678" loading="lazy"  alt="[Image: attachment.php?aid=38678]" class="mycode_img" /><br /><!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://forum.yu3ma.net/images/attachtypes/image.gif" title="PNG Image" border="0" alt=".png" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=38678" target="_blank" title="">Screen Shot 2022-11-04 at 00.16.35.png</a> (Size: 33,48 KB / Downloads: 129)
<!-- end: postbit_attachments_attachment -->]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Napajanje za RPi + Display]]></title>
			<link>https://forum.yu3ma.net/showthread.php?tid=2711</link>
			<pubDate>Mon, 04 Apr 2022 16:57:18 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://forum.yu3ma.net/member.php?action=profile&uid=719">1van</a>]]></dc:creator>
			<guid isPermaLink="false">https://forum.yu3ma.net/showthread.php?tid=2711</guid>
			<description><![CDATA[Zdravo svima,<br />
<br />
Trenutno za potrebe jednog testa, imam sledeću konfiguraciju: RaspberryPi sa dosta USB periferija (npr. kamera, mis, zvucnik) i Display (15 inča, Touch Screen). Imam posebno napajanje za RPi od 5V 3A i za Display 12V 1A.<br />
<br />
Kako ovo treba da bude mobilno, a vec ima previše kablova jer ima i drugih komponenti, hocu da makar napajanje "prebacim u jedno".<br />
Kako bi vi ovo najjednostavnije rešili?<br />
<br />
Hvala.]]></description>
			<content:encoded><![CDATA[Zdravo svima,<br />
<br />
Trenutno za potrebe jednog testa, imam sledeću konfiguraciju: RaspberryPi sa dosta USB periferija (npr. kamera, mis, zvucnik) i Display (15 inča, Touch Screen). Imam posebno napajanje za RPi od 5V 3A i za Display 12V 1A.<br />
<br />
Kako ovo treba da bude mobilno, a vec ima previše kablova jer ima i drugih komponenti, hocu da makar napajanje "prebacim u jedno".<br />
Kako bi vi ovo najjednostavnije rešili?<br />
<br />
Hvala.]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Nabavka RPi4 u 2022-oj]]></title>
			<link>https://forum.yu3ma.net/showthread.php?tid=2670</link>
			<pubDate>Sat, 15 Jan 2022 21:00:27 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://forum.yu3ma.net/member.php?action=profile&uid=891">mancube</a>]]></dc:creator>
			<guid isPermaLink="false">https://forum.yu3ma.net/showthread.php?tid=2670</guid>
			<description><![CDATA[Već godinu dana ako ne i duže tražim da pazarim RPi4 po ceni makar približnoj originalnoj (a u poslednje vreme ih više ni nema na stanju, i pored duplirane cene), od kako je počela cela kriza sa manjkom čipova, scalpovanjem i preprodajom digitalije, pa se setih da i ovde pitam, postoji li neki put ka pronalaženju i kupovini istog? Idealno bi mi odgovarao model sa 4GB RAM-a ali nije presudan faktor...<br />
<br />
Dolaze u obzir i drugi ARM kompjuterčići, jedini uslov je da imaju USB3 (ili neki drugi bus koji se može konvertovati u SATA ili idealno native SATA) i gigabitni LAN. <br />
<br />
Hvala unapred na odgovoru!]]></description>
			<content:encoded><![CDATA[Već godinu dana ako ne i duže tražim da pazarim RPi4 po ceni makar približnoj originalnoj (a u poslednje vreme ih više ni nema na stanju, i pored duplirane cene), od kako je počela cela kriza sa manjkom čipova, scalpovanjem i preprodajom digitalije, pa se setih da i ovde pitam, postoji li neki put ka pronalaženju i kupovini istog? Idealno bi mi odgovarao model sa 4GB RAM-a ali nije presudan faktor...<br />
<br />
Dolaze u obzir i drugi ARM kompjuterčići, jedini uslov je da imaju USB3 (ili neki drugi bus koji se može konvertovati u SATA ili idealno native SATA) i gigabitni LAN. <br />
<br />
Hvala unapred na odgovoru!]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[RPi kernel driver za RM67162 - custom]]></title>
			<link>https://forum.yu3ma.net/showthread.php?tid=2668</link>
			<pubDate>Wed, 12 Jan 2022 07:29:33 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://forum.yu3ma.net/member.php?action=profile&uid=107">mikikg</a>]]></dc:creator>
			<guid isPermaLink="false">https://forum.yu3ma.net/showthread.php?tid=2668</guid>
			<description><![CDATA[Pozdrav društvo,<br />
<br />
da li je neko slučajno pisao neke video linux 5.x kernel drivere za RPi?<br />
<br />
Potrebno mi je da poteram 1.91'' displej 240x536px koji ima na sebi RM67162 display driver i koji koristi MIPI-DSI konekciju.<br />
Oznaka tog displeja je E1918AM3.A firme EDO (EverDisplay Optronics).<br />
U prilogu je DS od tog displeja.<br />
<br />
Ono sto je tu bitno je na stanici 12 i 13, tu ima deo procedure za inicializaciju. To je odprilike sve što imam na tu temu oko tog displeja, nemam ništa drugo od primera ili dodatne dokumentqacije.<br />
<br />
Za sam chip RM67162 imam neku verziju DS-a ali na primer tu nisam moga da nadjem sve opise registra koji se spominju u proceduri za inicializaciju, na primer nema opisa za "page" pod brojevima 4, 6 i 9, ima opis do page=3, takodje fale opisi za još neke registre (npr 0x6A) tako da mi se tu nešto ne slaže, izgleda da je u pitanju neka custom verzija chipa!?<br />
<br />
DS za displej:<br />
<a href="https://www.slideshare.net/ShawnHu5/191-inch-oled-display-module-resolution-240536-mipi-interface-for-wearable-smart-watchcell-phone" target="_blank" rel="noopener" class='oembed'>https://www.slideshare.net/ShawnHu5/191-...cell-phone</a><br />
<br />
DS za RM67162:<br />
<a href="https://drive.google.com/file/d/1Ck6OyF9q-o16WBBnXDExWz7JReU79rO8/view" target="_blank" rel="noopener" class='oembed'>https://drive.google.com/file/d/1Ck6OyF9...79rO8/view</a><br />
<br />
---<br />
<br />
Sto se tiče RPi drajvera, našao sam source-code za najsličniji drajver koji vozi RM68200:<br />
<a href="https://github.com/torvalds/linux/blob/master/drivers/gpu/drm/panel/panel-raydium-rm68200.c" target="_blank" rel="noopener" class='oembed'>https://github.com/torvalds/linux/blob/m...-rm68200.c</a><br />
<br />
Probao sam taj drajver da prevedem i za divno čudo prevodi se bez problema, koristio sam Makefile poput ovog (samo promeio ime fajla/drajvera)<br />
<br />
<blockquote class="mycode_quote"><cite>Quote:</cite>obj-m += rm67162-driver.o<br />
<br />
KDIR = /lib/modules/5.10.63-v7l+/build<br />
<br />
all:<br />
make -C &#36;(KDIR) M=&#36;(shell pwd) modules<br />
<br />
clean:<br />
make -C&#36;(KDIR) M=&#36;(shell pwd) clean</blockquote>
<br />
-----<br />
<br />
Kako da nastavim dalje sa ovim, kojom mukom da mučim ovaj RM67162 displej ... ? : (]]></description>
			<content:encoded><![CDATA[Pozdrav društvo,<br />
<br />
da li je neko slučajno pisao neke video linux 5.x kernel drivere za RPi?<br />
<br />
Potrebno mi je da poteram 1.91'' displej 240x536px koji ima na sebi RM67162 display driver i koji koristi MIPI-DSI konekciju.<br />
Oznaka tog displeja je E1918AM3.A firme EDO (EverDisplay Optronics).<br />
U prilogu je DS od tog displeja.<br />
<br />
Ono sto je tu bitno je na stanici 12 i 13, tu ima deo procedure za inicializaciju. To je odprilike sve što imam na tu temu oko tog displeja, nemam ništa drugo od primera ili dodatne dokumentqacije.<br />
<br />
Za sam chip RM67162 imam neku verziju DS-a ali na primer tu nisam moga da nadjem sve opise registra koji se spominju u proceduri za inicializaciju, na primer nema opisa za "page" pod brojevima 4, 6 i 9, ima opis do page=3, takodje fale opisi za još neke registre (npr 0x6A) tako da mi se tu nešto ne slaže, izgleda da je u pitanju neka custom verzija chipa!?<br />
<br />
DS za displej:<br />
<a href="https://www.slideshare.net/ShawnHu5/191-inch-oled-display-module-resolution-240536-mipi-interface-for-wearable-smart-watchcell-phone" target="_blank" rel="noopener" class='oembed'>https://www.slideshare.net/ShawnHu5/191-...cell-phone</a><br />
<br />
DS za RM67162:<br />
<a href="https://drive.google.com/file/d/1Ck6OyF9q-o16WBBnXDExWz7JReU79rO8/view" target="_blank" rel="noopener" class='oembed'>https://drive.google.com/file/d/1Ck6OyF9...79rO8/view</a><br />
<br />
---<br />
<br />
Sto se tiče RPi drajvera, našao sam source-code za najsličniji drajver koji vozi RM68200:<br />
<a href="https://github.com/torvalds/linux/blob/master/drivers/gpu/drm/panel/panel-raydium-rm68200.c" target="_blank" rel="noopener" class='oembed'>https://github.com/torvalds/linux/blob/m...-rm68200.c</a><br />
<br />
Probao sam taj drajver da prevedem i za divno čudo prevodi se bez problema, koristio sam Makefile poput ovog (samo promeio ime fajla/drajvera)<br />
<br />
<blockquote class="mycode_quote"><cite>Quote:</cite>obj-m += rm67162-driver.o<br />
<br />
KDIR = /lib/modules/5.10.63-v7l+/build<br />
<br />
all:<br />
make -C &#36;(KDIR) M=&#36;(shell pwd) modules<br />
<br />
clean:<br />
make -C&#36;(KDIR) M=&#36;(shell pwd) clean</blockquote>
<br />
-----<br />
<br />
Kako da nastavim dalje sa ovim, kojom mukom da mučim ovaj RM67162 displej ... ? : (]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[RPi Pico]]></title>
			<link>https://forum.yu3ma.net/showthread.php?tid=2527</link>
			<pubDate>Thu, 21 Jan 2021 15:01:49 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://forum.yu3ma.net/member.php?action=profile&uid=757">gorankg</a>]]></dc:creator>
			<guid isPermaLink="false">https://forum.yu3ma.net/showthread.php?tid=2527</guid>
			<description><![CDATA[<a href="https://thepihut.com/collections/raspberry-pi-pico/products/raspberry-pi-pico" target="_blank" rel="noopener" class='oembed'>https://thepihut.com/collections/raspber...ry-pi-pico</a><br />
<br />
[*]RP2040 microcontroller chip designed by Raspberry Pi in the United Kingdom<br />
[*]Dual-core ARM Cortex M0+ processor, flexible clock running up to 133 MHz<br />
[*]264kB of SRAM, and 2MB of onboard Flash memory. . . <br />
[*]. . . itd.]]></description>
			<content:encoded><![CDATA[<a href="https://thepihut.com/collections/raspberry-pi-pico/products/raspberry-pi-pico" target="_blank" rel="noopener" class='oembed'>https://thepihut.com/collections/raspber...ry-pi-pico</a><br />
<br />
[*]RP2040 microcontroller chip designed by Raspberry Pi in the United Kingdom<br />
[*]Dual-core ARM Cortex M0+ processor, flexible clock running up to 133 MHz<br />
[*]264kB of SRAM, and 2MB of onboard Flash memory. . . <br />
[*]. . . itd.]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Brother HL-1223WE na RPI 4]]></title>
			<link>https://forum.yu3ma.net/showthread.php?tid=2519</link>
			<pubDate>Wed, 06 Jan 2021 14:29:47 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://forum.yu3ma.net/member.php?action=profile&uid=879">gorso69</a>]]></dc:creator>
			<guid isPermaLink="false">https://forum.yu3ma.net/showthread.php?tid=2519</guid>
			<description><![CDATA[Kupio sam štampač iz naslova ove teme u nameri da mi bude mrežni štampač (laptop win7,android mob i RPI 4).E sad proradilo na mobu i laptopu preko wifi rutera ali RPI 4 naće nikako<br />
Novi OS za RPI 4 ima CUPS i on ga vidi (sa drajverom za HL-1240) ali neće da štampa.Raport kaće da je proces (job) ok,na štampaču blinka led za prijem podataka ali čtampe nema.<br />
Drajveri za linux su svi koje sam našao za i386 a ne za ARM kompajlirani.Na RPI 4 se u print setingu može dodati i kao USB ili mrežni štampač ali sve sa drajverom za HL-1240.Ima li pomoći za moj problem?]]></description>
			<content:encoded><![CDATA[Kupio sam štampač iz naslova ove teme u nameri da mi bude mrežni štampač (laptop win7,android mob i RPI 4).E sad proradilo na mobu i laptopu preko wifi rutera ali RPI 4 naće nikako<br />
Novi OS za RPI 4 ima CUPS i on ga vidi (sa drajverom za HL-1240) ali neće da štampa.Raport kaće da je proces (job) ok,na štampaču blinka led za prijem podataka ali čtampe nema.<br />
Drajveri za linux su svi koje sam našao za i386 a ne za ARM kompajlirani.Na RPI 4 se u print setingu može dodati i kao USB ili mrežni štampač ali sve sa drajverom za HL-1240.Ima li pomoći za moj problem?]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[RPI 4  SSD BOOT]]></title>
			<link>https://forum.yu3ma.net/showthread.php?tid=2471</link>
			<pubDate>Mon, 12 Oct 2020 15:20:31 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://forum.yu3ma.net/member.php?action=profile&uid=879">gorso69</a>]]></dc:creator>
			<guid isPermaLink="false">https://forum.yu3ma.net/showthread.php?tid=2471</guid>
			<description><![CDATA[Patim se dva dana ali bez rezultata da nateram RPI4 da se bootuje sa SSD.Probao sam 4-5 tutorijala ali bez uspeha.Dali je nekom od vas pošlo za rukom da to pokrene?SSD je INTENSO PORTABLE SSD USB 3.0.]]></description>
			<content:encoded><![CDATA[Patim se dva dana ali bez rezultata da nateram RPI4 da se bootuje sa SSD.Probao sam 4-5 tutorijala ali bez uspeha.Dali je nekom od vas pošlo za rukom da to pokrene?SSD je INTENSO PORTABLE SSD USB 3.0.]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Miskatino Basic | Arduino Mini (2k) | STM32F103]]></title>
			<link>https://forum.yu3ma.net/showthread.php?tid=2329</link>
			<pubDate>Tue, 21 Jan 2020 15:58:52 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://forum.yu3ma.net/member.php?action=profile&uid=107">mikikg</a>]]></dc:creator>
			<guid isPermaLink="false">https://forum.yu3ma.net/showthread.php?tid=2329</guid>
			<description><![CDATA[Zanimljivo, vrlo prost BASIC interpreter za Arduino i STM32, kada vam treba nesto brzinski da pokrenete na mikrokontroleru<br />
<br />
Arduino Mini (2k) or STM32F103<br />
<a href="https://github.com/Miskatino/miskatino-basic" target="_blank" rel="noopener" class='oembed'>https://github.com/Miskatino/miskatino-basic</a><br />
<br />
Web emulator:<br />
<a href="https://miskatino.github.io/miskatino-basic/" target="_blank" rel="noopener" class='oembed'>https://miskatino.github.io/miskatino-basic/</a><br />
<br />
Uputstvo za Miskatino Basic:<br />
<a href="https://github.com/Miskatino/miskatino-basic/wiki/Miskatino-Basic-Manual" target="_blank" rel="noopener" class='oembed'>https://github.com/Miskatino/miskatino-b...sic-Manual</a>]]></description>
			<content:encoded><![CDATA[Zanimljivo, vrlo prost BASIC interpreter za Arduino i STM32, kada vam treba nesto brzinski da pokrenete na mikrokontroleru<br />
<br />
Arduino Mini (2k) or STM32F103<br />
<a href="https://github.com/Miskatino/miskatino-basic" target="_blank" rel="noopener" class='oembed'>https://github.com/Miskatino/miskatino-basic</a><br />
<br />
Web emulator:<br />
<a href="https://miskatino.github.io/miskatino-basic/" target="_blank" rel="noopener" class='oembed'>https://miskatino.github.io/miskatino-basic/</a><br />
<br />
Uputstvo za Miskatino Basic:<br />
<a href="https://github.com/Miskatino/miskatino-basic/wiki/Miskatino-Basic-Manual" target="_blank" rel="noopener" class='oembed'>https://github.com/Miskatino/miskatino-b...sic-Manual</a>]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Prvi na 1GHz]]></title>
			<link>https://forum.yu3ma.net/showthread.php?tid=2271</link>
			<pubDate>Thu, 17 Oct 2019 06:55:58 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://forum.yu3ma.net/member.php?action=profile&uid=757">gorankg</a>]]></dc:creator>
			<guid isPermaLink="false">https://forum.yu3ma.net/showthread.php?tid=2271</guid>
			<description><![CDATA[ARM Cortex M7 sa klokom od 1GHz. <br />
i.MX RT1170 od NXP.<br />
<br />
<a href="https://blog.nxp.com/tech-insights/processing/an-order-of-magnitude-launching-the-gigahertz-mcu-era?elq_mid=7767&amp;elq_cid=1624830" target="_blank" rel="noopener" class='oembed'>https://blog.nxp.com/tech-insights/proce...id=1624830</a>]]></description>
			<content:encoded><![CDATA[ARM Cortex M7 sa klokom od 1GHz. <br />
i.MX RT1170 od NXP.<br />
<br />
<a href="https://blog.nxp.com/tech-insights/processing/an-order-of-magnitude-launching-the-gigahertz-mcu-era?elq_mid=7767&amp;elq_cid=1624830" target="_blank" rel="noopener" class='oembed'>https://blog.nxp.com/tech-insights/proce...id=1624830</a>]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[LSE LPTIM LPUART problem]]></title>
			<link>https://forum.yu3ma.net/showthread.php?tid=2184</link>
			<pubDate>Thu, 02 May 2019 09:14:30 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://forum.yu3ma.net/member.php?action=profile&uid=931">Goran.Mahovlic</a>]]></dc:creator>
			<guid isPermaLink="false">https://forum.yu3ma.net/showthread.php?tid=2184</guid>
			<description><![CDATA[Evo 7zip-nuo sam slikice problema sa LSE clockom koji sam imao nedavno...<br />
<br />
Kada se to desi, ne pomaže nikakav softreset, niti pomaže reset preko reset pina.<br />
Ali ne pomaže niti to da se obriše flash i stavi novi.<br />
<br />
Ono što pomogne je micanje baterije, nakon toga radi bez ikakvih problema vjerojatno do sljedećeg blokiaranja...<br />
To mi se je desilo samo nekoliko puta, pa sam dokumnetirao koliko sam uspio.<br />
Ono što je mogući uzrok je da ja palim i gasim LPTIM i mjenjam mu prescalar da bi provjerio da li mi dolaze impulsi a imao malu potrošnju.<br />
Uzrok može biti i neki nepredvidivi reset, ali teško je ponoviti problem, to se je desilo u par mjeseci 3 puta na različitim uređajima ...<br />
<br />
Problem sam na kraju morao zaobići tako da za source LPTIM-a i LPUART-a koristim drugi clock...<br />
RTC cijelo vrijeme radi na LSE i to ne staje...<br />
<br />
ST je rekao da nemaju to dokumentirano i da vide da je problem ali ne znaju kako bi mi pomogli osim ovako kako sam si sam pomogao...<br />
<br />
<!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://forum.yu3ma.net/images/attachtypes/image.gif" title="PNG Image" border="0" alt=".png" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=29885" target="_blank" title="">CLK_status.png</a> (Size: 127,52 KB / Downloads: 30)
<!-- end: postbit_attachments_attachment --><br />
<br />
U prilogu je 7zip sa slikicama.<br />
Jedno je uređaj koji radi normalno, drugo je taj "zapeo"<br />
<br />
<a href="https://yadi.sk/d/RXyyYuF9yw13kA" target="_blank" rel="noopener" class='oembed'>https://yadi.sk/d/RXyyYuF9yw13kA</a><br />
<br />
Pa ako itko ima takva ili slična iskustva ...<br />
Nedavno sam bio u Mariboru pa sam to ispričao, pa su mi rekli da su jako sličan problem imali na sveučilištu, ali nisu znali detalje...]]></description>
			<content:encoded><![CDATA[Evo 7zip-nuo sam slikice problema sa LSE clockom koji sam imao nedavno...<br />
<br />
Kada se to desi, ne pomaže nikakav softreset, niti pomaže reset preko reset pina.<br />
Ali ne pomaže niti to da se obriše flash i stavi novi.<br />
<br />
Ono što pomogne je micanje baterije, nakon toga radi bez ikakvih problema vjerojatno do sljedećeg blokiaranja...<br />
To mi se je desilo samo nekoliko puta, pa sam dokumnetirao koliko sam uspio.<br />
Ono što je mogući uzrok je da ja palim i gasim LPTIM i mjenjam mu prescalar da bi provjerio da li mi dolaze impulsi a imao malu potrošnju.<br />
Uzrok može biti i neki nepredvidivi reset, ali teško je ponoviti problem, to se je desilo u par mjeseci 3 puta na različitim uređajima ...<br />
<br />
Problem sam na kraju morao zaobići tako da za source LPTIM-a i LPUART-a koristim drugi clock...<br />
RTC cijelo vrijeme radi na LSE i to ne staje...<br />
<br />
ST je rekao da nemaju to dokumentirano i da vide da je problem ali ne znaju kako bi mi pomogli osim ovako kako sam si sam pomogao...<br />
<br />
<!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://forum.yu3ma.net/images/attachtypes/image.gif" title="PNG Image" border="0" alt=".png" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=29885" target="_blank" title="">CLK_status.png</a> (Size: 127,52 KB / Downloads: 30)
<!-- end: postbit_attachments_attachment --><br />
<br />
U prilogu je 7zip sa slikicama.<br />
Jedno je uređaj koji radi normalno, drugo je taj "zapeo"<br />
<br />
<a href="https://yadi.sk/d/RXyyYuF9yw13kA" target="_blank" rel="noopener" class='oembed'>https://yadi.sk/d/RXyyYuF9yw13kA</a><br />
<br />
Pa ako itko ima takva ili slična iskustva ...<br />
Nedavno sam bio u Mariboru pa sam to ispričao, pa su mi rekli da su jako sličan problem imali na sveučilištu, ali nisu znali detalje...]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[RTC na STM32 za baterijski rad]]></title>
			<link>https://forum.yu3ma.net/showthread.php?tid=2182</link>
			<pubDate>Wed, 01 May 2019 08:22:57 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://forum.yu3ma.net/member.php?action=profile&uid=814">prasimix</a>]]></dc:creator>
			<guid isPermaLink="false">https://forum.yu3ma.net/showthread.php?tid=2182</guid>
			<description><![CDATA[Da li je moguće da STM32 (recimo serije F7) treba za normalan nastavak rada RTCa kada je bez napajanja (napaja se preko Vbat iz baterije) koristiti poseban kristal (32.768 Hz)? Trenutno koristim samo 25 MHz kristal koji je preskaliran na 1 MHz da bi se koristio kao HSE_RTC i dalje preskalirao na potrebnih 1 Hz. Kada ostane bez napajanja, date/time ostaje sačuvan, ali ispada da RTC prestane brojati vrijeme.<br />
<br />
Drugo, a moguće da sam krivo mjerio, ali MCU povlači ispod 2 uA iz baterije kada je spojen na radno napajanje. Međutim kada ga ugasim, potrošnja skoči na nešto preko 20 uA. Kako je to moguće? U nastavku je fragment šeme na kojem se vidi kako su dovedena napajanja na MCU.<br />
<br />
<img src="https://i.imgur.com/4ez7g4V.png" loading="lazy"  alt="[Image: 4ez7g4V.png]" class="mycode_img" />]]></description>
			<content:encoded><![CDATA[Da li je moguće da STM32 (recimo serije F7) treba za normalan nastavak rada RTCa kada je bez napajanja (napaja se preko Vbat iz baterije) koristiti poseban kristal (32.768 Hz)? Trenutno koristim samo 25 MHz kristal koji je preskaliran na 1 MHz da bi se koristio kao HSE_RTC i dalje preskalirao na potrebnih 1 Hz. Kada ostane bez napajanja, date/time ostaje sačuvan, ali ispada da RTC prestane brojati vrijeme.<br />
<br />
Drugo, a moguće da sam krivo mjerio, ali MCU povlači ispod 2 uA iz baterije kada je spojen na radno napajanje. Međutim kada ga ugasim, potrošnja skoči na nešto preko 20 uA. Kako je to moguće? U nastavku je fragment šeme na kojem se vidi kako su dovedena napajanja na MCU.<br />
<br />
<img src="https://i.imgur.com/4ez7g4V.png" loading="lazy"  alt="[Image: 4ez7g4V.png]" class="mycode_img" />]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[RPI 3 + IQ audio pi dac +]]></title>
			<link>https://forum.yu3ma.net/showthread.php?tid=2121</link>
			<pubDate>Sat, 02 Mar 2019 08:13:27 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://forum.yu3ma.net/member.php?action=profile&uid=879">gorso69</a>]]></dc:creator>
			<guid isPermaLink="false">https://forum.yu3ma.net/showthread.php?tid=2121</guid>
			<description><![CDATA[Kompletirao sam najzad IQ audio pi dac + karticu sa RPI 3 B+ instalirao sam Volumio i to je proradilo sa LAN kablom,PC zvučnicima (preko izlaza za slušalice na pi dac +),smps adapter 5 V/3A.E sad ima dosta šuma dok ne počne reprodukcija ,pri reprodukciji sve o.k. Dali bi pomoglo linearno napajanje?. Probao sam da se oslobodim LAN kabla i da probam preko wifi ali ne radi.Volumio hotspot nema pristup internetu.Da li se neko susretao sa ovim problemom?]]></description>
			<content:encoded><![CDATA[Kompletirao sam najzad IQ audio pi dac + karticu sa RPI 3 B+ instalirao sam Volumio i to je proradilo sa LAN kablom,PC zvučnicima (preko izlaza za slušalice na pi dac +),smps adapter 5 V/3A.E sad ima dosta šuma dok ne počne reprodukcija ,pri reprodukciji sve o.k. Dali bi pomoglo linearno napajanje?. Probao sam da se oslobodim LAN kabla i da probam preko wifi ali ne radi.Volumio hotspot nema pristup internetu.Da li se neko susretao sa ovim problemom?]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[STM32 + ST-Link + PlatformIO - Debug]]></title>
			<link>https://forum.yu3ma.net/showthread.php?tid=2102</link>
			<pubDate>Mon, 04 Feb 2019 00:49:07 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://forum.yu3ma.net/member.php?action=profile&uid=858">vsavic</a>]]></dc:creator>
			<guid isPermaLink="false">https://forum.yu3ma.net/showthread.php?tid=2102</guid>
			<description><![CDATA[Pozdrav drustvo, napokon probah da ufleshujem nesto i na STM32F103. E sad, posto sam do sad radio samo sa ATMega rekoh da probam VS Code + STM32Duino, i blink je krenuo ok.<br />
<br />
Za flashovanje koristim ST-Link v2. <br />
<br />
E sad, imam problem kad u setup ubacim I2C, medjutim, nisam siguran kako da debugiram ovo cudo a da ne kacim sad i logic analyzer.<br />
<br />
Jel ima neka fora da mogu direktno da citam sa target-a poruke koje ispisujem sa `Serial.println()` dok je povezan preko ST-LINK-a il jok?]]></description>
			<content:encoded><![CDATA[Pozdrav drustvo, napokon probah da ufleshujem nesto i na STM32F103. E sad, posto sam do sad radio samo sa ATMega rekoh da probam VS Code + STM32Duino, i blink je krenuo ok.<br />
<br />
Za flashovanje koristim ST-Link v2. <br />
<br />
E sad, imam problem kad u setup ubacim I2C, medjutim, nisam siguran kako da debugiram ovo cudo a da ne kacim sad i logic analyzer.<br />
<br />
Jel ima neka fora da mogu direktno da citam sa target-a poruke koje ispisujem sa `Serial.println()` dok je povezan preko ST-LINK-a il jok?]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[RPi graficke biblioteke]]></title>
			<link>https://forum.yu3ma.net/showthread.php?tid=2024</link>
			<pubDate>Fri, 19 Oct 2018 21:17:07 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://forum.yu3ma.net/member.php?action=profile&uid=107">mikikg</a>]]></dc:creator>
			<guid isPermaLink="false">https://forum.yu3ma.net/showthread.php?tid=2024</guid>
			<description><![CDATA[U potrazi za nekim grafickim bibliotekama zgodnim za C/C++ programiranje na RPi naletoh na OpenVG.<br />
<a href="https://github.com/ajstarks/openvg" target="_blank" rel="noopener" class='oembed'>https://github.com/ajstarks/openvg</a><br />
<br />
U pitanju su vrlo proste bazicne funkcije za crtanje ali koje ne zahtevaju X11, Qt ili desktop okruzenje uopste, jednostavno preko OpenGL (EGSL) se obraca grafickom procesoru i crta trazene funkcije.<br />
<br />
Biblioteka i nekoliko primera se vrlo lako prevode i sve radi na prvu!<br />
<br />
Ovo i jos dodatno Boost biblioteka su zakon, to moze da radi opako dobro ...<br />
<a href="https://www.boost.org" target="_blank" rel="noopener" class='oembed'>https://www.boost.org</a>]]></description>
			<content:encoded><![CDATA[U potrazi za nekim grafickim bibliotekama zgodnim za C/C++ programiranje na RPi naletoh na OpenVG.<br />
<a href="https://github.com/ajstarks/openvg" target="_blank" rel="noopener" class='oembed'>https://github.com/ajstarks/openvg</a><br />
<br />
U pitanju su vrlo proste bazicne funkcije za crtanje ali koje ne zahtevaju X11, Qt ili desktop okruzenje uopste, jednostavno preko OpenGL (EGSL) se obraca grafickom procesoru i crta trazene funkcije.<br />
<br />
Biblioteka i nekoliko primera se vrlo lako prevode i sve radi na prvu!<br />
<br />
Ovo i jos dodatno Boost biblioteka su zakon, to moze da radi opako dobro ...<br />
<a href="https://www.boost.org" target="_blank" rel="noopener" class='oembed'>https://www.boost.org</a>]]></content:encoded>
		</item>
	</channel>
</rss>