RTV forum PL | NewsGroups PL

Dziwne odczyty i zachowanie kompilatora AVRGCC przy pracy z progmem w C?

Dziwne zachowanie kompilatora w AVRGCC.

NOWY TEMAT

elektroda NewsGroups Forum Index - Elektronika Polska - Dziwne odczyty i zachowanie kompilatora AVRGCC przy pracy z progmem w C?

Goto page Previous  1, 2, 3, 4, 5, 6, 7  Next

Milosz Skowyra
Guest

Sun May 09, 2004 9:10 am   



"J.F." wrote:

Quote:
tak ... zmienic procka Smile Bo ten zawsze bedzie sprawial takie
klopoty.

Tez wyjscie... a co bys polecal ? Irek promuje H8 Renesansa, ponoc
bardzo przyjemne. Jeszcze sie osobiscie nie przygladalem. Pod wzgledem
obudowania peryferiami atrakcyjny moze byc Cypres z rdzeniem '51 i FPGA,
ale raczej w Polsce malo dostepny.
Swoja droga to moze ktos by sprawdzil jak sie ma kompilacja podobnej
sytacji w innym srodowisku C, np IAR-a czy CodeVision ??

--
Regards. Przy odpowiedzi usun "." przed "net" z adresu!!!
|-----------------------------------------------------|
| Milosz Skowyra GSM Mobile +48 600 95 35 72 |
| miloszek@fido.net.org.pl 2:484/2.47 on fidonet |
|-----------------------------------------------------|

Piotr Wyderski
Guest

Sun May 09, 2004 10:16 am   



Krzysztof Rudnik wrote:

Quote:
Mozna by to obejsc gdyby narzucic dodatkowy warunek na zgodnosc typow -
atrybut wskaznika jest integralna czescia typu i wskazniki na rozne
typu pamieci sa niekompatybilne.

Jak to sobie konkretnie wyobrazasz? Tj. czym rozni sie

const char* p; wskazujace na dane w RAM od
const char* p; wskazujace na dane w ROM?

Mozna oczywiscie dodac do jezyka nowe specyfikatory rodzaju
wskazywanej pamieci i zabronic konwersji miedzy nimi, ale to juz
nie bedzie C. :-)

Quote:
To jest zdaje tzw architektura Harward

Zgadza sie, pamieci danych i programu sa fizycznie rozdzielone.

Pozdrawiam
Piotr Wyderski

Zbych
Guest

Sun May 09, 2004 10:37 am   



Pewnego dnia Piotr Wyderski przemówił ludzkim głosem:

Quote:
const char* p; wskazujace na dane w RAM od
^^^^^^^ to bym wywalił


Quote:
const char* p; wskazujace na dane w ROM?
^^^^^^^^ a tu aż się prosi o umieszczenie w romie


Quote:
Mozna oczywiscie dodac do jezyka nowe specyfikatory rodzaju
wskazywanej pamieci i zabronic konwersji miedzy nimi, ale to juz
nie bedzie C. Smile

Ale czy ktoś się upiera, że to musi być klasyczne C ? To ma być wygodne
narzędzie. Jeśli norma nie uwzględnia małego otworu na końcu młotka do
powieszenia go na gwoździu, to nie znaczy, że ktoś nie może tego zrobić,
a już nie daj boże sprzedawać pod nazwą "ansi/iso młotek" (pod
warunkiem, że to rozszerzenie da się wyłączyć).


--
*Warning*: Dates in Calendar are closer than they appear.

### /mail: bzb<at>poczta<dot>onet<dot>pl/ ###

Piotr Wyderski
Guest

Sun May 09, 2004 11:01 am   



Zbych wrote:

Quote:
Ale czy ktoś się upiera, że to musi być klasyczne C ?

Nikt sie nie upiera, nawet wprost przeciwnie; ja tylko
informuje, ze po takich modyfikacjach to juz nie bedzie C. :-)

Pozdrawiam
Piotr Wyderski

Piotr Wyderski
Guest

Sun May 09, 2004 11:05 am   



Zbych wrote:

Zapomnialem o tym:

Quote:
const char* p; wskazujace na dane w RAM od
^^^^^^^ to bym wywalił

A to dlaczego? Co zabrania miec w pamieci RAM
dane, ktore w danym kontekscie nie sa zapisywalne
(co nie oznacza, ze nie sa zapisywalne w ogole)?

Quote:
const char* p; wskazujace na dane w ROM?
^^^^^^^^ a tu aż się prosi o umieszczenie w romie

Ale skad kompilator ma o tym wiedziec? OK, jesli const
odnosi sie do globalnej definicji danej, to kompilator moze
to wywnioskowac, ale co z automatycznymi obiektami
z atrybutem const? :-)

