pomoc eagle

Miroslav Šteiger SteigerM
Středa Březen 17 14:28:20 CET 2004


>//Ale ano, jenze nekde je treba zacit. Skuste doporucit jinou
>//literaturu. Jinak jsem mel pocit, ze clovek s kterym jsem
>//komunikoval nema absolutne zadnou predstavu. Naopak mam obavu z
>//toho zlehcovani. SDCC zacalo podobne, taky ho zacal psat clovek s
>//mlhavymi predstavami a nedostatecnymi znalostmi. Tak proc se nepoucit.
>
>Ja prece nic nezlehcuji, mozna to tak jen vypada.
>Problemy vsak ale vidim nekde uplne jinde.
>Ne jen ty strasidelne neexistujici instrukce.

Nejde o nejake "strasidelne neexistujici instrukce". Jde o neco uplne
jineho. Pokusim se to co nejjednoduseji vysvetlit.

Jazyk C je zalozen na STACKu. Predavani parametru, vraceni hodnot funkcemi,
alokace lokalnich promennych, etc je provadeno pres STACK. Tot slova
klasika. A obecne nejvetsi problem implementace C pro mikroradice je prave
absence, pripadne maly rozsah STACKu. Ruzne verze C pro mikrokontrolery
tento problem obchazeji ruznymi zpusoby - pres proprietarni stack
implementovany SW, pevne pametove lokace, registry, etc. Tohle vse ma
podstatny vliv na chovani a funkci prekladace C. Vnasi to radu ruznych
omezeni - omezeni v poctu parametru, omezeni v poctu vnoreni volani funkci,
omezeni v reetrantnosti, etc. Tato omezeni jsou prave ty odchylky od ANSI C.

Pokud srovnate Z80 a mikroradice (x51, PIC, AVR) zjistite, ze na Z80 byla
implementace C relativne snadna - ma 16b SP a dalsi indexove registry. Pokud
se zamyslite nad jejich funkci, pochopite tu obrovskou vyhodu. To co lze na
Z80 snadno a rychle udelat prostrednictvim STACKu, se musi na mikroradicich
slozite obchazet temi "rutinami". Pri jednoduchych funkcich (s malym poctem
parametru) to muze byt i vyhoda, pokud je predam pres registry, ale uz pri
volani funkce s parametry z tela funkce jine (tez s parametry) tuto vyhodu
stracim. Nekam totiz musim ulozit docasne promenne a zacina problem - kam. U
Z80 to bylo jednoduche, parametry mohly byt ulozeny na zasobnik. Jak to
resit na mikroradicich a co nejmene omezit vlastni C - to je pak vyssi divci
a opravdu ne jednoducha zalezitost.

Maly priklad:

int fce1(int z){
  return x*x;
}

int fce2(int x, int y, int z){
  ++x;
  return (x + fce1(z) - y);
}

Skuste si to namalovat pri pouziti zasobniku a pri pouziti registru.

Na te Z80 pak mohl byt vysledny kod opravdu rychly a srovnatelny s asm
programem. Na mikroradicich vsak se ta rychlost straci se slozitosti funkce
a s poctem a velikosti parametru. A z Vasich prispevku jsem nabyl dojem, ze
absolutne nechapete co se Vam snazim rict, ze proste o internim chovani a
problemech implementace prekladace C vlastne vubec nic nevite.

Opravdu to neni osobni, jen se snazim Vas donutit k rozsireni Vasich obzoru.

S pozdravem
MK

http://bazar.mcu.cz
http://www.mcu.cz







Další informace o konferenci Hw-list