Jakie środowisko dla uczącego się C 8051



Masz problem? Zapytaj na forum elektroda.pl

Poprzedni Następny
Wiadomość
Spis treści
From: "Filip Gdynia" <filip_po_at_nospam_world.pl>
Subject: Jakie środowisko dla uczącego się C 8051
Date: Sun, 2 Apr 2006 19:49:29 +0200


Witam
Chciałem prosić o radę z wiązku z wyborem środowiska programowania.
Wcześniej pracowałem w Bascomie, ale zniechęca mnie fakt wielkości kodu
który ten program generuje.
Chciałbym przerzucić się na C - zaczynam właśnie uczyć się go na uczelni
więc będzie troche łatwiej.
I tu pytanie co wybrać ? Jaki kompilator lub środowisko.
Wiem, że Keil jest dość popularnym i pewnym narzędziem...
Ale może coś innego...
Właśnie zakupiłem zestaw startowy w BTC oraz podręcznik programowanie 8051
pierwsze kroki więc będę korzystać z układów atmela 89s52/53
pozdr



Poprzedni Następny
Wiadomość
Spis treści
From: "Paweł Cern" <name_at_nospam_surname.pl>
Subject: Re: Jakie środowisko dla uczącego się C 8051
Date: Sun, 2 Apr 2006 20:40:59 +0200



"Filip Gdynia" <filip_po_at_nospam_world.pl> wrote in message
news:a911e$44300eaa$540aef1b$13282_at_nospam_news.chello.pl...
Witam
Chciałem prosić o radę z wiązku z wyborem środowiska programowania.
Wcześniej pracowałem w Bascomie, ale zniechęca mnie fakt wielkości kodu
który ten program generuje.
Chciałbym przerzucić się na C - zaczynam właśnie uczyć się go na uczelni
więc będzie troche łatwiej.

Przede wszystkim chciałbym zaznaczyć że zwykły 8051 ma jakieś 4kB pamięci
kodu, zatem nie dziwię się że w BASIC-u jedyne co się tam zmieści to "Hello
world". Napewno w C będzie lepiej, ale niewiele. Naturalnie możnaby użyć
mocniejszej wersji 8051, z większą pamięcią kodu, jednak warto wiedzieć że
mikrokontroler ten był projektowany dość dawno, kiedy jeszcze nikt nie
myślał o C w takich zastosowaniach. W połączeniu z brakiem potokowego
przetwarzania instrukcji czyni to połączenie 8051 i C bardzo niewydajnym.

Jeśli koniecznie chcesz uczyć się 8051, to proponuję zacząć od assemblera.
Natomiast jeśli chcesz użyć C, polecam użycie mikrokontrolera bardziej
współczesnego, np typu AVR czy ARM. Wprawdzie ARM to projekt lat 80-tych,
ale całkiem udany, kod w języku C bardzo ładnie i optymalnie przekłada się
na instrukcje procesora. Podobnie jest z 8-bitowymi AVR (pomysł Atmela).
Obydwie architektury przetwarzają instrukcje potokowo, co w praktyce oznacza
że efektywność jest bliska 1 MIPS/MHz. W przypadku typowego, niepotokowego
8051 cykl instrukcji wynosi 12 cykli zegara, zatem wydajność może być
conajwyżej równa 1/12 MIPS/MHz.

Paweł



Poprzedni Następny
Wiadomość
Spis treści
From: "Tomek" <tom50_at_nospam_poczta.onet.pl>
Subject: Re: Jakie środowisko dla uczącego się C 8051
Date: Mon, 3 Apr 2006 14:04:30 +0200



Użytkownik "Paweł Cern" <name_at_nospam_surname.pl> napisał w wiadomości
news:d48b$44301ac5$3eb34112$6242_at_nospam_news.chello.pl...

"Filip Gdynia" <filip_po_at_nospam_world.pl> wrote in message
news:a911e$44300eaa$540aef1b$13282_at_nospam_news.chello.pl...
Witam
Chciałem prosić o radę z wiązku z wyborem środowiska programowania.
Wcześniej pracowałem w Bascomie, ale zniechęca mnie fakt wielkości kodu
który ten program generuje.
Chciałbym przerzucić się na C - zaczynam właśnie uczyć się go na uczelni
więc będzie troche łatwiej.

