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".

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

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

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?

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.

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

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

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.