Česká knížka programování dsPIC v C

Zdravím,

Rozhodl jsem se Vám zde prezentovat svůj skromný úvod do programování dsPICů v C, který byl součástí mé maturitní práce (ke které byla ještě vytvořena vývojová deska, pokud bude zájem, uvolním ji také). Prosím berte tento materiál s rezervou, byl psán v době, kdy jsem začínal s Céčkem (např. kapitolu o pointerech bych dnes nejradši vymazal :slight_smile: ). Je dost možné, že se v ní budou nacházet chyby, proto je prosím ignorujte (je to konečná verze, opravovat ji nebudu, neboť se v programování mikroprocesorů už nějaký ten pátek nepohybuji a ani tehdy jsem nebyl žádný expert). Pokud bude mít někdo zájem v knize pokračovat, rád uvolním zdrojový text.
ucebnice.zip (1.22 MB)

Pekne. Mne osobne tam chyba viac orientacie na veci ktore sa viac tykaju toho PIC, ale to je dane tym ze sa praca zameriavala na C-cko, OK to beriem.
A este mi tam drobatko vadi, ze sa zacina s tym dsPIC30 - tieto dsPIC30 su uz dost zastarane vybehove typy, chcelo by to nieco novsie, trebars dsPIC33, ked uz DSP-cko, alebo nejake PIC24, ak staci “vseobecny” MCU.

Zveřejnění této práce je opravdu skvělý počin. Děkuji IstvanM.

První “kniha”, ze které jsem pochopil, o co v C vůbec jde. O víkendu budu testovat C. :smiley: :open_mouth: :blush:

Honza a C? Není možná! :smiley:

Kousek jsem tedy přečetl (hlavně obsah). Po zjištění, že je to opravdu celé o C, jsem se začal těšit na kapitolu o modifikátorech paměťové třídy s tím, že tam bude vysvětleno ono nepříjemné “volatile”, jehož neznalost působí spoustě (povětšinou začínajících) kolegů velké nepříjemnosti. Bohužel… moje očekávání nebylo naplněno.

Dodám to tedy (jako po několikáté na fóru) i sem, neboť tady by to mohlo mít vyšší efektivitu :slight_smile:

Doplnění modifikátoru “static” (str. 38 ):
Při použití modifikátoru u globální proměnné způsobí, že je proměnná “globální” jen v souboru, ve kterém je deklarována, je tedy “lokální globální”.

Volatile:
Zásadním zůsobem ovlivňuje optimalizace prováděné při překladu kódu. Jeho nepoužití v místě, kde je třeba, může způsobit nefunkčnost programu, která se velmi špatně hledá (do té doby, než se vám to stane, pak už víte, odkud vítr vane).
Mějme například kód:... registr = a; // a není "volatile" a mění se v přerušení delay_ms(500); registr = a; ...
Překladač při provádění optimalizací zjistí, že se dvakrát na stejné místo zapisuje proměnná, která se mezitím nemohla změnit (neví, že v přerušení ano, protože chybí “volatile”). To je přeci zbytečné a první zápis tedy odstraní.
V případě, že očekáváte, že se promenná v přerušení změní a podruhé tam tedy zapíšete novou hodnotu, jste na omylu (“tedy můžete být :slight_smile:” jak říkají v jisté reklamě).
Přidáním “volatile” oznámíte překladačí, že takovou optimalizaci nesmí provést a kód bude pracovat dle očekávání. Z pohledu programátora to zároveň znamená, že taková proměnná se zcela jistě nenachází v registrech a přístup k ní bývá o nějaký ten takt pomalejší. Z toho důvodu by měl být modifikátor používán pouze na to, na co je určen.

Modifikátor “register”:
Moc se nepoužívá, ale zbytečný není. Lokální proměnné se umísťují do registrů, ale pouze do té doby, dokud je jich dostatek volných. Vzhledem k tomu, že registrů bývá malé množství (např. 16), lze při větším počtu proměnných modifikátorem upřednostnit umístění některých právě v registrech a zvýšit výkon výpočtu.

Sem tam se najde nějaký ten detail, ale jinak celkově skvělá práce a vhodná i pro nepicaře, protože princip je obdobný přes různé architektury :wink:. Musím pochválit i popis “chytáků” (třeba u maker).
Jako vždy je však nutná alespoň obecná základní znalost práce s mcu.

Honza napisal - První “kniha”, ze které jsem pochopil, o co v C vůbec jde. O víkendu budu testovat C.
Prosim mozes sa pochvalit, ako to testovanie dopadlo? Ma zmysel skusat nieco s C-kom, ak mas spustu rutin v asm. a vies s nimi vytvorit aj zlozitejsi program?

Můžu se pochlubit. :slight_smile:

Dopadlo to hrozně. Nepovedlo se mi přeložit v MPLABu project, tak jsem se po hodině na to vys…

Měl jsem naistalovanej Céčko od mircochipu. Ale rozhodl jsem se, že už C zkoušet nikdy nebudu. Zatím jsem si vystačil s ASM a u toho i zůstanu.

Co je složitější program?

Dakujem za usmernenie. Obcas som tiez mal pokusenie skusit to C- cko, ale asi by to chcelo viac casu a chuti sa do toho pustit. Ale pre obcasne zbastlenie nejakej prkotinky to asi fakt nema zmysel. Som uz pokrocilejsieho veku a obcas sa trochu pohram s asm.

Honza3: To od tebe není vůbec pěkné. Vem si kolik času jsi věnoval ASM, jak dlouho trvalo něž jsi zkompiloval první projekt v ASM. A Cčku dáš hodinu? Neříkám že je to jazyk všemocný a na všechny aplikace vhodný, ale podle mě je to stejné jako v životě, “Kolik jazyků umíš, tolikrát jsi člověkem” pak si sám můžeš vybrat, jakým jazykem budeš mluvit :slight_smile:

Pre začínajúcich PIC programátorov je to myslím absolutna bomba!!! kiež by som ju mal v čase ked som začínal…