Programování uC Microchip v C

Jo jasně, chápu. Takže to dělení se běžně používá? Mě šlo o to, abych to nedělal zbytečně složitě, protože se teprve učím.
Teď právě laboruju s čidlem 18b20, tak sem hledal, jak nejlíp ukázat tu hodnotu na displeji.

Určitě ovšem máš možnost si číslo převést na string - překladač jistě zná nějakou verzi itoa().

No prave bojujem s prekladacom CCSC ccsinfo.com/downloads.php nejako mi nejde spojit hlavny subor c s dalsim ktory sa sklada z *.h a *.c, proste v diasembleri to nevidim navyse velkost prelozeneho kodu je nejaka velka na to ze tam nieje t dalsia cast. Prekladac mam implementovany v MPLAB

Prosim ak niekto ma urobeny nejaky program v tomto prekladaci a prostredi.
Ci by mi neposkytol na nahliadnutie ako to ma vyzerať hlavne sa to musi skadat aspon s dvoch suborov *.C. dakujem

cau, tet sem to zmastil … snad ti to pude spustit
test.rar (21.2 KB)

Cestou ti nieco vypadlo… zatial som to nechal tak a nahadzal vsetko do jedneho C cka prehlad minimalny … Nejak mi ten prekladac nesedi.

Potreboval by som poradit ako zapisat text do flash a potom ho vypisat na displej, zatial som prisiel na nieco take nepekne const char cstring[6]={"a1wire"}; a vsak neviem ako sa dostat k tomu co je v flash, wrdata=*cstring nefunguje v inom prekladaci pekne funguje nieco take [code]lcd_string(“1wire”);

void lcd_string(char *text)
{
char c;
while ( (c = *text++) ) wrdata©;
}[/code]

aktualizoval sem prilohu…

hm dik za inspiraciu, nema mat kazde Ccko svoj hlavickovy subor ? … vzdavam to … je velmi tvrdohlavy…

To není dobrý příklad… Takto projekt z více souborů rozhodně vypadat nemá.

Ve čtvrtém postu je příklad. Sice pro AVR, ale to jistě snadno upravíš.
viewtopic.php?t=2055&postdays=0&postorder=asc&start=0

Ten překladač nemám, ale kdyby jsi vložil svůj projekt, mohl bych se alespoň podívat, jesli je správně sestaven.

Co se týká nadměrné velikosti kódu, v GCC to bývají vypnuté optimalizace nebo “dead code removal” (záležitost nejen překladače, ale i linkeru). Třeba tam taky takové možnosti máte.

to byla jen ukazka ze to de , CCS neni tvrdohlavy , jen musis vedet jak na nej…

kdyz tam budu mit 10 .C a 10.H a z kazdyho budu neco potrebovat tak se z toho picnu … , ?

Pokud bys z každýho něco potřeboval vkládat, tak to máš špatně sestavený a dřív či později narazíš na problém. Jediný co můžeš v .c souboru potřebovat je jiný .h. Žádné vkládání .c souborů ani výkonný kód v .h nepřipadá v úvahu. Před sebou mám program sestavený z mých 31 souborů (moduly od výrobce mcu nepočítám, to by přidalo dalších 30) a není v tom žádný problém ani zmatek. To by se ale v žádném případě nedalo říct, kdyby byl projekt sestaven blbě. Pravděpodobnost, že by fungoval, by nebyla velká.

V souborech .h je pouze popis toho, co umí soubor .c. Soubor .c se smí v projektu nacházet POUZE 1x (vložení pomocí include vytváří jeho kopie), jinak si připravuješ velice těžko odhalitelné chyby v podobě překrytí proměnných, jejich viditelnosti a podobně.

Když tedy máš např. soubor uart.c, k němu patří soubor uart.h. Do .c poté, co ho vytvoříš, už nijak nevrtáš a taky by z něho nemělo být přímo nic vidět pro ostatní soubory. Vše, co uart.c poskytuje k dispozici musí být popsáno v uart.h.
Ten si poté když je potřeba vložíš do main.c a tomu to stačí. Nepotřebuje vědět, jak funkce pracuje, potřebuje znát pouze její parametry, návratovou hodnotu a jmého. O to, aby to vše nakonec fungovalo se postará linker. A právě linkeru můžeš vytvořit problém vkládáním .c souborů s kódem místo .h obsahujících pouze popis.