Pozdrawiam
Piotr Wyderski

Zbych
Guest

Sun May 09, 2004 11:40 am   



Pewnego dnia Piotr Wyderski przemówił ludzkim głosem:

Quote:
A to dlaczego? Co zabrania miec w pamieci RAM
dane, ktore w danym kontekscie nie sa zapisywalne
(co nie oznacza, ze nie sa zapisywalne w ogole)?

Dla mnie jeśli coś jest stałe to jest stałe i już.
(co nie znaczy, że twórcy c myśleli podobnie).

Quote:
ale co z automatycznymi obiektami
z atrybutem const? Smile

A co to są automatyczne obiekty (w kontekście klasycznego c) ?


--
*Warning*: Dates in Calendar are closer than they appear.

### /mail: bzb<at>poczta<dot>onet<dot>pl/ ###

Jurek Szczesiul
Guest

Sun May 09, 2004 11:52 am   



Sun, 9 May 2004 13:16:23 +0200, na pl.misc.elektronika, Piotr Wyderski
napisał(a):

Quote:

Mozna oczywiscie dodac do jezyka nowe specyfikatory rodzaju
wskazywanej pamieci i zabronic konwersji miedzy nimi, ale to juz
nie bedzie C. :-)


I tak to jest wlasnie zrobione dla '51 - dodatkowo dla zmiennych (stalych)
okresla sie zadany obszar ( np. code, data, idata, xdata ) - potem
kompilator juz 'sam wie' jak poszczegolne zmienne obslugiwac.


--
Pozdrowienia
Jurek Szczesiul

Jurek Szczesiul
Guest

Sun May 09, 2004 11:59 am   



Sun, 09 May 2004 14:40:01 +0200, na pl.misc.elektronika, Zbych napisał(a):

Quote:
Dla mnie jeśli coś jest stałe to jest stałe i już.
(co nie znaczy, że twórcy c myśleli podobnie).


IMHO oni chyba w ogole nie przewidywali takich
problemow - w pecetowym programie i tak de facto
wszystko jest w ramie - nie masz stalych, ktore
trzeba przy odwolaniu sciagac pojedynczo z dysku ;-)

--
Pozdrowienia
Jurek Szczesiul

Zbych
Guest

Sun May 09, 2004 12:09 pm   



Pewnego dnia Jurek Szczesiul przemówił ludzkim głosem:

Quote:
IMHO oni chyba w ogole nie przewidywali takich
problemow - w pecetowym programie i tak de facto
wszystko jest w ramie - nie masz stalych, ktore
trzeba przy odwolaniu sciagac pojedynczo z dysku Wink

Chwila, przecież c to lata 60 (70 ?) i maszyny unixowe (PDP ?), które
już miały ochronę pamięci. Więc jeśli coś jest umieszczone w segmencie
kod (a nie danych) to nie powinno się tego dać zmodyfikować z poziomu
programu.

--
*Warning*: Dates in Calendar are closer than they appear.

### /mail: bzb<at>poczta<dot>onet<dot>pl/ ###

Piotr Wyderski
Guest

Sun May 09, 2004 1:04 pm   



Zbych wrote:

Quote:
Dla mnie jeśli coś jest stałe to jest stałe i już.
(co nie znaczy, że twórcy c myśleli podobnie).

Ale w C slowo kluczowe "const" nie znaczy "stale", tylko "nie
moze wystapic jako l-wartosc w danym kontekscie" Smile
Coz, to nie nasza wina, ze w C slowa kluczowe niezbyt
odpowiadaja swoim znaczeniom... Porzadniejsze jezyki
maja do tego slowa kluczowe "in" oraz "out", ktore
oznaczaja odpowiednio "tylko do odczytu" i "tylko do
zapisu", a "const" deklaruje prawdziwe stale, zazwyczaj
nie zajmujace ani bajta pamieci (cos jak #define, ale
z pelna kontrola typow). Sprawa "const" w C i C++ jest
bardzo sliska, szczegolnie po dodaniu atrybutu "mutable",
co daje obiekty "czesciowo stale". :->

Quote:
A co to są automatyczne obiekty (w kontekście klasycznego c) ?

Obiekty umieszczane przez kompilator na stosie.

Pozdrawiam
Piotr Wyderski

Piotr Wyderski
Guest

Sun May 09, 2004 1:12 pm   



Jurek Szczesiul wrote:

Quote:
I tak to jest wlasnie zrobione dla '51 - dodatkowo dla zmiennych (stalych)
okresla sie zadany obszar ( np. code, data, idata, xdata )

