AVR a dva seriaky

Jan Waclawek konfera@efton.sk
Sobota Prosinec 13 00:24:06 CET 2008


Nehnevaj sa, Miro, ale na rozsiahlejsiu odpoved som prilis unaveny. Tak Ti len tak poodsekavam v texte:


On Fri, 12 Dec 2008 16:15:18 +0100
"Miroslav Šinko" <sinkomiro@gmail.com> wrote:

> Dňa 12. december 2008 15:22, Jan Waclawek <konfera@efton.sk> napísal/a:
> > Nejde o to. Ide o to, ze to neovplyvnite. Zmeni sa nieco uplne ine, a vsetko je inak. Typicky problemy nastavaju, ked sa meni verzia kompilatora, napriklad. Kolega kvoli tomu udrziava avr-gcc prehistorickej verzie 3.volaco; 4.volaco totiz generuje pri vsetkych moznych nastaveniach vsetkych moznych prepinacov z toho isteho zdrojaku o 10% vacsi kod, co by nevadilo, keby to nebolo treba ako upgrade do existujuceho produktu.
> 
> >Koniec citatu. To bolo len ako priklad, preco nie v C, a preco "chodi mi to" nie je argument
> 
> Jedna ciste technicka otazka: Mam napisany (akoze nemam) povedzme ten
> SW UART v C s tym, ze na casovanie (vysielanych bitov a aj vzorkovania
> pri prijme) vyuzivam timer a jeho interrupt. Zmenim verziu
> kompilatora. Ako mi moze iny vysledok prekladu znefunkcnit kod? Nemam
> ziadne delay slucky, ktore ina optimalizacia rozhodi... 

Akoze nie? Este raz opakujem, na ten soft UART vplyva aj latencia, a to je mozno vacsi problem nez samotne prerusenia priamo suvisiace s tym softUARTom. Ak mas slucku - alebo aj cokolvek ine - v inych preruseniach alebo v castiach kodu ktore bezia so zakazanym prerusenim kvoli atomicite napriklad, tak mas problem.

Ale problem mozes mat aj v samotnom preruseni, aj je to na hrane. Vid dnesny thread "prekvapujuca optimalizacia" - gcc v ramci vyvoja ktory je podriadeny tym tucnym procesorom, niekedy aj "pesimizuje" kod pre AVR. Ale meni sa aj entry/exit kod funkcii aj preruseni, atd.atd.

Ozaj som unaveny, inak by som toho tu popisal este strany. A to je ten zakladny problem: ze to nie je jednoduche, co sa da odbit tromi vetami. 

Zakladny problem je hned v pouziti softUARTu. To je nudzovka, a nudzovky sa nerobia, a to sa zaciatocnikom nevysvetluje, ze preco, proste je to zakazane; a pokrocili aj tak vedia ze preco. Ma sa pouzit poriadny UART. Este raz odkazujem na ten FAQ na 8052.com.


> Viem si
> predstavit jedine, ako pises, vygenerovanie vacsieho kodu, ktoreho
> vykon zrejme (nie je to iste) bude trvat dlhsie, t.j. SW UART nemusi
> stihat vyssie rychlosti. 

Ano, a to znamena, ze to moze zlyhat. Mne osobne to pripada fatalne.

Znova opakujem, su aplikacie, kde obcasne zlyhanie nevadi. Dokonca su aplikacie, kde samotna aplikacia na dobu, ked ma fungovat softUART, nemusi vobec bezat, a teda softUART sa da urobit ako prosty bit-bang, bez preruseni. A ano, pri nizkych baudratoch su problemy nepravdepodobne - a su aj take baudrate, pan kolega Stengl a aj ini urcite poznaju aplikaciu kde sa ide 45 resp. 45.5 baudami. 

Lenze ak sa jedna o taketo pripady, tak predpokladam, ze sa tu nikto nebude na to pytat. V tejto konfere zvyknu padat len uplne OT otazky, a ked je to k veci, tak tie otazky su obvykle zlozite. To mam akoze kazdy moj post zahajit nejakou skupinou formuliek, ze "zasadne nerobte soft UART v C, ale zasada neplati, ak to je rychlost nizsia ako tisicina instrukcneho cyklu, alebo ak si mozete dovolit zastavit aplikaciu"? Trocha je to unavne. Nieco o tom pytajucom sa odhadnem, a v tej odpovedi je ten odhad implicitne pouzity. Potom pridu vselijaki vrtaci ktori nemaju zaujem poradit, ale len pindat, s prepacenim. A ja debil sa im snazim potom tie implicitne predpokladane veci vysvetlovat, napriek tomu, ze sam autor povodnej otazky medzicasom priamo uviedol, ze tie moje implicitne predpoklady platia. Unavuje ma to, a je to zbytocne.


> Na jednoduche nastavenie registrov, bitove
> posuny a reziu obsluhy preruseni nepredpokladam velky dopad noveho
> kompilatora.

Tak nepredpokladaj. Inzinier nepredpoklada. Moze robit inziniersky, kvalifikovany odhad, ale musi na to mat nejake vychodiska. Napriklad skusenost, znalost pozadia (v tomto pripade znalost internych zalezitosti daneho kompilatora). Kde je inzinierska hrdost? S tymto pristupom, "predpokladam, ze to zelezo je dost pevne" by Eiffelovi ta veza spadla hned pocas stavby (tak ako mu to predpovedali), akurat ze on bol PAN inzinier, na zelezo vyzadoval patricne zaruky od zeleziarne a robil si aj vlastne skusky (to som si vymyslel), a ta veza dodnes stoji (ako aj retazovy most v Budapesti a aj ine - a to som si nevymyslel). 

 
> A teraz ina otazka: Tvoju poslednu repliku chapem ako vseobecne NIE
> pre C, chapem to spravne? 

