Jak właściwie przekazywać wskaźniki struktur w programowaniu na 51 z C Kail?

51, C Kail'a i problemy





Poprzedni Następny
Wiadomość
Spis treści
From: "Wojtek" <wkot_at_nospam_poland.com>
Subject: 51, C Kail'a i problemy
Date: Mon, 6 May 2002 17:00:06 +0200


Niedawno rozpoczšłem swš przygodę z procesorkami '51 i językiem C Kail'a.
Mam pewne doświadczenie z programowaniem PC-tów a wraz z nim pewne nawyki,
które po przejściu na '51 owocujš problemami.
Oto szczegóły:
używam uC Atmela 89C2051, kompilator Kail w dość starej wersji. Nawyki o
których pisałem to zwyczaj czynienia funkcji możliwie uniwersalnymi, a zatem
przekazywanie wszystkich zmiennych, na których one działajš jako parametrów.
W szczególności w moim programie, z którym mam problemy wielokrotnie
przekazuję
wskaŸniki od struktur. Program działa znakomicie ale tylko (!) w
symulatorze.
Kiedy zaprogramuję kostkę nie działa wcale. Metodš prób i błędów
doszedłem do tego, że jeżeli nie przekazuję zmiennych jako parametrów
funkcji
tylko funkcje działajš na zmiennych globalnych to program działa dobrze.
Jest to
jednak rozwišzanie nieeleganckie i na dłuższš metę niełatwo nad kodem
pisanym
w taki sposób zapanować. Dodam jeszcze, że tych przekazywanych parametrów
nie
jest aż tak bardzo wiele, góra 3-4, zagłębienie wywołań funkcji max. 5.
Jeżeli ktoś wie gdzie leży Ÿródło moich kłopotów to proszę o odpowiedŸ.
I jeszcze jedno: zaobserwowałem (w symulatorku), że parametry do funkcji
nie sš przekazywane na stosie - przy wywołaniu funkcji SP zwiększa się o 2
niezależnie od liczby parametrów. Jeżeli nie na stosie to gdzie sš one
przekazywane (to chyba nie jest zasługa optymalizacji ?).
Mam nadzieję, że napisałem wszystko co potrzeba
Pozdrawiam Was
Wojtek




Poprzedni Następny
Wiadomość
Spis treści
From: "Marek Dzwonnik" <mdz_at_nospam_message.pl>
Subject: Re: 51, C Kail'a i problemy
Date: Mon, 6 May 2002 17:07:33 +0200


Użytkownik "Wojtek" <wkot_at_nospam_poland.com> napisał w wiadomości
news:ab6527$8c6$1_at_nospam_news.tpi.pl...
W szczególności w moim programie, z którym mam problemy wielokrotnie
przekazuję
wskaŸniki od struktur. Program działa znakomicie ale tylko (!) w
symulatorze.
(...)
w taki sposób zapanować. Dodam jeszcze, że tych przekazywanych parametrów
nie
jest aż tak bardzo wiele, góra 3-4, zagłębienie wywołań funkcji max. 5.
Jeżeli ktoś wie gdzie leży Ÿródło moich kłopotów to proszę o odpowiedŸ.

I jeszcze jedno: zaobserwowałem (w symulatorku), że parametry do funkcji
nie sš przekazywane na stosie - przy wywołaniu funkcji SP zwiększa się o 2
niezależnie od liczby parametrów. Jeżeli nie na stosie to gdzie sš one
przekazywane (to chyba nie jest zasługa optymalizacji ?).

Masz nawyki z procesorów gdzie stosu jest ile dusza zapragnie a i innych
zasobów pod dostatkiem :-)
Keil zazwyczaj działa mšdrze, ale w realiach jakie narzuca mu szczupłość
zasobów 51-ki.
Dlatego również programista musi być świadom w jakiej rzeczywistości się
obraca.

Po pierwsze lektura:
ttp://www.esacademy.com/automation/docs/c51primer/
rozdziały o:
i 2 bajtowych)

Po drugie:
Jeżeli po lekturze C51 primera nie dojdziesz do ładu to wystaw gdzieś swój
kod na światło dzienne - pomyślimy.

--
Marek Dzwonnik mdz_at_nospam_message.pl
GG: #2061027 (zwykle jako 'dostępny-niewidoczny')




Poprzedni Następny
Wiadomość
Spis treści
From: "Marek Dzwonnik" <mdz_at_nospam_message.pl>
Subject: Re: 51, C Kail'a i problemy
Date: Mon, 6 May 2002 17:32:36 +0200


Użytkownik "Wojtek" <wkot_at_nospam_poland.com> napisał w wiadomości
news:ab6527$8c6$1_at_nospam_news.tpi.pl...
używam uC Atmela 89C2051, kompilator Kail w dość starej wersji

Program działa znakomicie ale tylko (!) w
symulatorze.

Skoro tak, to czy masz wybrany model pamięci akceptowalny dla 2051 czyli
kości bez zewn XRAM?
Options -> C51 Compiler Opions -> Memory Model
Memory Model (variable location) : SMALL (variables in DATA)
może też być:
Code limit: Small (program 2K or less) -> kolmpilator może używać wyłšcznie
instrukcji ACALL, AJMP zamiast LJMP, LCALL.

A także poprawnie zadeklarowany rozmiar wew. RAM-u na 128B ?
Options -> BL51 Code Banking Linker -> RAM size -> 128

--
Marek Dzwonnik mdz_at_nospam_message.pl
GG: #2061027 (zwykle jako 'dostępny-niewidoczny')




