Cim zacit v C

Diskuze a poradna o programátorech a programování různých obvodů

Moderátor: Moderátoři

Zpráva
Autor
Uživatelský avatar
Celeron
Příspěvky: 20511
Registrován: 02 dub 2011, 00:00
Bydliště: Nový Bydžov

Cim zacit v C

#1 Příspěvek od Celeron »

Vazeni, co programujete v C, poradte jak nejlip zacit aby byl efekt u stredne tupyho cloveka co "nejkvalitnejsi a nejrychlejsi". :lol: Konkretne podle ceho se naucit a jakej compilator pouzit. Naky knizky tu mam co kdysi v DOS edici vydala Tesla, neco jsem stahnul, ale je to moc pokrocily. Taky nevim ktery C a od koho a jaky jsou mezi nima rozdily. Mam to jen na hrani a tak neco free.
Jde mi o praci na Woknech, pripadne na 8051 rade a Z80 by taky nebyla k zahozeni.
Diky
Jirka
Uživatelský avatar
forbidden
Příspěvky: 9442
Registrován: 14 úno 2005, 00:00
Bydliště: Brno (JN89GF)
Kontaktovat uživatele:

#2 Příspěvek od forbidden »

Nedávno jsem to taky řešil, nakonec jsem si nainstaloval MS Visual C++ 2010 Express, projel tento seriál a dále čerpám info hlavně z MSDN a http://www.cplusplus.com/. To vývojový prostředí sice nevyužívám ani z 10%, protože to má mraky funkcí, kterým vůbec nerozumím, ale základy se v tom dají dělat dobře a stačí se naučit jen pár funkcí.
Na práci s MCU se chystám výhledově, s osmibitama je stejně lepší používat ASM kvůli efektivnímu využití prostředků. Jestli se někdy vrhnu na nějaký výkonnější, kde už nebudu muset řešit málo paměti a výkon, tak možná...
Uživatelský avatar
Panda38
Příspěvky: 725
Registrován: 21 lis 2012, 00:00
Bydliště: Most, Praha, Lanžhot
Kontaktovat uživatele:

#3 Příspěvek od Panda38 »

Ve Woknech je MS Studio rozumná volba, ale doporučoval bych začínat raději konzolovými aplikacemi v C (lze volit v project Wizardu) než oknové aplikace. Není tam třeba řešit vizuální okenní prvky, stačí řešit jen algoritmizaci a používat snadný výstup na displej (printf). Takové programy jsou na úrovni zdrojáků dobře kompatibilní s jinými systémy (jako Linux), lze najít dostatek tutoriálů.

Z konzolových aplikací se pak snadno přechází i k jednočipům (stačí přidat práci s registry) i k okenním aplikacím.

U jednočipů je sice assembler optimálnější, ale může příliš svazovat. Většinu procesorů je možné bez problémů programovat v C. Překladače (jako gcc) umí už tak dobře optimalizovat, že kód obvykle nebývá o moc větší či pomalejší než čistý assembler. Nezkušené programátory může dokonce předčít (např. optimalizací fronty instrukcí, fígle s používáním násobení místo pomalejšího dělení atd.). Program v C není velký problém přenést např. z AVR na PIC. Proto assembler má opodstatnění jen u velmi malých procesorů, jako jsou ATinny, a jako inline vložky do C kódu pro zefektivnění kritických nebo náročných částí programu. Efektivita práce se s C kódem mnohanásobně zvýší oproti ASM (vím co mluvím, léta jsem byl zatvrzelým zastáncem ASM).
Uživatelský avatar
Davidus
Zablokován
Zablokován
Příspěvky: 2439
Registrován: 01 čer 2005, 00:00

#4 Příspěvek od Davidus »

ASM je vhodný spíš pro jednodušší programy pro MCU, ve chvíli kdy budeš psát něco složitějšího, začne být kód málo srozumitelný, nepřehledný a budou vznikat chyby.
Můžeš použít předpřipravené knihovny v C což značně zrychlí práci
Pokud někdo požaduje rychlejší vypracování nějaké úlohy, není problém zkombinovat asembler a C, případně LJSA
pro začátek doporučím knížku Programovací jazyk C pro zelenáče
Petr Šalamoun. Po jejím nastudování a nastudování manuálu ke kompileru by neměl být žádný problém.

schválně, kdo by si troufl napsat pro 8bit MCU v asembleru funkci POW( ) pro 2 32bitové floaty? Já ne 8O
Andrea
Příspěvky: 9340
Registrován: 07 zář 2007, 00:00

#5 Příspěvek od Andrea »

Davidus píše:schválně, kdo by si troufl napsat pro 8bit MCU v asembleru funkci POW( ) pro 2 32bitové floaty? Já ne 8O

A kdo potřebuje používat na 8-bitu 32-bit floaty? Nějakej pojídač koláčků neschopnej si vystačit s integerem.
Andrea
Příspěvky: 9340
Registrován: 07 zář 2007, 00:00

#6 Příspěvek od Andrea »

Panda38 píše:U jednočipů je sice assembler optimálnější, ale může příliš svazovat.

Assembler svazovat? 8O A co to je optimálnější, to jako lepší než nejlepší?
Uživatelský avatar
Panda38
Příspěvky: 725
Registrován: 21 lis 2012, 00:00
Bydliště: Most, Praha, Lanžhot
Kontaktovat uživatele:

#7 Příspěvek od Panda38 »