Nie nechapes. Znova, mam naozaj stale v kazdom maile vypisovat, ze C nie ak sa jedna o softwarovy uart, ale toto neplati ak je to ten trivialny pripad s pomalym uartom... atd.atd.atd. ?


>  Aj ked mam nieco napisane podla najlepsieho
> uvazenia, mam to odladene a teda "chodi mi to", stale to pre Teba nie
> je argument. 

To nie je pravda. To si na velkom omyle. Uviedol si slova "podla najlepsieho uvazenia". Pan kolega Grepl napisal, "po zralé úvaze". To su velmi silne tvrdenia, a ak si za tym obaja stojite, tak to zasadne meni vyznam "chodi mi to".

"Chodi mi to" zvyknu pouzivat ako argument ti, ktori tu "zrelu uvahu" nepouzivaju, jednoducho preto lebo nemaju na to skusenosti (do coho sa rata trebars aj relevantne vzdelanie). Urcite poznas ten vyraz "hrdzavy klinec" (ktory mi je nepravom pripisovany - mne sa paci a rad ho pouzivam, ale mam pocit ze som ho pocul prave tu v konfere, mozno sa to da najst aj v archive ze kto to povedal prvy, mozno Kosta, ja som to urcite nebol) pre SPI-ISP programovadlo. To je ten typicky priklad, ktory je obvykle doporucovany so slovami "mne to chodi". A to je aj nadherna ukazka toho, ako okolie vplyva na taky "nezrelo neuvazeny" bastel - je spusta variant paralelneho portu, ktory nikdy nebol poriadne standardizovany resp. aj ked bol, tak to vyrobcovia bohorovno ignorovali; a problem s tym mali aj seriozni vyrobcovia so sofistikovanym pripojenim dokonale nepodobnym hrdzavemu klincu - opytaj sa Elnecakov, aka ulava to bola ked presli na USB. Plus je este spusta kombinacii napajani targetu a LPT a hrdzaveho klinca, rozne problemy s vyrovnavacimi prudmi, problemy s presluchmi na kabloch vsetkeho druhu. Ale nepochybuj, ze drvivej vacsine uzivatelov "to chodilo". No a tragedia je, ze "to nechodi" obvykle prave tym, ktori nemaju skusenosti ani vybavenie "to rozchodit".

No a teraz si toto vsetko preloz do softUARTu a C. Hrdzavy klinec v tomto pripade je ten "odladeny priklad", ktory tomu nadsencovi z avrfreaks "chodil"; C su tie kadejake paralelne porty. "Zrela uvaha" je, ze si pozriem vysledok prekladu, urobim na nom nejaku staticku analyzu (po slovensky: zratam cykly), detto pre urcenie latencie vo vsetkych ostatnych preruseniach, urobim o tom patricne poznamky v zdrojakoch na dotknutych miestach a aj vsade kde sa len da, toto zopakujem pri zasadnejsich zmenach v preklade, napr. ked sa vyhradia nejake registre (co sa v avr-gcc da), alebo ked sa meni verzia prekladaca, a samozrejme ked sa cokolvek zmeni na tych kritickych miestach, alebo ak sa cely softUART prenesie do nejakeho ineho projektu. "Zrela uvaha" moze zahrnut aj trebars automaticky vykonavanu staticku analyzu kritickych miest, ak na to existuju nastroje (nepoznam). Alebo "zrela uvaha" moze znamenat aj skumanie zdrojakov gcc, aby sa zistilo, co vsetko sa za akych okolnosti moze zmenit - toto je kvoli softUARTu nemyslitelne, ale moze to byt naopak, ze ten gcc skumas z inych dovodov a tuto znalost zahrnies do "zrelej uvahy". A, samozrejme, "zrela uvaha" zahrnie aj odhad vplyvu znizenia celkoveho vykonu na samotnu aplikaciu. A pochopitelne "zrela uvaha" zahrna aj uvahu o tom, co sa stane v pripade ze nieco nedopadne dobre, napr. ak sa vyvola falosny start vplyvom rusenia.
Vies, ak si s takymto niecim davas namahu, IMHO to napisanie v asembleri nie je ziadny vacsi problem (tak isto ako nie je ziadny zasadnejsi problem si nejake slusne programovadlo na ten SPI-ISP zadovazit). Napokon nejde o ziadny zazrak, staci zobrat vysledok nejakeho vzoroveho prekladu, a ak to vyhovujuce, tak to "zafixovat" v asembleri. Ale zas a znova pripominam, ze nejde len o samotne prerusenia priamo suvisiace so softUARTom. 

> Toto sa mi nezda.. Co si chcel povedat Tvojim prikladom o
> 10% vacsom kode na novsej verzii? Neviem ako u vas, ale u nas ked sa
> doraba do niecoho starsieho, pouzije sa kompilator, na ktorom bola
> povodna verzia kompilovana. 

No a co myslis, preco kolega pouzival v tom case 3.volaco, ktora bola vtedy zo tri roky stara? A myslis si, ze by a vobec s nejakou 4.volaco bol papral co i len minutu, keby na to nemal dovod? Mimochodom mam pocit, ze stale pouziva tu 3.volaco, pretoze s tou 4.volaco mal aj ine problemy, nielen tu velkost. Ved nas uz nepokladajte za dementov zato, ze verejne opisujem problemy, ktore ma kazdy (samozrejme okrem tych z nas, ktori su vo vsetkom dokonali), akurat o nich nikto iny bezne nehovori.

Chcel som tym povedat to, ze ano, aj na tomto zalezi. A zalezi na X inych veciach. Ale aj na tomto.

Som sa nejako rozkecal.

wek



Další informace o konferenci Hw-list