Jak nejlépe formátovat pole znaku

Wiring, C++, C, Java, ...
Pravidla fóra
Toto subfórum slouží k řešení obecných otázek kolem programování (konstrukce, knihovny, alokace paměti, ...)
Uživatelský avatar
kiRRow
Příspěvky: 1151
Registrován: 07 kvě 2019, 07:03
Reputation: 0
Bydliště: Opava

Re: Jak nejlépe formátovat pole znaku

Příspěvek od kiRRow » 21 bře 2023, 21:50

Já myslím, že hlavní problém vzniká v tom, že ty se snažíš vyplivnout to všechno v jednom velmi velkém bufferu a mít to uloženo v omezené části paměti. Ulož to buď tím F makrem do flash paměti, nebo na SD kartu jako txt soubor, nebo to nějaké eeprom, externí flash paměti a tomu klientovi to přes ten ethernet shield dávej po dávkách. Nakonec to bude HTML soubor, přenášen bude pomocí TCP/IP o který se stará ten shield, ty ho tam nemusíš nacpat celý najednou, můžeš i po částech, jen nesmíš překročit timeout.

ARDDedek
Příspěvky: 12
Registrován: 21 bře 2023, 08:41
Reputation: 0

Re: Jak nejlépe formátovat pole znaku

Příspěvek od ARDDedek » 21 bře 2023, 21:54

Ja ale nerozporuji myslenku o halde nebo stacku.
Cely problem mi pripomina moje zacatky pred 40ti lety kdy jsem take musel vyuziti pameti pocita takrka az na jednitlive bity. Tehdy to byl asembler.
Po te co jsem zacal programovat v C tak jsem na tyto problemy takrka mohl zapomenout. Kompilator to spocital za mne.
Berte to tak ze C/Cpp lovim po dlouhe dobe z pameti a ucim se architekturu noveho chipu.
Do celeho programu jsem sel s mymi myzivymi znalostmi o uvedenm chipu a C/Cpp soucasne.
To ze ma 2k pameti to je mi jasne, ale ze architekturne jsou tyto 2k pouzity jak pro haldu tak i pro stack me zkutecne nenapadlo. (Drive to tak bylo, myslel jsem si ze dnesni chipy budou mit toto oddelene). Toto je jedna z myslenek kterou si odnasim jako zisk z vasich pismenek

ARDDedek
Příspěvky: 12
Registrován: 21 bře 2023, 08:41
Reputation: 0

Re: Jak nejlépe formátovat pole znaku

Příspěvek od ARDDedek » 21 bře 2023, 21:59

kiRRow píše:
21 bře 2023, 21:50
Já myslím, že hlavní problém vzniká v tom, že ty se snažíš vyplivnout to všechno v jednom velmi velkém bufferu a mít to uloženo v omezené části paměti. Ulož to buď tím F makrem do flash paměti, nebo na SD kartu jako txt soubor, nebo to nějaké eeprom, externí flash paměti a tomu klientovi to přes ten ethernet shield dávej po dávkách. Nakonec to bude HTML soubor, přenášen bude pomocí TCP/IP o který se stará ten shield, ty ho tam nemusíš nacpat celý najednou, můžeš i po částech, jen nesmíš překročit timeout.
Jo to je taky odpoved.

Uživatelský avatar
kiRRow
Příspěvky: 1151
Registrován: 07 kvě 2019, 07:03
Reputation: 0
Bydliště: Opava

Re: Jak nejlépe formátovat pole znaku

Příspěvek od kiRRow » 21 bře 2023, 22:23

a stím alokováním pamětí do haldy, hromady, heapu a zásobníkem, stackem pravdu má peterple ... ale v důsledku je jedno jestli to do sebe nabourá zespodu nahoru, nebo zeshora dolů ...

ondraN
Příspěvky: 932
Registrován: 08 srp 2019, 20:01
Reputation: 0