Jeśli koniecznie chcesz uczyć się 8051, to proponuję zacząć od assemblera.
Natomiast jeśli chcesz użyć C, polecam użycie mikrokontrolera bardziej
współczesnego, np typu AVR czy ARM. Wprawdzie ARM to projekt lat 80-tych,
ale całkiem udany, kod w języku C bardzo ładnie i optymalnie przekłada się
na instrukcje procesora. Podobnie jest z 8-bitowymi AVR (pomysł Atmela).
Obydwie architektury przetwarzają instrukcje potokowo, co w praktyce
oznacza że efektywność jest bliska 1 MIPS/MHz. W przypadku typowego,
niepotokowego 8051 cykl instrukcji wynosi 12 cykli zegara, zatem wydajność
może być conajwyżej równa 1/12 MIPS/MHz.

Paweł
Typowa bzdura typu jezeli chcesz sie nauczyć czegokolwiek to tylko Atmela
-|
Jezyk C ma to do siebie ( jak każdy jezyk wysokiego rzedu) że wiekszośc kodu
jest niezależna od sprzetu
Dotyczy to rowniez mikrokontrolerow, chociaż tu bardziej sprzet wałazi do
kodu.
Pisanie w C daje dośc sobodne przenoszenie kodu i jezeli nauczysz sie czegoś
w C dla 8051, to po drobnych modyfikacjach
bedzie dzialalo na AVR czy PIC.
Pytanie byloo takie jak w temacie, a nie czy lepszy jest AVR. Na to pytanie
odpowiem:
chyba najlepszy kompilator dla uC to kompilator C dla 8051 firmy Keil ze
środowiskiem uruchomieniowym uVision. jest drogi, ale jest wersja eval
z paskudnym umieszcaniem kodu od wysokiego adresu, wiec chyba 89C52 nie za
bardzo. Za to jest sporo (czego nie wolno mi polecać)
witaminek ( na wiosne wskazanych) :-))



Poprzedni Następny
Wiadomość
Spis treści
From: "Paweł Cern" <name_at_nospam_surname.pl>
Subject: Re: Jakie środowisko dla uczącego się C 8051
Date: Mon, 3 Apr 2006 14:31:26 +0200



Jeśli koniecznie chcesz uczyć się 8051, to proponuję zacząć od
assemblera. Natomiast jeśli chcesz użyć C, polecam użycie mikrokontrolera
bardziej współczesnego, np typu AVR czy ARM. Wprawdzie ARM to projekt lat
80-tych, ale całkiem udany, kod w języku C bardzo ładnie i optymalnie
przekłada się na instrukcje procesora. Podobnie jest z 8-bitowymi AVR
(pomysł Atmela). Obydwie architektury przetwarzają instrukcje potokowo,
co w praktyce oznacza że efektywność jest bliska 1 MIPS/MHz. W przypadku
typowego, niepotokowego 8051 cykl instrukcji wynosi 12 cykli zegara,
zatem wydajność może być conajwyżej równa 1/12 MIPS/MHz.

Paweł

Typowa bzdura typu jezeli chcesz sie nauczyć czegokolwiek to tylko Atmela
-|

Nie widzę związku, zresztą nigdzie nie napisałem że warto używać "tylko"
Atmela.

Jezyk C ma to do siebie ( jak każdy jezyk wysokiego rzedu) że wiekszośc
kodu jest niezależna od sprzetu
Dotyczy to rowniez mikrokontrolerow, chociaż tu bardziej sprzet wałazi do
kodu.
Pisanie w C daje dośc sobodne przenoszenie kodu i jezeli nauczysz sie
czegoś w C dla 8051, to po drobnych modyfikacjach
bedzie dzialalo na AVR czy PIC.

No nie takich drobnych, wszystkie peryferia są inne. Dodatkowo osobne
przestrzenie kodu i danych powodują że pojęcie wskaźnika jest
niejednoznaczne. Zatem jeśli coś ma być łatwo przenośne to będzie to:

void main()
{
printf("Hello world!\r\n");
}