Chytáš za slovíčkaření. :-) Jo, svazovat, protože když člověk po několika dnech práce na asm funkci zjistí, že potřebuje např. změnit pořadí částí kódu a znamená to úplnou reorganizaci předávání dat mezi registry, to je pak na zabití. Je hezké napsat dobře optimalizovanou funkci v assembleru. Jenomže jakékoliv pozdější úpravy a předělávky jsou dost složité, protože to znamená podrobné procházení a promýšlení kódu. Překladači nedělá problém efektivně využívat registry vícenásobně v různých částech. Člověk si to musí udržovat přehledné a kvůli tomu pak kód může být někdy i méně efektivní než od překladače. Proto je dobrá metoda psát program sice v C, ale současně sledovat listing v assembleru. Když je některá část přeložena neefektivně, tak často stačí jen upravit jinak zdroják, aby se to překladači jinak předhodilo, a když ne, tak až pak teprve přepsat příslušnou část do assembleru. Ale současně si nechat na přepínač i C zdroják - dobře se pak ověřuje funkčnost kontrolou zda to funguje stejně. Překladač obvykle nedělá chyby jako člověk.
Andrea
Příspěvky: 9340
Registrován: 07 zář 2007, 00:00

#8 Příspěvek od Andrea »

Panda38 píše:Proto je dobrá metoda psát program sice v C, ale současně sledovat listing v assembleru.

No to musí být opravdu velmi velmi efektivní, třeba zkoumat ten kód pro POW() pro 32-bit floaty, jestli to překladač přeložil nejoptimálněji. :D :D :D
Uživatelský avatar
Panda38
Příspěvky: 725
Registrován: 21 lis 2012, 00:00
Bydliště: Most, Praha, Lanžhot
Kontaktovat uživatele:

#9 Příspěvek od Panda38 »

Celeron píše:...Jde mi o praci na Woknech, pripadne na 8051 rade...
Jo a, řada 8051, na to je dobré použít Keil (Cx51 překladač s integrovaným prostředím). Free verze je sice omezená do velikosti kódu, ale dá se s tím celkem dobře vystačit (a v nejhorším je možné binárně skládat více modulů). Pozor ale, že některé starší typy Atmelů x51 nepodporují sériové programování SPI.
Uživatelský avatar
Davidus
Zablokován
Zablokován
Příspěvky: 2439
Registrován: 01 čer 2005, 00:00

#10 Příspěvek od Davidus »

Andrea zkus třeba vypočítat hodnoty kmitočtů pro logaritmické rozmítání.
kmitočtový rozsah f0....f1 s tím, že oba kmitočty můžou ležet v rozsahu 1Hz - 20MHz rozlišení kmitočtu 24 bitů, celkový počet bodů pro rozmítání je 1001
proložení kvadratickou křivkou tady nefunguje :cry:
Uživatelský avatar
Celeron
Příspěvky: 20511
Registrován: 02 dub 2011, 00:00
Bydliště: Nový Bydžov

#11 Příspěvek od Celeron »

Tak jsem stahnul Dev-C++ a rozhejbal ho. Asi chodi, "Ahoj svete" me po prvnim prekladu napsal. :) Zacal jsem prochazet lekce, co jsem dal odkaz Forbidden. Jsem u dvojky a vidim to u sebe dost tragicky :(
Ach jo...
Jirka
Uživatelský avatar
mtajovsky
Příspěvky: 3728
Registrován: 19 zář 2007, 00:00
Bydliště: Praha

#12 Příspěvek od mtajovsky »

Tak jsem se díval na ten seriál. Nejsem si jist, že je pro začátečníka v C nejlepší, specielně pro někoho, kdo bude C používat na mikrech. První heloworldový program z toho seriálu v 1. lekci používá streamy a přetížený operátor, a kdo nezná C a nota bene C++ bude asi zmaten a znechucen.

Na čtenáře se hned v 1. lekci navalí hromada pokročilých věcí - namespaces, streamy, manipulátory, které pro porozumění už samy chtějí znalost C i C++. Aby autor seriálu vůbec něco vysvětlil, uchyluje se k brutálním zjednodušením, až, řekl bych ke zkreslením ve stylu

"<< je vkládací operátor do cout"

nebo

"musíte na konec souboru připsat cin.get();"

Řekl bych, že čtenář, začátečník, vůbec neví _vo_co_go_ a co a proč vlastně dělá. Možná jsem příliš konzervativní, ale tohle je příšernost. Doporučil bych klasiku, která vyšla i v češtině a po zvládnutí C pokračovat v případě potřeby s C++.

I na netu je mnoho stravitelnějších seriálů.
Andrea
Příspěvky: 9340
Registrován: 07 zář 2007, 00:00

#13 Příspěvek od Andrea »

Dovolím si doporučit Učebnice jazyka C od Pavla Herouta.
Uživatelský avatar
Panda38
Příspěvky: 725
Registrován: 21 lis 2012, 00:00
Bydliště: Most, Praha, Lanžhot
Kontaktovat uživatele:

#14 Příspěvek od Panda38 »

mtajovsky tak to je fakt šílenost, podle toho bych se nechtěl učit C 8O
Uživatelský avatar
rnbw
Příspěvky: 37418
Registrován: 21 bře 2006, 00:00
Bydliště: Bratislava

#15 Příspěvek od rnbw »

Treba si uvedomit, ze C a C++ su dva rozne jazyky a nespajat ich dokopy. Ze sa mnoho programov v C da skompilovat kompilatorom C++ na tom nic nemeni.
Odpovědět

Zpět na „Programování PIC, ATMEL, EEPROM a dalších obvodů“