Stránka 2 z 3

Napsal: 09 pro 2016, 10:50
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. :)

Napsal: 09 pro 2016, 10:51
od rnbw
Takze nema... Neexistuje pre tieto PICy nahodou aj GCC?

Napsal: 09 pro 2016, 10:55
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.

Napsal: 09 pro 2016, 11:58
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

Napsal: 09 pro 2016, 13:21
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.

Napsal: 09 pro 2016, 15:15
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?

Napsal: 09 pro 2016, 15:21
od Wolfik

Napsal: 09 pro 2016, 18:34
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.

Napsal: 09 pro 2016, 18:44
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.

Napsal: 09 pro 2016, 19:06
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í.

Napsal: 09 pro 2016, 19:55
od lesana87
A jak ten PIC16F628A k tomu řetězci v programové paměti přistupuje?

Napsal: 09 pro 2016, 19:55
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).

Napsal: 09 pro 2016, 20:00
od forbidden
lesana87 píše:A jak ten PIC16F628A k tomu řetězci v programové paměti přistupuje?
Jen pro čtení samozřejmě.

Napsal: 09 pro 2016, 20:01
od lesana87
Ale jak ho z té programové paměti čte?

Napsal: 09 pro 2016, 20:09
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