Mam wrażenie że sugestia jest jednak na miejscu, bo założyciel wątku
wspomniał że jest osobą początkującą. Zatem dobrze jest nauczyć się czegoś
bardziej współczesnego niż 8051. Ja rozumiem że są ludzie wychowani na 8051
i ich świat się na tym kończy. Nie należy ich sugestii typu "Tylko 8051"
brać serio pod uwagę.

Paweł





Poprzedni Następny
Wiadomość
Spis treści
From: "Tomek" <tom50_at_nospam_poczta.onet.pl>
Subject: Re: Jakie środowisko dla uczącego się C 8051
Date: Mon, 3 Apr 2006 14:51:37 +0200




No nie takich drobnych, wszystkie peryferia są inne. Dodatkowo osobne
przestrzenie kodu i danych powodują że pojęcie wskaźnika jest
niejednoznaczne.
Bez obrazy- ile w kodzie (procentowo) jest obsługi peryferii. Nie mówimy o
pracy która trzeba włozyc w poznanie n0wych peryferii,
ale o objetości kodu.....
Ja przenosze sporo kodu na rózne uC i rzeczywiści z peryferiami jest troche
roboty, ale właściwie tylko z nimi.
Pozas tym co rozumiesz przez niejednoznaczne pojecie wskaźnika??? Sa jakies
wskażniki AVR i np wskaźniki ARM? - nie słyszałem

Zatem jeśli coś ma być łatwo przenośne to będzie to:

void main()
{
printf("Hello world!\r\n");
}
Ktoo powiedział ze wszsytko jest łatwo przenośne? Najważniejsze ze jest
przenośne. W asemlerze niczego nie da sie przenieść, w innych niz C językach
wyższego rzędu da sie, ale nie ma kompilatorów - pozostaje C


Mam wrażenie że sugestia jest jednak na miejscu, bo założyciel wątku
wspomniał że jest osobą początkującą. Zatem dobrze jest nauczyć się czegoś
bardziej współczesnego niż 8051. Ja rozumiem że są ludzie wychowani na
8051 i ich świat się na tym kończy. Nie należy ich sugestii typu "Tylko
8051" brać serio pod uwagę.

Paweł
Pewnie racja, ale pytanie było takie a nie inne, a 8051 jakoś nie bardzo sie
poddaje. Jeżeli ktoś jest początkujacy to niech wezmioe cokolwiek byle sie
nie zniechecił, apotem juz jak nie bedzie poczatkujacy to sobie poradzi.



Poprzedni Następny
Wiadomość
Spis treści
From: "Paweł Cern" <name_at_nospam_surname.pl>
Subject: Re: Jakie środowisko dla uczącego się C 8051
Date: Mon, 3 Apr 2006 15:05:49 +0200


Bez obrazy- ile w kodzie (procentowo) jest obsługi peryferii. Nie mówimy
o pracy która trzeba włozyc w poznanie n0wych peryferii,
ale o objetości kodu.....

Z założenia małe mikrokontrolery robią proste rzeczy i spora część kodu to
obsługa peryferiów. Inaczej jest w dużych "mikrokontrolerach" (np. takie ze
sprzętu set-top box czy ze sprzętu teleinformatycznego), tu faktycznie
większość kodu to inteligencja wewnętrzna.

Pozas tym co rozumiesz przez niejednoznaczne pojecie wskaźnika??? Sa
jakies wskażniki AVR i np wskaźniki ARM? - nie słyszałem


Chodzi o to, że ARM ma wspólną przestrzeń kodu i danych. Wskaźnik "char *"
może wskazywać zarówno np. na stałą tekstową w pamięci ROM (w której siedzi
kod) jak i obszar w pamięci RAM (tu zresztą też może być tymczasowy kod i
dane). Kod jest jednakowy i szybki. Natomiast w 8051 nie jest to już takie
proste. Można przypisać sobie wirtualne zakresy adresów które tłumaczy się
na przestrzeń kodu czy danych, ale narzuty kodu są spore.




Poprzedni Następny
Wiadomość
Spis treści
From: "Tomek" <tom50_at_nospam_poczta.onet.pl>
Subject: Re: Jakie środowisko dla uczącego się C 8051
Date: Tue, 4 Apr 2006 08:32:27 +0200



Pozas tym co rozumiesz przez niejednoznaczne pojecie wskaźnika??? Sa
jakies wskażniki AVR i np wskaźniki ARM? - nie słyszałem


