Programování PICů v C (XC8)

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

Moderátor: Moderátoři

Zpráva
Autor
Uživatelský avatar
forbidden
Příspěvky: 8808
Registrován: 14 úno 2005, 01:00
Bydliště: Brno (JN89GF)
Kontaktovat uživatele:

#16 Příspěvek od forbidden »

To nevím, ale píšou tam, že když si budu platit Pro verzi, tak budu mít až o 60 % menší kód. :)

Uživatelský avatar
rnbw
Příspěvky: 32312
Registrován: 21 bře 2006, 01:00
Bydliště: Bratislava

#17 Příspěvek od rnbw »

Takze nema... Neexistuje pre tieto PICy nahodou aj GCC?

Uživatelský avatar
forbidden
Příspěvky: 8808
Registrován: 14 úno 2005, 01:00
Bydliště: Brno (JN89GF)
Kontaktovat uživatele:

#18 Příspěvek od forbidden »

To nevím, já dělal vždy v tom MPLABu, akorát jsem do toho doinstaloval ten XC8 překladač, abych mohl dělat i v Cčku.

Wolfik
Příspěvky: 1076
Registrován: 28 črc 2009, 02:00

#19 Příspěvek od Wolfik »

musíš si zprovoznit vývojové prostředí s nějakým GNU GCC překladačem.

A taky doporučuju pořádně se naučit Céčko srkz na skrz na PC. A také pojmy jako je linker, make, makefile, křížová kompilace...Začínat s Cčkem na mcu bez předchozích zkušenosti na PC je dost na prd

Uživatelský avatar
forbidden
Příspěvky: 8808
Registrován: 14 úno 2005, 01:00
Bydliště: Brno (JN89GF)
Kontaktovat uživatele:

#20 Příspěvek od forbidden »

Tak asi před dvěma lety jsem trošku začal s C++ na PC, ale potřeboval jsem jen udělat jednu konzolovou aplikaci na komunikaci s COM portem. Pak už jsem na to zas nešáhl. Nemám ambice v tom být dobrej, jen umět alespoň základy a případně se doučovat, co bude třeba, za pochodu.
GCC je nějakej free překladač? MPLAB se mi líbí, že je celkem komfortní a provázanej a vše tak nějak funguje. Akorát je to děsnej moloch, je to v javě a žere 1,3 GB RAMky. 8O

Asi jsem našel GCC fo PIC, ale je ve fázi plánování. Moc se mi nechce začínat s něčím novým, nevyzkoušeným a místo hledání chyb v programu hledat chyby v překladači.

Wolfik
Příspěvky: 1076
Registrován: 28 črc 2009, 02:00

#21 Příspěvek od Wolfik »

koukám, že s těma open source toolchainama pro Microchip to je pěkne naprd...
jediný, co mi něco říká je SDCC (ve vedlejším vláknu myslím nějaká uživatelka portila Linux na Z80)
tady jsou nějaký příklady
https://github.com/diegoherranz/sdcc-examples

Ale je to stále v testovací fázi, takže určitě nic pro tebe :D

Jinak jak už jsem psal. Ty sice začínáš na "nejjednodušších" mikrokontrolérech, ale zároveň mrtě zastaralých. Na tvým místě bych se koukl po modernějších PIC8, AVR8, STM8 či NXP8 mcučkách, kde máš volně dostupný neomezený toolchain. Ten MPLAB je free, ale je to pomalá za*raná Java se zadrátovanými toolchainy v sobě.

Ještě k těm konstantám jenom ve Flashce...seš si tak jistej, že to kompiler dělá? Přečetl sis obsah datové paměti po spuštění programu?

Wolfik
Příspěvky: 1076
Registrován: 28 črc 2009, 02:00

#22 Příspěvek od Wolfik »


Uživatelský avatar
forbidden
Příspěvky: 8808
Registrován: 14 úno 2005, 01:00
Bydliště: Brno (JN89GF)
Kontaktovat uživatele:

#23 Příspěvek od forbidden »

