C51 Keil: Jak poprawnie zorganizować funkcje oraz zdefiniować DPTR?

C51 Keil -- pare pytań ?





Poprzedni Następny
Wiadomość
spis treści
From: "Krzysztof Walczak" <krzysw_at_nospam_cpu-zeto.com.pl>
Subject: C51 Keil -- pare pytań ?
Date: 15 May 1998 12:42:44 GMT


Mam ten kompilator, ale wiadomo
bez żadnej dokumentacji;-),
i z paroma rzeczami nie umiem sobie poradzić,
np.
1. Nie wiem jak zrobić, żeby w powstałym kodzie
program skakał do main(),
jeżeli zadeklaruje sobie funkcje przed main(), np:
*Program*
inc <reg515.h>
jakas_funkcja{

}
void main(void){
}
..to jej kod zostaje wstawiony przed main, a przecież program
powinien zaczynać sie od main ?

2. Zauważylem że w żadnym
standardowym pliku nagłówkowym
dla odmian 8051 nie ma zadeklarowanego DPTR,
zadeklarowałem wieć: sfr16 DPTR = 0x82,
kompilator przyjmuje dobrze, ale a51 wyrzuca syntax error.

--
Pozdrawiam
Krzysztof Walczak
krzysw_at_nospam_cpu-zeto.com.pl

Poprzedni Następny
Wiadomość
spis treści
From: Maciej Czapla <caltek_at_nospam_wroclaw.top.pl>
Subject: Re: C51 Keil -- pare pytań ?
Date: Sat, 16 May 1998 10:33:27 +0200


1. Nie wiem jak zrobić, żeby w powstałym kodzie
program skakał do main(),
jeżeli zadeklaruje sobie funkcje przed main(), np:
*Program*
inc <reg515.h>
jakas_funkcja{

}
void main(void){
}
..to jej kod zostaje wstawiony przed main, a przecież program
powinien zaczynać sie od main ?

KEILA nie znam ale problem jest wspólny dla wszystkich (?) kompilatorów.

Co do powyższego: kompilator umieszcza funkcje w kodzie wynikowym
(object) w takiej kolejności w jakiej są definiowane. (linker może to
poprzestawiać stosownie do typów funkcji, mapy pamięci, etc). Nie
oznacza to jednak, że funkcja 'main' ma być pierwszą napisaną funkcją -
wywołanie tej funkcji (w już skompilowanym i zlinkowanym programie)
następuje z modułu inicjującego np. c0start.obj lub czegoś podobnego,
którego zadaniem jest zainicjowanie zmiennych statycznych, przygotowanie
stosu oraz zazwyczaj przygotowanie (poprzez odpowiednie definicje
segmentów) miejsca na funkcje obsługi przerwań, sterty (heap), etc.

Na drugie nie odpowiem - patrz początek

MC

Poprzedni Następny
Wiadomość
spis treści
From: rubikon_at_nospam_fema.krakow.pl
Subject: Re: C51 Keil -- pare pytań ?
Date: Sun, 17 May 1998 13:05:26 +0200


Krzysztof Walczak wrote:

Mam ten kompilator, ale wiadomo
bez żadnej dokumentacji;-),
i z paroma rzeczami nie umiem sobie poradzić,
np.


2. Zauważylem że w żadnym
standardowym pliku nagłówkowym
dla odmian 8051 nie ma zadeklarowanego DPTR,
zadeklarowałem wieć: sfr16 DPTR = 0x82,
kompilator przyjmuje dobrze, ale a51 wyrzuca syntax error.

--
> Pozdrawiam
> Krzysztof Walczak
> krzysw_at_nospam_cpu-zeto.com.pl


Sprawdzilem to u siebie i po zadeklarowaniu w C sfr16 DPTR=0x82 -
program sie kompiluje, linkuje i dziala bez zarzutu.
W dokumentacji jest napisane ze z takimi rejestrami 16-to bitowymi mozna
to robic ale pod warunkiem ze czesci skladowe rejestru leza bezposrednio
pod soba - nie mozna wiec zadeklarowac w ten sposob timerow T1 i T0.
W plikach naglowkowych DPTR jest rozbity na dwa rejestry 8 bitowe DPL i
DPH.
W asemblerze raczej nie programuje bo wystarcza C Keila.
Moze nie rozwiazuje to twojgo pytania, ale napisalem co sprawdzilem i
przeczytalem w dokumentacji.

Pzdrowienia
Tomek Ptaszynski

Poprzedni Następny
Wiadomość
spis treści
From: "Krzysztof Walczak" <krzysw_at_nospam_cpu-zeto.com.pl>
Subject: Re: C51 Keil -- pare pytań ?
Date: 18 May 1998 05:29:51 GMT


Dzieki za wyjaśnienia, ale w końcu sam jakoś doszedłem,
zastosowałem dyrektywe #pragma asm do wstawienia kawałka
w asemblerze, jak później znalazłem wstawienie f-cji w asemblerze
trzeba zrobić inaczej.