ZAsielam ten zazrak dost veci tam je odkomentovanych kedze musim prejst s HItec prekladasca na CCS. pripomienky uvitam… a pytat odomna definovanie DEVICE tak ze mi to neprelozi.
mc.rar (32.2 KB)

budes si to muset asi trochu jeste poopravit, moc sem to nestudoval ale kdyz mas pin nadefinovanej jako vstup tak … while(input(sdain)); v pripade vystupu bez LATx netusim

ten eror s DEVICE je kdyz mas vic *.C v Source Files…

me ten projekt od tebe nesel otevrit tak sem zalozil novej
1wire_PIC.rar (36.1 KB)

Soubory *.h nemají ochranu proti vícenásobnému vložení (doplněno).

Makra se píšou velkými písmeny (jinak je to nepřehledné).
Parametrická makra musejí být důsledně závorkována.

Neuškodilo by si zvyknout na jeden formátovací styl a ten dodržovat, tohle je celkem chaos.
Nic nevracející funkce (void) nemusí mít “return”, lze ho však použít např. pro předčasné ukončení fce.

Jsou-li některé definice globální (potřeb ve více souborech), je vhodné si je dát do samostatného .h souboru a dle potřeby ho vkládat (každý .h nemusí mít svůj .c).

V souborech se podívej po po textech “todo” - jsou tam nějaké komentáře a návrhy.
Soubor ddd.h není nikde použit (ani použití zakomentováno). Každopádně je v něm výkonný kód - ten tam nemá co dělat.
Soubor převeden na .c a vytvořen .h. Tento programový modul sám o sobě však nemá smysl - nepůjde přeložit, patrně byl součástí jiného souboru (využívá definice z 1wire_PIC.c - spouštěcího souboru).

Některé soubory mají globální proměnné definované v .h souborech. Zcela špatně. Když už musí být proměnná globální a viditelná ve všech souborech (rozhodně nedoporučuji), deklaruje se v patřičném .c a do .h souboru se vloží s prefixem “extern” (nevytvoří novou proměnnou v každém souboru, pouze jim řekne, že už někde je a linker si ji najde).

Tento rozoraný projekt nejspíš přeložit nepůjde. Možná by bylo vhodnější sem dát na inspekci něco jednoduššího a podle toho pak upravovat ten větší projekt (nemám nainstalováno vaše IDE a překladač abych to uvedl do přeložitelného stavu).
1wire_PIC.zip (10.4 KB)

Ok dakujem zatial, zajtra sa do toho pustim a zavesim tu nieco snad prelozitelne.

to co tet upravil piityy mas dany v projektu a jde to prelozit , priloha v prispevku 28 září 2012, 16:32

akorad je tam 27 hlaseni…

Uz som to nejako urobil aby to chodilo. Kontrolne otazky, ked chccem pridat nejake podprogramy ktore su v inom C subore, musim v hlavnom C nalinkovat H aj C, doteraz som bol v tom ze staci H, je pravda ze som maval C v zlozke source C.
CCS neumoznuje vypisovanie textu priamo z ROM ? ale musim zvlast kopirovat do ram pripadne ukladat priamo v ram ?.
By ma zaujimala nejaka vyhoda oproti Htech kompileru lebo zatial vidim same minus, vsetko sa robi komplikovane.

Vždy se vkládá pouze .h soubor. V něm jsou (musí být) všechna potřebná data pro použití veřejných funkcí vytvořených v .c.

Tak potom v h cku musi byt include jeho cecka?

Nemusí, ani “nesmí”. Překladač ví, že .h a .c se stejným jménem patří k sobě. Naopak .h soubor se vkládá do svého .c pokud je potřeba (bývají tam různé definice, které .c soubor potřebuje).

Tak to vysvetlite prekladacu ze to tak ma byt, v Hlavnom*.C musim mat #include “lcd.c” inak to nechodi… v lcd.C zasa #include “lcd.h”, a je aj ina moznost v hlavnom*.C mat lcd.h aj lcd.c