A w jaki sposob to konkretnie wyglada? Wprowadzili nowe slowa
kluczowe do jezyka, czy tez korzystaja z __attribute__((...))?

Pozdrawiam
Piotr Wyderski

Jurek Szczesiul
Guest

Sun May 09, 2004 1:27 pm   



Sun, 09 May 2004 15:09:38 +0200, na pl.misc.elektronika, Zbych napisał(a):

Quote:
Pewnego dnia Jurek Szczesiul przemówił ludzkim głosem:

Hau Wink


Quote:

Chwila, przecież c to lata 60 (70 ?) i maszyny unixowe (PDP ?), które
już miały ochronę pamięci. Więc jeśli coś jest umieszczone w segmencie
kod (a nie danych) to nie powinno się tego dać zmodyfikować z poziomu
programu.

Fakt - i const wlasnie to okresla. Ale segment tak czy siak w ramie. A tu
oddzielny obszar z powielonymi adresami i zupelnie inna maszynowa
obsluga dostepu (a stale moga byc przeciez rowniez w eeprom ).
Wiec sam const przestaje wystarczac - pozostala z niego tylko funkcja
wykrywania bledu przy omylkowej probie zapisu.

--
Pozdrowienia
Jurek Szczesiul

Jurek Szczesiul
Guest

Sun May 09, 2004 1:43 pm   



Sun, 9 May 2004 16:12:01 +0200, na pl.misc.elektronika, Piotr Wyderski
napisał(a):

Quote:
I tak to jest wlasnie zrobione dla '51 - dodatkowo dla zmiennych (stalych)
okresla sie zadany obszar ( np. code, data, idata, xdata )

A w jaki sposob to konkretnie wyglada? Wprowadzili nowe slowa
kluczowe do jezyka, czy tez korzystaja z __attribute__((...))?


W tych, ktore ogladalem byly to slowa kluczowe
( zreszta jest to nazwane jednoznacznie, np. w opisach SDCC jako
'mcs51 storage class language extensions' ).

--
Pozdrowienia
Jurek Szczesiul

Krzysztof Rudnik
Guest

Sun May 09, 2004 1:50 pm   



Piotr Wyderski wrote:

Quote:

Krzysztof Rudnik wrote:

Mozna by to obejsc gdyby narzucic dodatkowy warunek na zgodnosc typow -
atrybut wskaznika jest integralna czescia typu i wskazniki na rozne
typu pamieci sa niekompatybilne.

Jak to sobie konkretnie wyobrazasz? Tj. czym rozni sie

const char* p; wskazujace na dane w RAM od
const char* p; wskazujace na dane w ROM?

Dodanie __attribute__ juz wykracza poza C.

Krzysiek Rudnik

J.F.
Guest

Sun May 09, 2004 7:53 pm   



On Sun, 9 May 2004 13:16:23 +0200, Piotr Wyderski wrote:
Quote:
Krzysztof Rudnik wrote:
Mozna by to obejsc gdyby narzucic dodatkowy warunek na zgodnosc typow -
atrybut wskaznika jest integralna czescia typu i wskazniki na rozne
typu pamieci sa niekompatybilne.

Jak to sobie konkretnie wyobrazasz? Tj. czym rozni sie
const char* p; wskazujace na dane w RAM od
const char* p; wskazujace na dane w ROM?

mozna zrobic tak jak zrobiono:
prog_char: char __attribute__((progmem))
PGM_P : prog_char const*

Kompilator sie zorientuje ... ale jak zmusic printf i inne funkcje
zeby sie po adresie orientowaly ? Smile
Niby mozna tak jak kolega tu proponowal - wskazniki 3 bajtowe,
pierwszy wskazuje obszar ... tylko ze wtedy zegnaj wydajnosc :-(

Quote:
To jest zdaje tzw architektura Harward
Zgadza sie, pamieci danych i programu sa fizycznie rozdzielone.

Co nie zabrania istnienia jednolitej adresacji. Np
najstarszy bit adresu wybiera czy dana czytamy z ram czy z rom.

Tylko jak to zrobic jesli niektorzy chca 64KB ram, 256KB ROM
i oszczedne 16-bitowe wskazniki.

Ech, to gdzie dostac ARMa w przyzwoitej cenie, detalicznej ilosci i
obudowie nie BGA ?

J.

Goto page Previous  1, 2, 3, 4, 5, 6, 7  Next

elektroda NewsGroups Forum Index - Elektronika Polska - Dziwne odczyty i zachowanie kompilatora AVRGCC przy pracy z progmem w C?

NOWY TEMAT

Regulamin - Zasady uzytkowania Polityka prywatnosci Kontakt RTV map News map