Stránka 1 z 3

Cim zacit v C

Napsal: 17 pro 2012, 10:02
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

Napsal: 17 pro 2012, 10:20
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á...

Napsal: 17 pro 2012, 13:01
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).

Napsal: 17 pro 2012, 15:24
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

Napsal: 17 pro 2012, 17:39
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.

Napsal: 17 pro 2012, 17:40
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ší?

Napsal: 17 pro 2012, 17:54
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.

Napsal: 17 pro 2012, 18:00
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

Napsal: 17 pro 2012, 18:40
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.

Napsal: 17 pro 2012, 18:52
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:

Napsal: 18 pro 2012, 00:05
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

Napsal: 18 pro 2012, 00:59
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ů.

Napsal: 18 pro 2012, 07:53
od Andrea
Dovolím si doporučit Učebnice jazyka C od Pavla Herouta.

Napsal: 18 pro 2012, 08:20
od Panda38
mtajovsky tak to je fakt šílenost, podle toho bych se nechtěl učit C 8O

Napsal: 18 pro 2012, 09:11
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.