Jak nejlépe formátovat pole znaku
Pravidla fóra
Toto subfórum slouží k řešení obecných otázek kolem programování (konstrukce, knihovny, alokace paměti, ...)
Toto subfórum slouží k řešení obecných otázek kolem programování (konstrukce, knihovny, alokace paměti, ...)
Re: Jak nejlépe formátovat pole znaku
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.
Re: Jak nejlépe formátovat pole znaku
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
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
Re: Jak nejlépe formátovat pole znaku
Jo to je taky odpoved.kiRRow píše: ↑21 bře 2023, 21:50Já 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.
Re: Jak nejlépe formátovat pole znaku
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ů ...
Re: Jak nejlépe formátovat pole znaku
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).
Re: Jak nejlépe formátovat pole znaku
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
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
Re: Jak nejlépe formátovat pole znaku
Dekuji, za link urcite na to kouknupeterple píše: ↑22 bře 2023, 19:54Ak 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
Re: Jak nejlépe formátovat pole znaku
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.
Kdo je online
Uživatelé prohlížející si toto fórum: Google [Bot] a 2 hosti