Když napíšu const int x=5; tak bude uložená jen v programové paměti. Mám to vyzkoušený tak, že se po kompilaci ani nehne velikost zabrané datové paměti.

Uživatelský avatar
mtajovsky
Příspěvky: 3694
Registrován: 19 zář 2007, 02:00
Bydliště: Praha

#24 Příspěvek od mtajovsky »

forbidden píše:GCC je nějakej free překladač?
:) ano je to free, protože GCC znamená GNU Compiler Collection. Je šířen pod licencí GNU GPL a tudíž free, protože GNU's Not Unix.

Je to asi jeden z nejznámějších překladačů vůbec, zahrnuje velké množství platforem od MCU až po velké stroje od Sun a HP. Na platformách s Linux asi nejpoužívanější kompilátor. PICy neznám a tak mě trochu zaráží, že nejsou v jeho portfoliu. V každém případě, pro platformu Atmel, STM8, STM32 je k dispozici. A taky pro všechny dnes užívané Intely a AMD.
forbidden píše:Když napíšu const int x=5; tak bude uložená jen v programové paměti. Mám to vyzkoušený tak, že se po kompilaci ani nehne velikost zabrané datové paměti.
Protože je to definováno jako konstanta. Ovšem:

char* hello = "Hello";

bude ležet jak v kódové paměti tak v RAM, kam se dostane pomocí start-up kódu.

Uživatelský avatar
forbidden
Příspěvky: 8808
Registrován: 14 úno 2005, 01:00
Bydliště: Brno (JN89GF)
Kontaktovat uživatele:

#25 Příspěvek od forbidden »

To právě nebude.
char *hello="hello"; - pouze paměť programu
char hello2 []="hello"; - pameť programu i dat

Mám to ověřený tou kompilací, po přidání prvního se velikost obsazené paměti dat nezmění.

Uživatelský avatar
lesana87
Příspěvky: 3296
Registrován: 20 zář 2014, 02:00

#26 Příspěvek od lesana87 »

A jak ten PIC16F628A k tomu řetězci v programové paměti přistupuje?

Uživatelský avatar
mtajovsky
Příspěvky: 3694
Registrován: 19 zář 2007, 02:00
Bydliště: Praha

#27 Příspěvek od mtajovsky »

Tak to musí mít XC8 nějakou vychytávku. Protože přístup na data v programové paměti jsou jiné instrukce, než přístup na data v RAM. Potom čtení takového řetězce by se muselo překládat jinak. Například

char* hello1 = "Hello";
char hello2[6] = "Hello";

bude u AVR pořád v RAM. Pokud chceme dostat data do kódové paměti, použije se pro gcc syntaxe:

char hello2[6] PROGMEM = "Hello";

a přístup je taky jiný:
pro RAM: char treti_znak = hello[3];

pro FLASH: char treti_znak = pgm_read_byte(hello + 3); což se přeloží na instrukci LPM (load program memory).

Uživatelský avatar
forbidden
Příspěvky: 8808
Registrován: 14 úno 2005, 01:00
Bydliště: Brno (JN89GF)
Kontaktovat uživatele:

#28 Příspěvek od forbidden »

lesana87 píše:A jak ten PIC16F628A k tomu řetězci v programové paměti přistupuje?
Jen pro čtení samozřejmě.

Uživatelský avatar
lesana87
Příspěvky: 3296
Registrován: 20 zář 2014, 02:00

#29 Příspěvek od lesana87 »

Ale jak ho z té programové paměti čte?

Uživatelský avatar
forbidden
Příspěvky: 8808
Registrován: 14 úno 2005, 01:00
Bydliště: Brno (JN89GF)
Kontaktovat uživatele:

#30 Příspěvek od forbidden »

To přesně nevím, nicméně já se v programu k té proměnné hello chovám stejně jak k hello2. Respektive já to zatím jen vypisoval na display pomocí printf (hello);
Hele, zatím s tím vším mám asi týden zkušeností, tak můžu být místy mimo. :D

Odpovědět

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