Chodzi o to, że ARM ma wspólną przestrzeń kodu i danych. Wskaźnik "char *"
może wskazywać zarówno np. na stałą tekstową w pamięci ROM (w której
siedzi kod) jak i obszar w pamięci RAM (tu zresztą też może być tymczasowy
kod i dane). Kod jest jednakowy i szybki. Natomiast w 8051 nie jest to już
takie proste. Można przypisać sobie wirtualne zakresy adresów które
tłumaczy się na przestrzeń kodu czy danych, ale narzuty kodu są spore.
Dalej nie rozumiem :-( w czym problem - dośc dawno juz nie pisałem w Keilu,
ale z tego co pamietam nie ma żadnego problemu z definiowania wskaźników dla
obszaru kodu lub dla obszaru danych. Procesor ma różne rozkazy adresowania
RAM i ROM i w analizie kodu wynikowego asm nie pamietam żeby operacje z
uzyciem wskaźników generowały jakies puchniecie kodu, a wręcz przeciwnie -
kod był bardzo zwięzły i chetnie uzywałem wskaźników.Ale to było dawno i być
może sie mylę ;-]



Poprzedni Następny
Wiadomość
Spis treści
From: "Paweł Cern" <name_at_nospam_surname.pl>
Subject: Re: Jakie środowisko dla uczącego się C 8051
Date: Tue, 4 Apr 2006 10:39:13 +0200


Dalej nie rozumiem :-( w czym problem - dośc dawno juz nie pisałem w
Keilu, ale z tego co pamietam nie ma żadnego problemu z definiowania
wskaźników dla > obszaru kodu lub dla obszaru danych. Procesor ma różne
rozkazy adresowania RAM i ROM i w analizie kodu wynikowego asm nie
pamietam żeby operacje z uzyciem wskaźników generowały jakies puchniecie
kodu, a wręcz przeciwnie - kod był bardzo zwięzły i chetnie uzywałem
wskaźników.Ale to było dawno i być może sie mylę ;-]

Jeśli kod jest zwięzły to byćmoże deklarowałeś jakiej przestrzeni dany
wskaźnik dotyczy. W takim przypadku jest to niestandartowe rozszerzenie
języka i utrudnia przenoszenie kodu na inne platformy sprzętowe.



Poprzedni Następny
Wiadomość
Spis treści
From: point <rwxrwx_at_nospam_poczta.onet.pl>
Subject: Re: Jakie =?ISO-8859-2?Q?=B6rodowisko_dla_ucz=B1cego_si=EA?=
Date: Mon, 03 Apr 2006 16:42:23 +0200


Paweł Cern wrote:

No nie takich drobnych, wszystkie peryferia są inne. Dodatkowo osobne
przestrzenie kodu i danych powodują że pojęcie wskaźnika jest
niejednoznaczne. Zatem jeśli coś ma być łatwo przenośne to będzie to:

void main()
{
printf("Hello world!\r\n");
}

Niekoniecznie, dla printf() wypada definiować funkcję np. putch() czy
_write_r() z newlib żeby działało wypisywanie znaków na UART.


--
point


Poprzedni Następny
Wiadomość
Spis treści
From: "Filip Gdynia" <filip_po_at_nospam_world.pl>
Subject: Re: Jakie środowisko dla uczącego się C 8051
Date: Tue, 4 Apr 2006 21:48:23 +0200


Widze że niezła dyskusja powstała.
Co do Keil i innych załóżmy że mam dobrego wujka który kupi mi program.

A jeśli chodzi o wybór procków to padł on głównie dlatego, że
1. AT89S51 jest tani, 5zł za procka to bardzo dobra cena.
2. Nie interesują mnie peryferia typu ADC itd. RTC, chciałbym korzystać w
moich projektach z zew. układów np I2C
3. Materiały do programowania 8051 w C np. ksiązka Programowanie
Mikrokontrolerów 8051 w jezyku C pierwsze kroki i tania płytka ewaluacyjna.
4. Możliwość realizacji większości interesujących mnie zagadnień na tym
procku