Re: Jak nejlépe formátovat pole znaku

Příspěvek od ondraN » 22 bře 2023, 10:36

Já na tyhle MCU s malou RAMkou používám sdílený buffer. Alokuji globální pole v dolní paměti. Funkcím, které potřebují nějaký větší buffer, pak předávám jeho adresu v parametrech funkce. Když má funkce požadavek na jiný typ, tak ten glob. buffer při volání funkce přetypuji. Pokud by hrozil konkurenční přístup, chce to ohlídat, nebo si udělat zámek a tím si to blokovat (ale to je málokdy).

peterple
Příspěvky: 156
Registrován: 22 zář 2021, 20:20
Reputation: 0

Re: Jak nejlépe formátovat pole znaku

Příspěvek od peterple » 22 bře 2023, 19:54

Ak máš ešte chuť bádať, nainštaluj si knižnicu MemoryUsage
Je tam sada makier ktoré pekne vypisujú kde začínajú a končia jednotlivé pamäťové regióny. Funguje to samozrejme runtime teda vidíš aj situáciu ako "rastie" zásobník. Myslím že na takéto problémy veľmi šikovné.
Popis a príklady tu:
https://github.com/Locoduino/MemoryUsage

ARDDedek
Příspěvky: 12
Registrován: 21 bře 2023, 08:41
Reputation: 0

Re: Jak nejlépe formátovat pole znaku

Příspěvek od ARDDedek » 22 bře 2023, 22:19

peterple píše:
22 bře 2023, 19:54
Ak máš ešte chuť bádať, nainštaluj si knižnicu MemoryUsage
Je tam sada makier ktoré pekne vypisujú kde začínajú a končia jednotlivé pamäťové regióny. Funguje to samozrejme runtime teda vidíš aj situáciu ako "rastie" zásobník. Myslím že na takéto problémy veľmi šikovné.
Popis a príklady tu:
https://github.com/Locoduino/MemoryUsage
Dekuji, za link urcite na to kouknu

Uživatelský avatar
gilhad
Příspěvky: 778
Registrován: 07 bře 2018, 11:22
Reputation: 0

Re: Jak nejlépe formátovat pole znaku

Příspěvek od gilhad » 23 bře 2023, 06:52

ARDDedek píše:
21 bře 2023, 21:54
Ja ale nerozporuji myslenku o halde nebo stacku. ...
To ze ma 2k pameti to je mi jasne, ale ze architekturne jsou tyto 2k pouzity jak pro haldu tak i pro stack me zkutecne nenapadlo. (Drive to tak bylo, myslel jsem si ze dnesni chipy budou mit toto oddelene).
Je to velmi logické - pokud bys rozdělil těch 2k pevně na dvě části (stack a halda, třeba 1k+1k), tak ti to nabourá na nedostatek paměti mnohem rychleji, že se ti zaplní jedna část a druhá bude mít nevyužité místo (1k+0.5k, nebo 0.5k+1k, nebo ...). Když to necháš jako jednu paměť, tak narazíš teprve až spojenýma silama vyčerpáš celá ta 2k naráz.

Přičemž ti to klidně může i v čase oscilovat, že jednou bydeš mít zásobník 1.5k a haldu 0.45k a o chvilku později naopak zásobník 0.2k a haldu 1.7k a pořád to bude OK.

To rozdělení paměti má smysl, pokud máš paměti opravdu hodně, nebo se to tak aspoň tváří díky virtuální paměti (kde sytém dynamicky rozděluje fyzickou paměť). Dá se s tím líp ladit a bezpečněji psát, ale právě za cenu dražšího a složitějšího HW, větší paměťové náročnosti a nějakého výkonu spáleného pro systém. To u současných PC není problém, HW je výkonný (a drahý oproti Arduinu) a ušetříš na lepší organizaci a hlavně na drahém času programátora.

Odpovědět

Kdo je online

Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 16 hostů