Jakie środowisko dla uczącego się C 8051

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

Reply to
Filip Gdynia
Loading thread data ...

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ł

Reply to
invalid unparseable

Filip Gdynia przemówił ludzkim głosem:

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.

formatting link
?group_id=599
formatting link

Reply to
Zbych

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

Reply to
Filip Gdynia

Paweł Cern napisal(a):

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

Reply to
Marcin E. Hamerla

Użytkownik "Paweł Cern" snipped-for-privacy@surname.pl napisał w wiadomości news:d48b$44301ac5$3eb34112$ snipped-for-privacy@news.chello.pl...

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) :-))

Reply to
Tomek

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

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ł

Reply to
invalid unparseable

Możliwe, ale będzie wolny.

Paweł

Reply to
invalid unparseable

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:

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

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.

Reply to
Tomek

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.

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.

Reply to
invalid unparseable

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

Reply to
point

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ę ;-]

Reply to
Tomek

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.

Reply to
invalid unparseable

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

Reply to
Filip Gdynia

Paweł Cern napisal(a):

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.

Reply to
Marcin E. Hamerla

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.