Co do AVRów miałem z nimi styczność - BascomAVR, procki bardzo mi się
podobały. Ze
względu na to że polskich publikacji dot. Keil i Raisonance było więcej
zrezygnowałem z nich.
Bardzo podobała mi się publikacja BTC o programowaniu AVR w Bascomie licze
na to że ta dot. 8051 i C pomoże mi tak samo jak tamta...

Więc co Keil czy Raisonance ?:]

pozdr



Poprzedni Następny
Wiadomość
Spis treści
From: Marcin E. Hamerla <Xmeh4njusy_at_nospam_Xpoczta.Xonet.Xpl.removeX>
Subject: Re: =?ISO-8859-2?Q?Jakie_=3Frodowisko_dl?=
Date: Mon, 03 Apr 2006 06:24:45 +0200


Paweł Cern napisal(a):

Przede wszystkim chciałbym zaznaczyć że zwykły 8051 ma jakieś 4kB pamięci
kodu, zatem nie dziwię się że w BASIC-u jedyne co się tam zmieści to "Hello
world". Napewno w C będzie lepiej, ale niewiele.

E tam. Jesli piszesz pod Keil to mozna sporo kodu wepchnac. No ale o
float od razu trzeba zapomniec.

--
Pozdrowienia, Marcin E. Hamerla

"Every day I make the world a little bit worse."

Poprzedni Następny
Wiadomość
Spis treści
From: "Paweł Cern" <name_at_nospam_surname.pl>
Subject: Re: Jakie ?rodowisko dla ucz?cego się C 8051
Date: Mon, 3 Apr 2006 14:32:02 +0200



E tam. Jesli piszesz pod Keil to mozna sporo kodu wepchnac. No ale o
float od razu trzeba zapomniec.


Możliwe, ale będzie wolny.

Paweł



Poprzedni Następny
Wiadomość
Spis treści
From: Marcin E. Hamerla <Xmeh4njusy_at_nospam_Xpoczta.Xonet.Xpl.removeX>
Subject: Re: =?ISO-8859-2?Q?Jakie_=3Frodowisko_dl?=
Date: Wed, 05 Apr 2006 00:02:36 +0200


Paweł Cern napisal(a):

E tam. Jesli piszesz pod Keil to mozna sporo kodu wepchnac. No ale o
float od razu trzeba zapomniec.

Możliwe, ale będzie wolny.

To tez nie jest prawda. Wielokrotnie analizowalem kod wynikowy Keila i
nie ma sie czego przyczepic. Sa oczywiscie rzeczy, ktore w assemblerze
sie robi szybciej, ale to jest marginalny margines.

--
Pozdrowienia, Marcin E. Hamerla

"Every day I make the world a little bit worse."

Poprzedni Następny
Wiadomość
Spis treści
From: Zbych <abuse_at_nospam_onet.pl>
Subject: Re: Jakie =?ISO-8859-2?Q?=B6rodowisko_dla_ucz=B1cego_si=EA?=
Date: Sun, 02 Apr 2006 22:07:54 +0200


Filip Gdynia przemówił ludzkim głosem:

I tu pytanie co wybrać ? Jaki kompilator lub środowisko.

Jeśli szukasz czegoś darmowego to zostaje ci do wyboru sdcc (marna
jakość kodu wynikowego), albo wersja próbna któregoś z kompilatorów
komercyjnych. Keil ma ograniczenie do 2kB kodu (ale umieszcza go od
adresu 800h), raisonance ma ograniczenie do 4kB, więc powinien ci na
początek wystarczyć, pod warunkiem, że nie zaczniesz używać liczb
zmiennoprzecinkowych, albo opasłych funkcji bibliotecznych.

http://www.raisonance.com/download/dwnlform_new.php?TOOLS=51&BN=743
http://sourceforge.net/project/showfiles.php?group_id=599
http://www.silabs.com/public/documents/tpub_doc/anote/Microcontrollers/en/an198.pdf

Poprzedni Następny
Wiadomość
Spis treści
From: "Filip Gdynia" <filip_po_at_nospam_world.pl>
Subject: Re: Jakie środowisko dla uczącego się C 8051
Date: Sun, 2 Apr 2006 22:49:12 +0200


Przepraszam zrobiłem błąd że napisałem 8051...
Chodzi mi o kontrolery z serii 51 czyli np nowe AT89S52/53 i inne...