Poprzedni Następny
Wiadomość
Spis treści
From: "Wojtek" <wkot_at_nospam_poland.com>
Subject: Re: 51, C Kail'a i problemy
Date: Wed, 8 May 2002 11:46:19 +0200



Użytkownik "Marek Dzwonnik" <mdz_at_nospam_message.pl> napisał w wiadomości
news:3cd6a177$1_at_nospam_news.home.net.pl...
Skoro tak, to czy masz wybrany model pamięci akceptowalny dla 2051 czyli
kości bez zewn XRAM?

Tak.

Options -> C51 Compiler Opions -> Memory Model
Memory Model (variable location) : SMALL (variables in DATA)
może też być:
Code limit: Small (program 2K or less) -> kolmpilator może używać
wyłšcznie
instrukcji ACALL, AJMP zamiast LJMP, LCALL.

A także poprawnie zadeklarowany rozmiar wew. RAM-u na 128B ?
Options -> BL51 Code Banking Linker -> RAM size -> 128

Wszystko co wymieniłeś mam ustawione prawidłowo. Bardzo dziękuję za
wskazówki a w szczególności za link do 'C51 Primer'. Podejrzewam, że po
lekturze tego co tam jest będę w stanie rozwišzać wszystkie problemy. O
efektach poinformuję.
Przy okazji chciałbym jeszcze zapytać jakiego modelu pamięci należy użyć gdy
stosujemy 4051 i potrzebujemy 4KB pamięci kodu?
Serdecznie pozdrawiam
Wojtek




Poprzedni Następny
Wiadomość
Spis treści
From: "Andrzej Robak" <esial_at_nospam_poczta.fm>
Subject: Re: Kail i asembler
Date: Tue, 7 May 2002 19:15:18 +0200



"TomekG" <Tomaszger_at_nospam_poczta.onet.pl> wrote:

Czy mozna Kaila sprzezyc z plytka dydaktyczna robiona przez micromaxa
http://www.micromax.pl/um_system.htm ). Chodzi o to, zeby na biezaco
obserwowac stan portow, wyswietlacza lcd , itp.
Czy Kail daje taka mozliwosc?

Tego niestety nie wiem. Musisz zapytać się kogoś kompetentnego, albo
poszukać czegoś w dokumentacji Keil'a. Upewnij się, bo Keil drogi jest :)

Pozdrawiam,
RA.



Poprzedni Następny
Wiadomość
Spis treści
From: "TomekG" <Tomaszger_at_nospam_poczta.onet.pl>
Subject: Kail i asembler
Date: Tue, 7 May 2002 09:46:00 +0200



Użytkownik "Wojtek" <wkot_at_nospam_poland.com> napisał w wiadomości
news:ab6527$8c6$1_at_nospam_news.tpi.pl...
Niedawno rozpoczšłem swš przygodę z procesorkami '51 i językiem C Kail'a.
Mam pewne doświadczenie z programowaniem PC-tów a wraz z nim pewne nawyki,


Przy okazji: czy mozna przystosowac tak Kaila, zeby compilowal i debugowal
takze zrodla pisane nie w C, tylko asemblerze?

pozdrawiam
Tomek



Poprzedni Następny
Wiadomość
Spis treści
From: "Andrzej Robak" <esial_at_nospam_poczta.fm>
Subject: Re: Kail i asembler
Date: Tue, 7 May 2002 10:09:43 +0200



"TomekG" <Tomaszger_at_nospam_poczta.onet.pl> wrote:

Przy okazji: czy mozna przystosowac tak Kaila, zeby compilowal i debugowal
takze zrodla pisane nie w C, tylko asemblerze?

Informacje dla Keil uVision2:
1. Uruchamiasz Keil'a.
2. Wyklikujesz Project->New Project (wybierasz procesor i zapisujesz projekt
pod jakšś nazwš na dysku).
3. Wyklikujesz File->New i piszesz treść swojego programu w asemblerze.
4. Zapisujesz ten program pod jakšś nazwš, powiedzmy program.a51.
5. W Project Window (jeśli nie masz go widocznego, to wybierasz z View)
rozwijasz Target1.
6. Klikasz PPM(prawym przyć. myszki) na Source Group 1 i wybierasz Add Files
to Group 'Source Group 1'
7. Otwiera się okienko przy, pomocy którego dodajesz plik do projektu.
8. Teraz możesz kompilować i debugować swój program.a51.
Polecam także zapoznać się z opcjami Projektu itp.

Algorytm powyższy nie jest optymalnym :)

Pozdrawiam,
Andrzej Robak



Poprzedni Następny
Wiadomość
Spis treści
From: "TomekG" <Tomaszger_at_nospam_poczta.onet.pl>
Subject: Re: Kail i asembler
Date: Tue, 7 May 2002 11:23:36 +0200



Użytkownik "Andrzej Robak" <esial_at_nospam_poczta.fm> napisał w wiadomości
news:ab8254$j62$1_at_nospam_zeus.polsl.gliwice.pl...
Informacje dla Keil uVision2:
1. Uruchamiasz Keil'a......

Pozdrawiam,
Andrzej Robak

Serdecznie dziekuje,
Skoro wszystko poszlo dobrze, to osmiele sie zadac jeszcze jedno pytanie.
Czy mozna Kaila sprzezyc z plytka dydaktyczna robiona przez micromaxa
http://www.micromax.pl/um_system.htm ). Chodzi o to, zeby na biezaco
obserwowac stan portow, wyswietlacza lcd , itp.
Czy Kail daje taka mozliwosc?

Tomek