zhresil som...

Jan Waclawek konfera na efton.sk
Sobota Září 12 00:21:17 CEST 2015


Nie zle na uvod... ;-)

Namety na dalsiu samostatnu pracu:

Pochopitelne cele to arduino treba co najskor poslat do p. Urcite sa aj pre
mac najde normalny editor, binarna distribucia balika avr-gcc/binutils,
make a spol., a avrdude. Jasne, ze to nie je priorita c.1, ale ta sloboda
stoji za to, aj kebyze to pride az v kroku 2 ci 3. Vacsina z toho niekde v
tom arduinovom bordeli je, ale asi by bolo lepsie nainstalovat si to
samostatne v aktualnych verziach. Ta binarka avr-gcc bude asi najvacsi
oriesok. Ak hodis dotaz na mikrozone.sk, mozno si ho tam niekto (menovite
nick brano) vsimne a poradi.

Casovac si prehod na CTC mod, kde ho netreba reloadovat v preruseni. Je to
malickost, ale potesi.

V preruseni od casovaca len odpal prvy prenos SPI a povol prerusenie od
SPI; ostatne ries potom v preruseni od SPI. Dovod je ten, ze takto sa
zbytocne zasier^H^H^Htavujes v tom timerovom preruseni a minas cas, ktory
Ti potom moze chybat ked budes pisat tu komunikaciu, bo v AVRku nie su
prerusenia prerusitelne (teda prekladac to vie zariadit ale to nie je
dobre tak robit ak na to nemas nejaky velmi dobry dovod). V poslednom
preruseni od SPI potom hodis ten latch. Som presvedceny, ze toto tiez
zvladnes lavou zadnou.

Ak je vsetka praca urobena v preruseniach, v hlavnej slucke sa tradicne
zaspava; aj ked ten displej bude zrat ako diva svina a znizenie spotreby
mcu je irelevantne, je dobre sa naucit to robit bo doba si vyzaduje setrit
energiou (aj ked, uplne uprimne, ja osobne som to este v ziadnom programe
neurobil... ;-) ).

Okamzite zabudni na char a na int a uz vobec nepouzivaj nejaky byte a
String a podobne bazmegy. Nauc sa pouzivat char vyhradne pre ascii znaky a
retazce (const char line0[] = "abcdefghijklmnop"; ), a
uint8_t/uint16_t/uint32_t pre prirodzene cisla (intN_t pre cele, ale so
znamienkovymi opatrne). Slusnost kaze na zaciatok #include <stdint.h> v
ktorom su definovane, aj ked toto je v takmer kazdom headeri takze sa to
nepriamo #includne aj tak; slusnost je ale slusnost.

Ano, sucasny avr-gcc vie optimalizovat jednobitove zmeny v perifernych
registroch (t.j. typu PORTB |= 1 << PB4; ci DDRD &= ~(1 << PD1); apod.) na
cbi/sbi kde sa to da; verzie pred 4.0 to nevedeli, boli na to makra, ale
to Ta nemusi zaujimat, to je len taka historicka poznamka.

Zapis DDRD = B11111110 nepoznam resp. nerozumiem, ako je mozne ze sa to
prelozi ak len nejaky magor neurobil header v ktorom je #define pre
vsetkych 256 8-bitovych konstant (u arduina by ma to neprekvapilo, je to
dostatocne idiotsky napad na to aby to tam bolo); v GCC je na binarne
konstanty implementovany nestandardny prefix
https://gcc.gnu.org/onlinedocs/gcc/Binary-constants.html#Binary-constants
takze by sa to malo zapisovat DDRD = 0b11111110 (a ak chces, aby to bolo
prenositelne na iny prekladac, co asi nechces, tak to radsej zapises
hexadecimalne - programator v hexa "vidi" binar, naopak nie, takze ten
binar je castokrat vnimany ako menej citatelny).

Po case by si sa mal naucit dat konstantne data do FLASH, bo RAM je vzacna.
Na to su historicky dva sposoby - s avr-gcc pred 4.7 treba pouzit metodiku
suvisiacu s PROGMEM (vid
http://www.nongnu.org/avr-libc/user-manual/pgmspace.html ), v novsom
existuje tzv. named address space __flash
https://gcc.gnu.org/onlinedocs/gcc/Named-Address-Spaces.html . V pripade
zaujmu dodam podrobnosti.

Ak ches byt zasypany informaciami, tak:
http://www.avrfreaks.net/forum/newbie-start-here
http://www.avrfreaks.net/forums/tutorials (na starom avrfreaks bolo
poltucta najdolezitejsich z nich vo forme pdf, ale to teraz neviem najst,
mozno to uz definitivne zhltol "upgrade" redakcneho systemu avrfreaks (co
je mimochodom varovanie k aktualnej kauze mcu))
http://www.nongnu.org/avr-libc/user-manual/FAQ.html
No a pochopitelne manual ku gcc ako takemu, ale to je pokrocile citanie...

Hej tie shift/latch/current-source (nebodaj este aj mux) budice su ozaj
luxus, pred tymi X rokmi sme najprv snivali (a skladali zo
74/ULN/odporov), potom sme ich kupovali snad rovno od Toshiby lebo nikto
iny este vtedy take nerobil - raz Ti to porozpravam, cely ten pribeh s
displejmi je story za vsetky drobne, ale je niekolko rokov dlhy... :-)

wek






Další informace o konferenci Hw-list