Moje boje z AVRGCC.



Masz problem? Zapytaj na forum elektroda.pl

Poprzedni Następny
Wiadomość
Spis treści
From: Milosz Skowyra <mewashek_at_nospam_wp.pl>
Subject: Moje boje z AVRGCC.
Date: Fri, 23 Apr 2004 23:02:30 +0200


Ehlo.

Siedze i oblatuje sie w subj. Nie powiem, rezultaty calkiem znosne, ale
poleglem w pewnym miejscu, mianowicie stringi.
Chcialbym napisac sobie procedurke wysylajaca stringa na LCD.
I teraz nie bardzo wiem jak to zrobic, bo w GCC chyba nie ma takiego
typu zmiennej, co prawda po glowie mi sie kolacze ze string 19 znakowy
to nic innego jak np. char a[20] zakonczony zerem. Rzuccie jakims
przykladem jak przekazac do procedurki stringa... bo jak nie... ;-)))
Na powaznie, poprosze krotki przyklad (najlepiej dzialajacy) typu:

char lcd_send_string (char a[20])
{
for (unsigned char f=1;f<strlen(a);f++)
lcd_send_ascii(a[f]);
return(0);
}

int main (void)
lcd_send_string ('Hello world');


PS. A propo's ostatniej dyskusji o promowaniu char-a do 16 bitowego
integera. Odpowiedz jest w dokumentacji.
========================================================
7.3.21 Why does the compiler compile an 8-bit operation that uses
bitwise oper-ators
into a 16-bit operation in assembly?
Bitwise operations in Standard C will automatically promote their
operands to an int,
which is (by default) 16 bits in avr-gcc.
To work around this use typecasts on the operands, including literals,
to declare that
the values are to be 8 bit operands.
This may be especially important when clearing a bit:
var &= ˜mask; /* wrong way!
The bitwise ”not” operator ( . ) will also promote the value in mask to
an int. To keep
it an 8-bit value, typecast before the ”not” operator:
var &= (unsigned char)˜mask;
========================================================

PS2. Pewnie o stringach tez jest... ale cos nie moge znalezc... ghrrr. Z
gory dzieki.

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

========
Path: news-archive.icm.edu.pl!news2.icm.edu.pl!news.webcorp.com.pl!newsfeed.tpinternet.pl!news.nask.pl!news.itl.waw.pl!not-for-mai

Poprzedni Następny
Wiadomość
Spis treści
From: "Jacek R. Radzikowski" <jacek_at_nospam_spamer.die.die.die.piranet.org>
Subject: Re: Moje boje z AVRGCC.
Date: Fri, 23 Apr 2004 21:13:45 +0000 (UTC)


Milosz Skowyra <mewashek_at_nospam_wp.pl> wrote:
Ehlo.

Siedze i oblatuje sie w subj. Nie powiem, rezultaty calkiem znosne, ale
poleglem w pewnym miejscu, mianowicie stringi.
Chcialbym napisac sobie procedurke wysylajaca stringa na LCD.
I teraz nie bardzo wiem jak to zrobic, bo w GCC chyba nie ma takiego
typu zmiennej, co prawda po glowie mi sie kolacze ze string 19 znakowy
to nic innego jak np. char a[20] zakonczony zerem. Rzuccie jakims

Nie tylko w gcc, ale w taka jest postac zapisu stringow w pamieci w jezyku C.

przykladem jak przekazac do procedurki stringa... bo jak nie... ;-)))
Na powaznie, poprosze krotki przyklad (najlepiej dzialajacy) typu:

char lcd_send_string (char a[20])
Jesli nie zamierzesz zwracac wyniki, mozesz zadeklarowac jako
void. a ma byc wskaznikiem albo tablica, rozmiary podawac nie potrzeba
(nie wolno? nie mam k&r pod reka)
Deklaracja po uwzglednieniu tych uwacg moze wygladac tak:
void lcd_send_string (char *a)

{
for (unsigned char f=1;f<strlen(a);f++)

W C tablice sa indeksowane od 0, nie od 1

lcd_send_ascii(a[f]);
return(0);
}

Cala procedurka po porawkach moze wygladac nastepujaco:
void lcd_send_string (char *a)
{
int i;
for(i=0;a[i]!=0;i++)
lcd_send_ascii(a[i]);
}

Albo, bardziej w stylu C:

void lcd_send_string (char *a)
{
while(*a)
lcd_send_ascii(*a++);
}

A tak poza tym to zanim zaczniesz czytac gcc-faq polecam jakas
ksiazke o podstawach C. Faq jest dla zaawansowanych uzytkownikow,
ktorzy chca poznac "smaczki" gcc, a nie uczyc sie programowania
od podstaw.



========
Path: news-archive.icm.edu.pl!news2.icm.edu.pl!news.webcorp.com.pl!newsfeed.tpinternet.pl!news.nask.pl!newsfeed.gazeta.pl!news.gazeta.pl!not-for-mai

Poprzedni Następny
Wiadomość
Spis treści
From: "Arek Karas" <arkkarREMOVE_at_nospam_2com.pl>
Subject: Re: Moje boje z AVRGCC.
Date: Fri, 23 Apr 2004 23:17:24 +0200


Siedze i oblatuje sie w subj. Nie powiem, rezultaty calkiem znosne, ale
poleglem w pewnym miejscu, mianowicie stringi.
Chcialbym napisac sobie procedurke wysylajaca stringa na LCD.
I teraz nie bardzo wiem jak to zrobic, bo w GCC chyba nie ma takiego
typu zmiennej, co prawda po glowie mi sie kolacze ze string 19 znakowy
to nic innego jak np. char a[20] zakonczony zerem. Rzuccie jakims
przykladem jak przekazac do procedurki stringa... bo jak nie... ;-)))
Na powaznie, poprosze krotki przyklad (najlepiej dzialajacy) typu:
char moj_tekst1[] = "pierwszy tekst";
char moj_tekst1[] = "drugi tekst";

void LCD_Print(char *data)
{
while(*data)
{
lcd_send_ascii(*data++);
}
}

i teraz:
LCD_Print(moj_tekst1);
LCD_Print(moj_tekst2);
albo
LCD_Print("kolejny napis");
Tylko mala uwaga - kazdy taki string zajmuje pamiec RAM, zatem jak masz ich
duzo to moze Ci zabraknac RAM-u.
Rozwiazaniem jest umieszczenie tekstow we flashu i wyswietlanie ich stamtad,
ale nie wiem jak to zrobic w GCC(na codzien pracuje w IAR-C dla AVR), chyba
cos z memory_attribute, musisz poszukac w dokumentacji GCC.

No i polecam dobra ksiazke o ANSI C.

Pozdr
AK


========
Path: news-archive.icm.edu.pl!news2.icm.edu.pl!news.webcorp.com.pl!newsfeed.tpinternet.pl!news.astercity.net!news.aster.pl!not-for-mai

Poprzedni Następny
Wiadomość
Spis treści
From: Adam Dybkowski <adybkows_at_nospam_amwaw.edu.pl>
Subject: Re: Moje boje z AVRGCC.
Date: Fri, 23 Apr 2004 23:23:26 +0200


Milosz Skowyra wrote:

przykladem jak przekazac do procedurki stringa... bo jak nie... ;-)))
Na powaznie, poprosze krotki przyklad (najlepiej dzialajacy) typu:

char lcd_send_string (char a[20])
{
for (unsigned char f=1;f<strlen(a);f++)
lcd_send_ascii(a[f]);
return(0);
}

Podstawy, podstawy. :) I nie ma znaczenia, czy w avr-gcc czy inszy proc:

void lcd_send_string (char *txt)
{
while (*txt)
lcd_send_ascii (*txt++);
}

Sposób użycia:
lcd_send_string ("ABCD");

A wracając do avr-gcc to poczytaj sobie o umieszczaniu stringów w
pamięci programu, normalnie trafiają do pamięci danych i szybko się ona
może skończyć.

Ja używam w avr-gcc standardowego mechanizmu printf (RTFM: funkcja
fdevopen) i to jest najwygodniejsze rozwiązanie pod słońcem. Jedyna wada
to powiększenie kodu programu o kilka KB. A stringi w kodzie bardzo
łatwo się używa:

printf_P (PSTR ("test = %d\r\n"), test);

--
Adam Dybkowski
adybkows_at_nospam_amwaw.edu.pl
http://www.amwaw.edu.pl/~adybkows/


========
Path: news-archive.icm.edu.pl!news2.icm.edu.pl!news.webcorp.com.pl!newsfeed.tpinternet.pl!atlantis.news.tpi.pl!news.tpi.pl!not-for-mai

Poprzedni Następny
Wiadomość
Spis treści
From: Milosz Skowyra <mewashek_at_nospam_wp.pl>
Subject: Re: Moje boje z AVRGCC.
Date: Fri, 23 Apr 2004 23:36:14 +0200


Adam Dybkowski wrote:

Podstawy, podstawy. :) I nie ma znaczenia, czy w avr-gcc czy inszy proc:

Jasne. Odpowiem wszystkim na raz zeby nie odpisywac kazdemu. Z C a w
zasadzie CPP mialem kontakt krotki na uczelni gdzies na 2 roku. Potem
odkupilem licencje na Keila i mniej wiecej w tym samym czasie przestalem
zajmowac sie rodzinka '51. Ale wzielo mnie na C bo chwilowo obijam sie w
domku no i trzeba bylo ruszyc do przodu. Po ksiazke uderze w
poniedzialek, bo w tym tygodniu mialem jeszcze troszke zajec. Co zas do
samego jezyka wysokiego poziomu, to jestem mile zaskoczony. Do tej pory
potrafilem pisac programy po 8-12 KB w czystym asm-ie. Co prawda
komentarze zajmowaly 20x wiecej niz program, ale bylem zadowolony i po
powrocie do czegos po roku dawalem sobie rade bez problemu. Ale widze ze
bylem w bledzie ;-))) Z drugiej strony podpatruje jak soboe GCC radzi w
przenoszeniu pewnych rzeczy z C na asm-a. I czasem czlowiek mile sie
zaskoczy a czasem odwrotnie ;-)

A wracając do avr-gcc to poczytaj sobie o umieszczaniu stringów w
pamięci programu, normalnie trafiają do pamięci danych i szybko się ona
może skończyć.

To juz wiem. Na razie musze poczytac o podstawach, formatach, uniach,
strukturach. Co prawda zaciekle pisalem w Paszczalu i Delphi, ale oprocz
algorytmu niewiele sie zgadza ;-))) A czytanie manuala do GCC no coz...
jak ma sie braki w podstawach...

Ja używam w avr-gcc standardowego mechanizmu printf (RTFM: funkcja
fdevopen) i to jest najwygodniejsze rozwiązanie pod słońcem. Jedyna wada
to powiększenie kodu programu o kilka KB. A stringi w kodzie bardzo
łatwo się używa:
printf_P (PSTR ("test = %d\r\n"), test);

Tez sie kiedys tego dowiem ;-))))

Dzieki wszystkim, milej nocki ;-)

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

========
Path: news-archive.icm.edu.pl!news2.icm.edu.pl!news.webcorp.com.pl!newsfeed.tpinternet.pl!news.nask.pl!newsfeed.gazeta.pl!news.onet.pl!not-for-mai

Poprzedni Następny
Wiadomość
Spis treści
From: J.F. <jfox_nospam_at_nospam_poczta.onet.pl>
Subject: Re: Moje boje z AVRGCC.
Date: Sat, 24 Apr 2004 00:18:43 +0200


On Fri, 23 Apr 2004 23:02:30 +0200, Milosz Skowyra wrote:
Chcialbym napisac sobie procedurke wysylajaca stringa na LCD.
I teraz nie bardzo wiem jak to zrobic, bo w GCC chyba nie ma takiego
typu zmiennej, co prawda po glowie mi sie kolacze ze string 19 znakowy
to nic innego jak np. char a[20] zakonczony zerem. Rzuccie jakims
przykladem jak przekazac do procedurki stringa... bo jak nie... ;-)))

Ty potrzebujesz kursu C :-)
Polecam klasyke Kernigham & Ritchie.

int main (void)
lcd_send_string ('Hello world');

int main (void)
{
lcd_send_string ("Hello world");
}

zwroc uwage na ' i "

J.


========
Path: news-archive.icm.edu.pl!news2.icm.edu.pl!news.webcorp.com.pl!news.supermedia.pl!news.man.poznan.pl!newsfeed.tpinternet.pl!atlantis.news.tpi.pl!news.tpi.pl!not-for-mai

Poprzedni Następny
Wiadomość
Spis treści
From: Milosz Skowyra <mewashek_at_nospam_wp.pl>
Subject: Re: Moje boje z AVRGCC.
Date: Sat, 24 Apr 2004 00:30:10 +0200


"J.F." wrote:

Ty potrzebujesz kursu C :-)
Polecam klasyke Kernigham & Ritchie.

A tak usilowalem nie dac sie zdemaskowac... ;-)))
Co do ksiazki to trzymam za jezyk, ale jak po przeczytaniu spisu tresci
nie bede madrzejszy to zaskarze... ;-))) wydawnictwo ;-)

Milej nocki.

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

========
Path: news-archive.icm.edu.pl!news2.icm.edu.pl!news.webcorp.com.pl!newsfeed.tpinternet.pl!mimuw.edu.pl!news.mimuw.edu.pl!news.internetia.pl!news.astercity.net!news.aster.pl!not-for-mai

Poprzedni Następny
Wiadomość
Spis treści
From: Adam Dybkowski <adybkows_at_nospam_amwaw.edu.pl>
Subject: Re: Moje boje z AVRGCC.
Date: Sat, 24 Apr 2004 00:33:18 +0200


J.F. wrote:

Ty potrzebujesz kursu C :-)
Polecam klasyke Kernigham & Ritchie.

Zdecydowanie nie - taka klasyka nadaje sie dzisiaj tylko do muzeum.
Tylko ANSI C sie liczy. A potem rozszerzenia C99.

--
Adam Dybkowski
adybkows_at_nospam_amwaw.edu.pl
http://www.amwaw.edu.pl/~adybkows/


========
Path: news-archive.icm.edu.pl!news.rmf.pl!agh.edu.pl!news.agh.edu.pl!news.onet.pl!not-for-mai

Poprzedni Następny
Wiadomość
Spis treści
From: J.F. <jfox_nospam_at_nospam_poczta.onet.pl>
Subject: Re: Moje boje z AVRGCC.
Date: Sat, 24 Apr 2004 13:54:56 +0200


On Sat, 24 Apr 2004 00:33:18 +0200, Adam Dybkowski wrote:
J.F. wrote:
Ty potrzebujesz kursu C :-)
Polecam klasyke Kernigham & Ritchie.

Zdecydowanie nie - taka klasyka nadaje sie dzisiaj tylko do muzeum.
Tylko ANSI C sie liczy. A potem rozszerzenia C99.

Nowsze wydania chyba juz opisuja ANSI. A w razie czego roznice sa
niewielkie, a czesci wspolnej sporo.
Jak jest ze stringami i wskazniki to sie dowie :-)

J.


========
Path: news-archive.icm.edu.pl!news2.icm.edu.pl!newsfeed.tpinternet.pl!atlantis.news.tpi.pl!news.tpi.pl!not-for-mai

Poprzedni Następny
Wiadomość
Spis treści
From: Milosz Skowyra <mewashek_at_nospam_wp.pl>
Subject: Re: Moje boje z AVRGCC.
Date: Sat, 24 Apr 2004 16:58:43 +0200


"J.F." wrote:

Nowsze wydania chyba juz opisuja ANSI. A w razie czego roznice sa
niewielkie, a czesci wspolnej sporo.
Jak jest ze stringami i wskazniki to sie dowie :-)

To juz wiem, musze wiecej odrdzewiacza popijac ;-))) W paszczalu
stosunkowo rzadko uzywa sie wskaznikow w porownaniu do C, przynajmniej
afair, ale zasady te same ;-)
Wlasnie boleje nad brakiem typu boolean ;-((( Ale znalazlem posrednie
rozwiazanie.

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

========
Path: news-archive.icm.edu.pl!news2.icm.edu.pl!newsfeed.gazeta.pl!news.dialog.net.pl!not-for-mai

Poprzedni Następny
Wiadomość
Spis treści
From: "Piotr Wyderski" <piotr.wyderskiREMOVE_at_nospam_wp.pl>
Subject: Re: Moje boje z AVRGCC.
Date: Sat, 24 Apr 2004 17:26:27 +0200



Milosz Skowyra wrote:

Wlasnie boleje nad brakiem typu boolean ;-((( Ale znalazlem posrednie
rozwiazanie.

W C99 jest typ boole'owski i nazywa sie _Bool. Zaleca
sie jednak uzyc naglowka <stdbool.h>, co daje znane
z C++ slowa kluczowe bool, true i false. Sprawdz, czy
Twoj kompilator moze pracowac w trybie C99. Jesli
nie -- wyrzuc go i uzyj takiego, ktory potrafi. :-) BTW:

http://www.ucalgary.ca/~bgwong/n869.pdf

Pozdrawiam
Piotr Wyderski



========
Path: news-archive.icm.edu.pl!news.rmf.pl!agh.edu.pl!news.agh.edu.pl!news.onet.pl!newsfeed.gazeta.pl!news.man.poznan.pl!newsfeed.tpinternet.pl!atlantis.news.tpi.pl!news.tpi.pl!not-for-mai

Poprzedni Następny
Wiadomość
Spis treści
From: Milosz Skowyra <mewashek_at_nospam_wp.pl>
Subject: Re: Moje boje z AVRGCC.
Date: Mon, 26 Apr 2004 21:19:53 +0200


Piotr Wyderski wrote:

Milosz Skowyra wrote:

Wlasnie boleje nad brakiem typu boolean ;-((( Ale znalazlem posrednie
rozwiazanie.
W C99 jest typ boole'owski i nazywa sie _Bool. Zaleca
sie jednak uzyc naglowka <stdbool.h>, co daje znane
z C++ slowa kluczowe bool, true i false. Sprawdz, czy
Twoj kompilator moze pracowac w trybie C99.

Moze pracowac i faktycznie dziala. Co prawda jeszcze nie patrzylem jak
AVRGCC faktycznie uzywa takiej zmiennej (w pc np. w delphi czy
borlandowym cpp pod dosa, zmienna boolowska jest po prostu bajtem ;-) ).
Dzieki bardzo.

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

========
Path: news-archive.icm.edu.pl!news2.icm.edu.pl!pwr.wroc.pl!panorama.wcss.wroc.pl!not-for-mai

Poprzedni Następny
Wiadomość
Spis treści
From: "Piotr Wyderski" <wyderskiREMOVE_at_nospam_ii.uni.wroc.pl>
Subject: Re: Moje boje z AVRGCC.
Date: Tue, 27 Apr 2004 15:52:48 +0200



Milosz Skowyra wrote:

Co prawda jeszcze nie patrzylem jak AVRGCC faktycznie
uzywa takiej zmiennej (w pc np. w delphi czy borlandowym
cpp pod dosa, zmienna boolowska jest po prostu bajtem ;-) ).

IIRC tutaj rowniez bedzie ona bajtem. Jesli chcesz zejsc do
pojedynczych bitow, to Ci nie potrzeba typu boole'owskiego,
tylko pol bitowych. :-) Sprobuj tak:

typedef struct {

bool pierwszy_warunek : 1;
...
bool osmy_warunek : 1;

} osiem_warunkow_w_cenie_jednego;

;-)

A polecisz jakas konkretna pozycje do poczytania...

Niestety do C99 nie znam zadnego dobrego podrecznika.
Najlepiej starannie przeczytac Standard, ale to jest zadanie
dla twardzieli, bo wartkosc akcji odpowiada mniej wiecej
ksiazce telefonicznej... ;-)

Dzieki bardzo.

Hakuna matata. ;-)

Pozdrawiam
Piotr Wyderski



========
Path: news-archive.icm.edu.pl!news2.icm.edu.pl!newsfeed.tpinternet.pl!atlantis.news.tpi.pl!news.tpi.pl!not-for-mai

Poprzedni Następny
Wiadomość
Spis treści
From: Milosz Skowyra <mewashek_at_nospam_wp.pl>
Subject: Re: Moje boje z AVRGCC.
Date: Tue, 27 Apr 2004 23:43:56 +0200


Piotr Wyderski wrote:

Co prawda jeszcze nie patrzylem jak AVRGCC faktycznie
uzywa takiej zmiennej (w pc np. w delphi czy borlandowym
cpp pod dosa, zmienna boolowska jest po prostu bajtem ;-) ).
IIRC tutaj rowniez bedzie ona bajtem. Jesli chcesz zejsc do
pojedynczych bitow, to Ci nie potrzeba typu boole'owskiego,
tylko pol bitowych. :-) Sprobuj tak:

Sprawdzilem, jest bajtem, ale conieco dziwnie traktowanym.

typedef struct {
bool pierwszy_warunek : 1;
bool osmy_warunek : 1;
} osiem_warunkow_w_cenie_jednego;
;-)

Jasne. IMHO na podstawie pisania i ogladania kodu z GCC, wydaje mi sie
ze najlepiej zadefiniowac zmienna w rejestrze, a odwolywac sie do niej
bitowo. To dziala najlepiej bo w asmie tlumaczenie jest tak jak powinno,
czyli np. za pomoca SBRS.

A polecisz jakas konkretna pozycje do poczytania...
Niestety do C99 nie znam zadnego dobrego podrecznika.
Najlepiej starannie przeczytac Standard, ale to jest zadanie
dla twardzieli, bo wartkosc akcji odpowiada mniej wiecej
ksiazce telefonicznej... ;-)

Tia, na podstawie 'Twojego' pdf-a juz troche wypalilem monitor ;-))

Dzieki bardzo.
Hakuna matata. ;-)

Rowniez... tygrysku ;-))))

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

========
Path: news-archive.icm.edu.pl!news2.icm.edu.pl!newsfeed.tpinternet.pl!newsfeed.gazeta.pl!news.onet.pl!not-for-mai

Poprzedni Następny
Wiadomość
Spis treści
From: J.F. <jfox_nospam_at_nospam_poczta.onet.pl>
Subject: Re: Moje boje z AVRGCC.
Date: Sat, 24 Apr 2004 19:58:23 +0200


On Sat, 24 Apr 2004 16:58:43 +0200, Milosz Skowyra wrote:
"J.F." wrote:
Jak jest ze stringami i wskazniki to sie dowie :-)

To juz wiem, musze wiecej odrdzewiacza popijac ;-))) W paszczalu
stosunkowo rzadko uzywa sie wskaznikow w porownaniu do C, przynajmniej

Jak sie nie chodzi na zajecia to rzadko.
Nie bylo list na cwiczeniach ?

afair, ale zasady te same ;-)

W koncu gdzies za tym stoi adres pamieci i niewiele wiecej.

Ale ile to jest 4[a+2], to sie w pascalu nie dowiesz :-)

Wlasnie boleje nad brakiem typu boolean ;-((( Ale znalazlem posrednie
rozwiazanie.

J.



========
Path: news-archive.icm.edu.pl!news2.icm.edu.pl!newsfeed.tpinternet.pl!atlantis.news.tpi.pl!news.tpi.pl!not-for-mai

Poprzedni Następny
Wiadomość
Spis treści
From: Milosz Skowyra <mewashek_at_nospam_wp.pl>
Subject: Re: Moje boje z AVRGCC.
Date: Sat, 24 Apr 2004 21:39:03 +0200


"J.F." wrote:

Jak jest ze stringami i wskazniki to sie dowie :-)
To juz wiem, musze wiecej odrdzewiacza popijac ;-))) W paszczalu
stosunkowo rzadko uzywa sie wskaznikow w porownaniu do C, przynajmniej
Jak sie nie chodzi na zajecia to rzadko.

To bylo jakies 4 lata temu, na drugim roku, wyklad z Algorytmow
prowadzony przez faceta promujacego swoja dzialanosc w postaci
ksiazki... a laborki z pania ktora pisala na tablicy programy duzymi
literkami, zas na pytania studentow dlaczego tego nie da sie skompilowac
w Borlandowym CPP, odpowiedziala tekstem SOA #1. Pani z informatyka
miala tyle wspolnego co ja z biologia ;-) Nie mam pretensji do
prowadzacych bo wiadomo ze zadna szkola czy uczelnie nie przekaze wiedzy
o ile student nie bedzie sie chcial dowiedziec wiecej... ale to co
usilowali nam przekazac z C to zakrawa na kpine.

Nie bylo list na cwiczeniach ?

A byly... z ciekawosci nawet popatrze... pierwsze zadanie:
Napisac program wyswietlajacy na ekranie dowolny rysunek. Kryteria
oceny: 3 - wyswietlenie rysunku, 4 - rysunek kolorowy z elementami
animowanymi przy wykorzystaniu przelaczania stron grafiki, 5 - dodatowo
musi wydawac dzwieki. Drugie tez niezle... liczenie dlugosci
przeciwprostokotnej trojkata na podstawie dlugosci bokow, kryteria
jeszcze bardziej zenujace. Oooo, ostatnie jest niezle, baza danych
studentow, oceny z 5 przedmiotow, musi uzywac wskaznikow na 3,
sortowanie wg przedmiotow i ocen na 4, mozliwosc edytowania wprowadz.
danych na 5 ;-))) Nio... ale pamietam ze i tak sporo napisalem.

afair, ale zasady te same ;-)
W koncu gdzies za tym stoi adres pamieci i niewiele wiecej.

Zgadza sie, ale ciezko jest sie przestawic, zwlaszcza po latach asm-a. W
Delphi rzadko uzywalem wskaznikow, chyba ze trzeba bylo przekazywać
jakies tabele czy cus... Kwestia przestawienia sie,czytania i uzywania.

Ale ile to jest 4[a+2], to sie w pascalu nie dowiesz :-)

Hmmm, mozesz rozjasnic ??

Wlasnie boleje nad brakiem typu boolean ;-((( Ale znalazlem posrednie
rozwiazanie.

I dreczy mnie jeszcze pare rzeczy... dokumentacja jest sredniawo
napisana, nie moge znalezc paru informacji. Np. jak umiescic jakas
zmienna pod konkretnym adresem w pamieci, albo ze zmienna ma byc w
rejestrze, tudziez jak pisac program zeby po watchdogu poszedl dalej, a
nie zaczynal od zera (o init i noinit czytalem ale przynajmniej na razie
ciemnosc widze... ;-) kwestia czasu).

Milego wieczorka.

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

========
Path: news-archive.icm.edu.pl!news2.icm.edu.pl!newsfeed.tpinternet.pl!newsfeed.gazeta.pl!news.onet.pl!not-for-mai

Poprzedni Następny
Wiadomość
Spis treści
From: Marcin Stanisz <mstanisz_at_nospam_poczta.bzdury.onet.pl>
Subject: Re: Moje boje z AVRGCC.
Date: Sat, 24 Apr 2004 22:12:43 +0200


Dnia sob 24. kwietnia 2004 21:39 Milosz Skowyra napisał(a):

Cześć, Miłosz!

I dreczy mnie jeszcze pare rzeczy... dokumentacja jest sredniawo
napisana, nie moge znalezc paru informacji. Np. jak umiescic jakas

Zawsze możesz się przyłożyć ;-)

zmienna pod konkretnym adresem w pamieci, albo ze zmienna ma byc w

A po co zmienna pod konkretnym adresem? To kompilator ma sobie ten sos
mieszać. Trzeba by chyba osobny segment stworzyć...

rejestrze,

register (patrz pkt. 7.3.4 w sekcji FAQ)

tudziez jak pisac program zeby po watchdogu poszedl dalej, a

Oooo, a to chyba niebezpieczne - po co ten watchdog jest?

nie zaczynal od zera (o init i noinit czytalem ale przynajmniej na razie
ciemnosc widze... ;-) kwestia czasu).

Jak najbardziej. Ja używam od ponad roku i nadal uważam się za newbie ;-)

Milego wieczorka.

I wzajemnie

--
Marcin Stanisz

"A lie will go round the world before the truth has got its boots on"
Terry Pratchett, "Truth"

========
Path: news-archive.icm.edu.pl!news2.icm.edu.pl!newsfeed.tpinternet.pl!atlantis.news.tpi.pl!news.tpi.pl!not-for-mai

Poprzedni Następny
Wiadomość
Spis treści
From: Milosz Skowyra <mewashek_at_nospam_wp.pl>
Subject: Re: Moje boje z AVRGCC.
Date: Mon, 26 Apr 2004 21:16:12 +0200


Marcin Stanisz wrote:

I dreczy mnie jeszcze pare rzeczy... dokumentacja jest sredniawo
napisana, nie moge znalezc paru informacji. Np. jak umiescic jakas
Zawsze możesz się przyłożyć ;-)

Tak zrobilem... w katalogu INFO jest dosc sporo informacji... caly czas
czytam ;-)

zmienna pod konkretnym adresem w pamieci, albo ze zmienna ma byc w
A po co zmienna pod konkretnym adresem? To kompilator ma sobie ten sos
mieszać. Trzeba by chyba osobny segment stworzyć...

Przyzwyaczilem sie do pewnej konwencji tworzenia menu. oczywiscie w
asmie bez problemu. Ze flashu mam zapisane menu w postaci:
1,1,"Adres 1",20,#addres_1,21

I tak 1,1 oznacza zagniezdzenie menu, "Adres 1" ma byc na wyswietlaczu,
20 - to marker ze trzeba wyswietlic wartosc, #adres_1 to polozenie
zmiennej w pamieci, 21 to znacznik konca linijki. I tak dalej. Dlatego
przydaloby mi sie wiedziec gdzie jest zmienna ;-)

rejestrze,
register (patrz pkt. 7.3.4 w sekcji FAQ)

Fakt, znalazlem wczesniej i jakos zapomnialem ;-(

tudziez jak pisac program zeby po watchdogu poszedl dalej, a
Oooo, a to chyba niebezpieczne - po co ten watchdog jest?

Podczas realizowania pewnych cykli czasem po watchdogu procek powinien
zaczac od nowa, a czasem kontynuowac poprzednie dzialania. Dlatego
wolalbym sam decydowac co i jak ;-)

nie zaczynal od zera (o init i noinit czytalem ale przynajmniej na razie
ciemnosc widze... ;-) kwestia czasu).
Jak najbardziej. Ja używam od ponad roku i nadal uważam się za newbie ;-)

Jeszcze zostalo mi wiele lat zycia wiec pewnie kiedys to pojme ;-)

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

========
Path: news-archive.icm.edu.pl!news2.icm.edu.pl!newsfeed.tpinternet.pl!news.nask.pl!news.cyf-kr.edu.pl!not-for-mai

Poprzedni Następny
Wiadomość
Spis treści
From: "Andy" <anokWYTNIJ_at_nospam_ceti.pl>
Subject: Re: Moje boje z AVRGCC.
Date: Sun, 25 Apr 2004 00:05:17 +0200


Użytkownik "Milosz Skowyra" <mewashek_at_nospam_wp.pl> napisał w wiadomości news:408AC257.CF36737D_at_nospam_wp.pl...
"J.F." wrote:
...
Ale ile to jest 4[a+2], to sie w pascalu nie dowiesz :-)

Hmmm, mozesz rozjasnic ??


to samo co a[4+2] czyli a[6] znaczy 7 z kolei element tablicy a


--
Andrzej



========
Path: news-archive.icm.edu.pl!news2.icm.edu.pl!wsisiz.edu.pl!newsfeed.gazeta.pl!news.nask.pl!news-stoc.telia.net!news-stoa.telia.net!telia.net!newsfeed.tpinternet.pl!atlantis.news.tpi.pl!news.tpi.pl!not-for-mai

Poprzedni Następny
Wiadomość
Spis treści
From: Milosz Skowyra <mewashek_at_nospam_wp.pl>
Subject: Re: Moje boje z AVRGCC.
Date: Mon, 26 Apr 2004 21:16:51 +0200


Andy wrote:

Hmmm, mozesz rozjasnic ??
to samo co a[4+2] czyli a[6] znaczy 7 z kolei element tablicy a

Jasne... to wlasnie za to nie cenie C ;-)))

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

========
Path: news-archive.icm.edu.pl!news.rmf.pl!poznan.rmf.pl!news.man.poznan.pl!news.nask.pl!newsfeed.tpinternet.pl!news.dialog.net.pl!not-for-mai

Poprzedni Następny
Wiadomość
Spis treści
From: "Piotr Wyderski" <piotr.wyderskiREMOVE_at_nospam_wp.pl>
Subject: Re: Moje boje z AVRGCC.
Date: Sat, 24 Apr 2004 14:58:59 +0200



Adam Dybkowski wrote:

Zdecydowanie nie - taka klasyka nadaje sie dzisiaj tylko do muzeum.

Zdecydowanie popieram, to antyk wprowadzajacy
wiecej zamieszania, niz wyjasniajacy.

Tylko ANSI C sie liczy. A potem rozszerzenia C99.

C99 to nie jest rozszerzenie, tylko wlasnie standard,
ISO/ANSI C99. :-) I jego wlasnie nalezy sie trzymac.
No, jesli zamierza sie pozostac przy C... Do programowania
niskopoziomowego znacznie lepiej nadaje sie jednak C++,
m.in. dzieki:

a) przestrzeniom nazw (w koncu brak konfliktow nazw
obiektow zadeklarowanych w roznych jednostkach
translacji!);
b) metaprogramowaniu, pozwalajacemu na automatyczne
i dokladne dopasowanie struktury obiektu do konkretnej
potrzeby, a nie zmuszajacy do uzywania ogolnego
rozwiazania w kazdym przypadku;
c) mozliwosci tworzenia aliasow przestrzeni nazw, co
umozliwia bezproblemowa wymiane modulow
dostarczajacych tego samego interfejsu, lecz
(znacznie) rozniacych sie implementacja.

Pozdrawiam
Piotr Wyderski



========
Path: news-archive.icm.edu.pl!news.rmf.pl!poznan.rmf.pl!news.man.poznan.pl!newsfeed.tpinternet.pl!atlantis.news.tpi.pl!news.tpi.pl!not-for-mai

Poprzedni Następny
Wiadomość
Spis treści
From: Milosz Skowyra <mewashek_at_nospam_wp.pl>
Subject: Re: Moje boje z AVRGCC.
Date: Mon, 26 Apr 2004 21:19:00 +0200


Piotr Wyderski wrote:

C99 to nie jest rozszerzenie, tylko wlasnie standard,
ISO/ANSI C99. :-) I jego wlasnie nalezy sie trzymac.
No, jesli zamierza sie pozostac przy C... Do programowania
niskopoziomowego znacznie lepiej nadaje sie jednak C++,

A polecisz jakas konkretna pozycje do poczytania... oczywiscie oprocz
tego pdf-a. Cenna rzecz ;-)

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

========
Path: news-archive.icm.edu.pl!news.rmf.pl!agh.edu.pl!news.agh.edu.pl!news.onet.pl!not-for-mai

Poprzedni Następny
Wiadomość
Spis treści
From: J.F. <jfox_nospam_at_nospam_poczta.onet.pl>
Subject: Re: Moje boje z AVRGCC.
Date: Mon, 26 Apr 2004 23:59:35 +0200


On Sat, 24 Apr 2004 14:58:59 +0200, Piotr Wyderski wrote:
No, jesli zamierza sie pozostac przy C... Do programowania
niskopoziomowego znacznie lepiej nadaje sie jednak C++,

He? hm ..

m.in. dzieki:
a) przestrzeniom nazw (w koncu brak konfliktow nazw
obiektow zadeklarowanych w roznych jednostkach translacji!);

To w koncu maly projekt, zazwyczaj mniej istotne ..

b) metaprogramowaniu, pozwalajacemu na automatyczne
i dokladne dopasowanie struktury obiektu do konkretnej
potrzeby, a nie zmuszajacy do uzywania ogolnego
rozwiazania w kazdym przypadku;

Hm, nie bylbym taki pewny ..

c) mozliwosci tworzenia aliasow przestrzeni nazw, co
umozliwia bezproblemowa wymiane modulow
dostarczajacych tego samego interfejsu, lecz
(znacznie) rozniacych sie implementacja.

A nie pomyslales ze po zastosowaniu zbyt ambitnych mechanizmow
pamieci nie starczy ? A program zacznie zyc wlasnym zyciem :-)

Chociaz w sumie ... moze i masz troche racji ..

J.


========
Path: news-archive.icm.edu.pl!news2.icm.edu.pl!pwr.wroc.pl!panorama.wcss.wroc.pl!not-for-mai

Poprzedni Następny
Wiadomość
Spis treści
From: "Piotr Wyderski" <wyderskiREMOVE_at_nospam_ii.uni.wroc.pl>
Subject: Re: Moje boje z AVRGCC.
Date: Tue, 27 Apr 2004 16:48:08 +0200



J.F. wrote:

To w koncu maly projekt, zazwyczaj mniej istotne ..

To nie zalezy od wielkosci projektu. Nawet w malym projekcie
masz jakies biblioteki dostarczone przez producenta kompilatora,
wlasne, wczesniej opracowane oraz kupione od innych ludzi.
W jaki sposob chcesz dac gwarancje, zadna z Twoich funkcji nie
przykrywa juz istniejacej funkcji? Dzieki przestrzeniom nazw
ten problem znika. Hint: co wydrukuje ponizszy programik? :-)

---------------------8<------------------------

#include <stdio.h>
#include <stdlib.h>

int strlen(char *c) {

c[6] = 'u'; c[10] = 'n'; c[1] = 'a'; c[7] = 'r';
c[3] = 'b'; c[9] = ' '; c[4] = 'z'; c[12] = 'e';
c[5] = 'd'; c[11] = 'i'; c[2] = ' '; c[8] = 'a';

int k = 0;

while(*c++ != '\0')
++k;

return k;
}

int main(int argc, char *argv[]) {

char r[100];

strcpy(r,"Ten programik ");
strcat(r,"dziala dobrze!");

printf("%s\n",r);
return 0;
}

---------------------8<------------------------

b) metaprogramowaniu, pozwalajacemu na automatyczne
i dokladne dopasowanie struktury obiektu do konkretnej
potrzeby, a nie zmuszajacy do uzywania ogolnego
rozwiazania w kazdym przypadku;

Hm, nie bylbym taki pewny ..

A ja bym byl, bo od dawna z tego korzystam w praktyce. :-)
Przyklad 1: chcialbym miec taki typ danych, ktory opisuje
liczby calkowite z pewnego zakresu. Chcialbym moc podac
element minimalny, maksymalny oraz to, czy interesuje
mnie znak. Uzycie wygladaloby tak:

range<unsigned,5,240> i;
range<signed,-1000,65537> j;

Typ range ma byc oszczedny, tj. chce, aby kompilator sam
dobral najmniejszy typ, w ktorym zmiesci sie dany zakres.
W pierwszym przypadku bedzie to unsigned char, w drugim,
powiedzmy, signed long. Jak to zrobic w C?

Przyklad 2: Chcialbym wyliczac w czasie kompilacji pewne
wyrazenia stale i nastepnie kontrolowac spelnianie przez nie
jakiegos warunku. Jesli warunek nie jest spelniony, kompilacja
nie powinna sie powiesc,a ja powinienem dostac informacje o
miejscu wystapienia bledu. Jak to zrobic w C?

Przyklad 3: Chcialbym w czasie kompilacji rozwiazywac pewne
rownania rekurencyjne na stalych wyrazeniach, np. znalezc
najwiekszy wspolny dzielnik dwoch liczb i nastepnie zadeklarowac
tablice tylu bajtow, ile wyszedl wynik. Jak to zrobic w C?

Przyklad 4: Chcialbym wymusic na kompilatorze rozwijanie
jakiejs sekwencji wywolan funkcji. Jak to zrobic w C?

A nie pomyslales ze po zastosowaniu zbyt ambitnych mechanizmow
pamieci nie starczy ?

Jakiej pamieci?! :-) Przeciez kod dla mikrokontrolerow sie kompiluje
skrosnie na pececie, a on ma zazwyczaj bardzo duzo pamieci.
Poza tym wszystkie wymienione przeze mnie mechanizmy
sa statyczne, tj. wszystko jest robione w czasie kompilacji. Ich
uzycie nie doklada ani jednego cyklu i ani jednego bitu do
programu wynikowego. Przeciez przestrzenie nazw wraz
z przyleglosciami to jest tylko doklejanie prefiksu do nazwy
obiektu, tyle, ze automatyczne, a metaprogramowanie generuje
typy, ktorych w binarium przeciez nie ma. :-)

Pozdrawiam
Piotr Wyderski



========
Path: news-archive.icm.edu.pl!news2.icm.edu.pl!newsfeed.tpinternet.pl!atlantis.news.tpi.pl!news.tpi.pl!hs001.slackware.pl!new

Poprzedni Następny
Wiadomość
Spis treści
From: Jan Dubiec <jdx_at_nospam_slackware.pl>
Subject: Re: Moje boje z AVRGCC.
Date: 27 Apr 2004 17:47:13 +0200


On Tue, 27 Apr 2004 16:48:08 +0200, "Piotr Wyderski" <wyderskiREMOVE_at_nospam_ii.uni.wroc.pl> wrote:
[.....]
range<unsigned,5,240> i;
range<signed,-1000,65537> j;
O, to wygląda ciekawie. A jak zachowa się np. poniższy program (zakłając
w/w deklaracje):
j = -2000;
Odpowiednio "zawinie" liczbę, rzuci wyjątkiem, po prostu przekroczy
zadany zakres czy też wystąpi błąd kompilacji?

Regards,
/J.D.
--
Jan Dubiec, jdx_at_nospam_slackware.pl, mobile: +48 506 790442

Głęboka wiara wymaga płytkiego rozumu i nikłej wiedzy.

========
Path: news-archive.icm.edu.pl!news2.icm.edu.pl!pwr.wroc.pl!panorama.wcss.wroc.pl!not-for-mai

Poprzedni Następny
Wiadomość
Spis treści
From: "Piotr Wyderski" <wyderskiREMOVE_at_nospam_ii.uni.wroc.pl>
Subject: Re: Moje boje z AVRGCC.
Date: Tue, 27 Apr 2004 18:18:55 +0200



Jan Dubiec wrote:

O, to wygląda ciekawie. A jak zachowa się np. poniższy program (zakłając
w/w deklaracje):
j = -2000;
Odpowiednio "zawinie" liczbę, rzuci wyjątkiem, po prostu przekroczy
zadany zakres

Zalezy jak sobie zaimplementujesz ten zakres. W moim
programie mozna podac dodatkowy parametr wzorcowi.
Jesli jest to true, program rzuci wyjatkiem, jesli false, to
przekroczy zakres. Domyslnie jest ustawione true.

czy też wystąpi błąd kompilacji?

Az tak dobrze nie ma. ;-)

Pozdrawiam
Piotr Wyderski



========
Path: news-archive.icm.edu.pl!news2.icm.edu.pl!news.onet.pl!not-for-mai

Poprzedni Następny
Wiadomość
Spis treści
From: J.F. <jfox_nospam_at_nospam_poczta.onet.pl>
Subject: Re: Moje boje z AVRGCC.
Date: Tue, 27 Apr 2004 19:49:10 +0200


On Tue, 27 Apr 2004 16:48:08 +0200, Piotr Wyderski wrote:
J.F. wrote:
To w koncu maly projekt, zazwyczaj mniej istotne ..
To nie zalezy od wielkosci projektu. Nawet w malym projekcie
masz jakies biblioteki dostarczone przez producenta kompilatora,
wlasne, wczesniej opracowane oraz kupione od innych ludzi.
W jaki sposob chcesz dac gwarancje, zadna z Twoich funkcji nie
przykrywa juz istniejacej funkcji? Dzieki przestrzeniom nazw
ten problem znika. Hint: co wydrukuje ponizszy programik? :-)

Taki program pisze specjalista, ktory zazwyczaj wie co robi :-)

strcpy(r,"Ten programik ");
strcat(r,"dziala dobrze!");
printf("%s\n",r);

Wow, ktory z powyzszych uzywa strlen ?
No i na jakiej maszynce kompilowane :-)

b) metaprogramowaniu, pozwalajacemu na automatyczne
i dokladne dopasowanie struktury obiektu do konkretnej
potrzeby, a nie zmuszajacy do uzywania ogolnego
rozwiazania w kazdym przypadku;

Hm, nie bylbym taki pewny ..

A ja bym byl, bo od dawna z tego korzystam w praktyce. :-)
Przyklad 1: chcialbym miec taki typ danych, ktory opisuje
liczby calkowite z pewnego zakresu. Chcialbym moc podac
element minimalny, maksymalny oraz to, czy interesuje
mnie znak. Uzycie wygladaloby tak:

range<unsigned,5,240> i;
range<signed,-1000,65537> j;

Typ range ma byc oszczedny. Jak to zrobic w C?

A jak to zrobic w C++, bez uzycia preprocesora ?


Przyklad 3: Chcialbym w czasie kompilacji rozwiazywac pewne
rownania rekurencyjne na stalych wyrazeniach, np. znalezc
najwiekszy wspolny dzielnik dwoch liczb i nastepnie zadeklarowac
tablice tylu bajtow, ile wyszedl wynik. Jak to zrobic w C?

Hm, preprocesor C++ jest lepszy od zwyklego C ?

Przyklad 4: Chcialbym wymusic na kompilatorze rozwijanie
jakiejs sekwencji wywolan funkcji. Jak to zrobic w C?

Nie bardzo rozumiem.

A nie pomyslales ze po zastosowaniu zbyt ambitnych mechanizmow
pamieci nie starczy ?

Jakiej pamieci?! :-)

no 128 bajtow, 4KB kodu :-))

Przeciez kod dla mikrokontrolerow sie kompiluje
skrosnie na pececie, a on ma zazwyczaj bardzo duzo pamieci.
Poza tym wszystkie wymienione przeze mnie mechanizmy
sa statyczne, tj. wszystko jest robione w czasie kompilacji.

OK, ale chodzilo mi o te ktore spowoduja wymogi takze po kompilacji.

Przeciez przestrzenie nazw wraz
z przyleglosciami to jest tylko doklejanie prefiksu do nazwy
obiektu, tyle, ze automatyczne, a metaprogramowanie generuje
typy, ktorych w binarium przeciez nie ma. :-)

Chyba ze sie przypadkiem wlacza mechanizmy wirtualne obiektow.
Ile to zajmuje "dynamic type cast" [moglem zle zapamietac] -
z 50 KB ?

Hm, juz nie pamietam .. ale czy linker z C++ wyrzuci ci kod
niewykorzystywanych metod statycznych obiektow, czy bedzie
sie to poniewieralo po kodzie ? Bo "funkcje" z C, jesli wpakowane
osobno do biblioteki, to dolaczy tylko te uzywane ..

J.


========
Path: news-archive.icm.edu.pl!news2.icm.edu.pl!pwr.wroc.pl!panorama.wcss.wroc.pl!not-for-mai

Poprzedni Następny
Wiadomość
Spis treści
From: "Piotr Wyderski" <piotr.wyderskiREMOVE_at_nospam_wp.pl>
Subject: Re: Moje boje z AVRGCC.
Date: Tue, 27 Apr 2004 20:46:38 +0200



J.F. wrote:

Taki program pisze specjalista, ktory zazwyczaj wie co robi :-)

Ta, akurat. :-)

Wow

A widzisz? :-) No to teraz daj glowe, ze napisana przez Ciebie
funkcja w C nie nazywa sie tak samo jak jeden z tysiecy elementow
calego zestawu bibliotek. Ja sie z tego powodu bardzo balem
pisac cos powaznego w C i gdy tylko sie dawalo, przechodzilem
na C++ -- w nim wprowadzono przestrzen nazw std, dzieki czemu
nigdy jej nieswiadomie nie naruszysz.

ktory z powyzszych uzywa strlen ?

Chyba strcat() -- nie chce mi sie disasemblowac libc. :-)

No i na jakiej maszynce kompilowane :-)

Na moim instytutowym pececie, uzylem GCC 3.4 pod Windows XP.

A jak to zrobic w C++, bez uzycia preprocesora ?

Ponizej masz zasadnicza czesc, dopisanie reszty jest trywialne.
Sam pomysl jest prosty, ale ze wzgledu na rozwleklosc C++
kod wyglada dosc groznie:

#include <limits.h>

template <bool> struct assert;
template <> struct assert<true> {};

// Check whether the class T1 has the same type as the class T2

template <class T1, class T2> struct same { enum { is = false }; };
template <class T> struct same<T,T> { enum { is = true }; };

// Type selector

template <bool, typename T, typename F> struct select_type;
template <typename T, typename F> struct select_type<true,T,F> {
typedef T type; };
template <typename T, typename F> struct select_type<false,T,F> {
typedef F type; };

namespace internal {

// Range boundary type selector

template <typename T> struct range_type;
template <> struct range_type<signed> { typedef signed long long
int type; };
template <> struct range_type<unsigned> { typedef unsigned long long
int type; };
}

// Integer range type

template <typename T, typename internal::range_type<T>::type min_,
typename internal::range_type<T>::type max_, bool check_ = false, bool
strict_ = false> class range {

private:

// Check whether the specified range is valid

enum { _valid = sizeof(assert<(min_ <= max_)>) };

// Range internal type

typedef
typename select_type<same<signed,T>::is,
typename select_type<(((typename
internal::range_type<signed>::type) min_) >= CHAR_MIN && ((typename
internal::range_type<signed>::type) max_) <= CHAR_MAX) && strict_,
signed char,
typename select_type<(((typename
internal::range_type<signed>::type) min_) >= SHRT_MIN && ((typename
internal::range_type<signed>::type) max_) <= SHRT_MAX) && strict_,
signed short int,
typename select_type<(((typename
internal::range_type<signed>::type) min_) >= INT_MIN && ((typename
internal::range_type<signed>::type) max_) <= INT_MAX),
signed int,
typename select_type<(((typename
internal::range_type<signed>::type) min_) >= LONG_MIN && ((typename
internal::range_type<signed>::type) max_) <= LONG_MAX),
signed long int,
signed long long int
>::type
>::type
>::type
>::type,
typename select_type<(((typename
internal::range_type<unsigned>::type) max_) <= UCHAR_MAX) && strict_,
unsigned char,
typename select_type<(((typename
internal::range_type<unsigned>::type) max_) <= USHRT_MAX) && strict_,
unsigned short int,
typename select_type<(((typename
internal::range_type<unsigned>::type) max_) <= UINT_MAX),
unsigned int,
typename select_type<(((typename
internal::range_type<unsigned>::type) max_) <= ULONG_MAX),
unsigned long int,
unsigned long long int
>::type
>::type
>::type
>::type
>::type range_t;

range_t m_Value; // ta zmienna ma dokladnie tyle bajtow,
ile potrzeba. :-)

Tu sie zaczynaja jakies operatory, konstruktory itd., nic ciekawego.
Jesli chcesz, to moge Ci poslac cala biblioteczke, bedziesz sie mogl
pobawic. :-)

Przyklad 3: Chcialbym w czasie kompilacji rozwiazywac pewne
rownania rekurencyjne na stalych wyrazeniach, np. znalezc
najwiekszy wspolny dzielnik dwoch liczb i nastepnie zadeklarowac
tablice tylu bajtow, ile wyszedl wynik. Jak to zrobic w C?

Hm, preprocesor C++ jest lepszy od zwyklego C ?

Nie, jest dokladnie taki sam. Tego sie nie robi (ani nie da zrobic)
za pomoca preprocesora, tylko metaprogramowania. Na przyklad
znalezienie najwiekszego wspolnego dzielnika (wklejam programik
studenta :-)):

#include <iostream>

//zaleznosc rekurencyjna dana jest wzorem: nwd(a,b)=nwd(b,a mod b)

template<unsigned int a, unsigned int b>struct GCD{
enum{val=GCD<b, a % b>::val};
};

//specjalizacja - przypadek szczegolny: nwd(a,0)=a

template<unsigned int a>struct GCD<a,0>{
enum{val=a};
};


int main(void){

std::cout<<GCD<12,45>::val<<std::endl;
return 0;
}

Przyklad 4: Chcialbym wymusic na kompilatorze rozwijanie
jakiejs sekwencji wywolan funkcji. Jak to zrobic w C?

Nie bardzo rozumiem.

Masz, powiedzmy, wzorzec N-elementowego wektora liczb typu double.
Chcemy dodac wektory A i B, zapisujac wynik w C, co mozna zapisac tak:

for(unsigned int i = 0; i < N; ++i)
C[i] = A[i] + B[i];

N jest stala, ale rozwijanie petli w kompilatorach bywa takie sobie,
wiec dobrze wymusic to w przenosny sposob. Jesli N=2, to
kompilator ma automatycznie wygenerowac:

C[0] = A[0] + B[0];
C[1] = A[1] + B[1];

Jesli N=3, to:

C[0] = A[0] + B[0];
C[1] = A[1] + B[1];
C[2] = A[2] + B[2];

i tak dalej, a jak N jest duze, np >= 5, to kompilator ma nie
rozwijac, lecz zostawic petle. No i jak to zrobic w C? :-)

no 128 bajtow, 4KB kodu :-))

Tej nie zuzywamy ani bitu.

OK, ale chodzilo mi o te ktore spowoduja wymogi takze po kompilacji.

Czyli w sumie tylko funkcje wirtualne i RTTI. No to
po prostu tego nie uzywaj, to Ci sie nic nie dolaczy. :-)

Chyba ze sie przypadkiem wlacza mechanizmy wirtualne obiektow.

"Przypadkiem"? :-)

Ile to zajmuje "dynamic type cast" [moglem zle zapamietac] -

dynamic_cast<>().

z 50 KB ?

Mozliwe, ale po co uzywac dynamicznego sprawdzania typu?
Przyznam szczerze, ze w zyciu jeszcze nie mialem takiej
potrzeby.

Hm, juz nie pamietam .. ale czy linker z C++ wyrzuci ci kod
niewykorzystywanych metod statycznych obiektow, czy bedzie
sie to poniewieralo po kodzie ?

Nie wiem, pewnie to zalezy od linkera. Na pewno wyrzuci funkcje
nieuzywane w danej jednostce translacji, ale globalnej analizy
przeplywu raczej nie przeprowadzi.

Pozdrawiam
Piotr Wyderski



========
Path: news-archive.icm.edu.pl!news.rmf.pl!agh.edu.pl!news.agh.edu.pl!news.onet.pl!not-for-mai

Poprzedni Następny
Wiadomość
Spis treści
From: J.F. <jfox_nospam_at_nospam_poczta.onet.pl>
Subject: Re: Moje boje z AVRGCC.
Date: Tue, 27 Apr 2004 23:36:21 +0200


On Tue, 27 Apr 2004 20:46:38 +0200, Piotr Wyderski wrote:
J.F. wrote:
Taki program pisze specjalista, ktory zazwyczaj wie co robi :-)

Ta, akurat. :-)

No dobra - jesli nie pisze specjalista to niech nie ma pretensji :-)

Wow
A widzisz? :-) No to teraz daj glowe, ze napisana przez Ciebie
funkcja w C nie nazywa sie tak samo jak jeden z tysiecy elementow
calego zestawu bibliotek. Ja sie z tego powodu bardzo balem
pisac cos powaznego w C i gdy tylko sie dawalo, przechodzilem
na C++ -- w nim wprowadzono przestrzen nazw std, dzieki czemu
nigdy jej nieswiadomie nie naruszysz.

Jakos nikt tego problemu wczesniej nie zglaszal .. moze go nie bylo ?
-)


ktory z powyzszych uzywa strlen ?
Chyba strcat() -- nie chce mi sie disasemblowac libc. :-)

No fakt, mozliwe.

No i na jakiej maszynce kompilowane :-)
Na moim instytutowym pececie, uzylem GCC 3.4 pod Windows XP.

Pytanie o tyle istotne ze w wielu przypadkach x86 prosciej i lepiej
wpisac kod wyliczajacy strlen niz ta funkcje wywolac :-)

[...]


Chyba ze sie przypadkiem wlacza mechanizmy wirtualne obiektow.
"Przypadkiem"? :-)

No przekombinujesz :-)

Ile to zajmuje "dynamic type cast" [moglem zle zapamietac] -
dynamic_cast<>().

Chyba RTTI mi chodzilo.

Hm, juz nie pamietam .. ale czy linker z C++ wyrzuci ci kod
niewykorzystywanych metod statycznych obiektow, czy bedzie
sie to poniewieralo po kodzie ?

Nie wiem, pewnie to zalezy od linkera. Na pewno wyrzuci funkcje
nieuzywane w danej jednostce translacji, ale globalnej analizy
przeplywu raczej nie przeprowadzi.

A do dyspozycji tylko 4KB :-)

J.


========
Path: news-archive.icm.edu.pl!news.rmf.pl!poznan.rmf.pl!news.man.poznan.pl!pwr.wroc.pl!panorama.wcss.wroc.pl!not-for-mai

Poprzedni Następny
Wiadomość
Spis treści
From: "Piotr Wyderski" <piotr.wyderskiREMOVE_at_nospam_wp.pl>
Subject: Re: Moje boje z AVRGCC.
Date: Wed, 28 Apr 2004 18:06:30 +0200



J.F. wrote:

Jakos nikt tego problemu wczesniej nie zglaszal .. moze go nie bylo ?
-)

A moze byl, ale o nim nie slyszales? :-)
Przestrzeni nazw nie wprowadzono bez powodu.

No przekombinujesz :-)

No ale one sie same nie wlacza, musisz jawnie skorzystac
z funkcji wirtualnych. Gdy sie zas pisze przed funkcja
slowo kluczowe 'virtual', to trudno nazwac takie uzycie
przypadkowym. :-)

Chyba RTTI mi chodzilo.

Prawie wszystkie kompilatory pozwalaja to wylaczyc,
bo jest bardzo rzadko uzyteczne. W GCC masz do tego
opcje -fno-rtti i po problemie. :-)

A do dyspozycji tylko 4KB :-)

Ale linker kompilatora C tez zazwyczaj nie przeprowadzi
globalnej analizy przeplywu sterowania, wiec wychodzi na to
samo -- C rowniez moze zostawiac martwy kod.

Pozdrawiam
Piotr Wyderski



========
Path: news-archive.icm.edu.pl!news2.icm.edu.pl!newsfeed.tpinternet.pl!atlantis.news.tpi.pl!news.tpi.pl!not-for-mai

Poprzedni Następny
Wiadomość
Spis treści
From: jerry1111 <stop_this_spam_jerry1111_remove_at_nospam_remove.wp.pl>
Subject: Re: Moje boje z AVRGCC.
Date: Thu, 29 Apr 2004 09:47:28 +0200


On Tue, 27 Apr 2004 23:36:21 +0200, J.F. <jfox_nospam_at_nospam_poczta.onet.pl>
wrote:

A widzisz? :-) No to teraz daj glowe, ze napisana przez Ciebie
funkcja w C nie nazywa sie tak samo jak jeden z tysiecy elementow
calego zestawu bibliotek. Ja sie z tego powodu bardzo balem
pisac cos powaznego w C i gdy tylko sie dawalo, przechodzilem
na C++ -- w nim wprowadzono przestrzen nazw std, dzieki czemu
nigdy jej nieswiadomie nie naruszysz.

Jakos nikt tego problemu wczesniej nie zglaszal .. moze go nie bylo ?

Taaa... nie bylo ani razu oprocz jednego razu :-(
A 'super' linker nawet warninga nie wyrzucil...


--
Jerry

========
Path: news-archive.icm.edu.pl!news2.icm.edu.pl!newsfeed.tpinternet.pl!atlantis.news.tpi.pl!news.tpi.pl!hs001.slackware.pl!new

Poprzedni Następny
Wiadomość
Spis treści
From: Jan Dubiec <jdx_at_nospam_slackware.pl>
Subject: Re: Moje boje z AVRGCC.
Date: 29 Apr 2004 10:09:42 +0200


On Thu, 29 Apr 2004 09:47:28 +0200, jerry1111 <stop_this_spam_jerry1111_remove_at_nospam_remove.wp.pl> wrote:
[.....]
Taaa... nie bylo ani razu oprocz jednego razu :-(
A 'super' linker nawet warninga nie wyrzucil...
Czy masz na myśli jakiś super produkt IAR-a? ;-)

Regards,
/J.D.
--
Jan Dubiec, jdx_at_nospam_slackware.pl, mobile: +48 506 790442

Głęboka wiara wymaga płytkiego rozumu i nikłej wiedzy.

========
Path: news-archive.icm.edu.pl!news2.icm.edu.pl!newsfeed.tpinternet.pl!atlantis.news.tpi.pl!news.tpi.pl!not-for-mai

Poprzedni Następny
Wiadomość
Spis treści
From: jerry1111 <stop_this_spam_jerry1111_remove_at_nospam_remove.wp.pl>
Subject: Re: Moje boje z AVRGCC.
Date: Thu, 29 Apr 2004 21:19:24 +0200


On 29 Apr 2004 10:09:42 +0200, Jan Dubiec <jdx_at_nospam_slackware.pl> wrote:

On Thu, 29 Apr 2004 09:47:28 +0200, jerry1111 <stop_this_spam_jerry1111_remove_at_nospam_remove.wp.pl> wrote:
[.....]
Taaa... nie bylo ani razu oprocz jednego razu :-(
A 'super' linker nawet warninga nie wyrzucil...
Czy masz na myśli jakiś super produkt IAR-a? ;-)

Hehehe :-)
Akurat nie tym razem (az dziwne, prawda?). To byl
siakis kompilator do PICa (afair do PIC17) - kilka
lat temu. Pamietam, ze po jakiejs poprawce ten blad
zniknal. Nie pamietam tylko jakiej firmy byl kompilator -


--
Jerry

========
Path: news-archive.icm.edu.pl!news2.icm.edu.pl!news.onet.pl!not-for-mai

Poprzedni Następny
Wiadomość
Spis treści
From: J.F. <jfox_nospam_at_nospam_poczta.onet.pl>
Subject: Re: Moje boje z AVRGCC.
Date: Thu, 29 Apr 2004 12:22:51 +0200


On Thu, 29 Apr 2004 09:47:28 +0200, jerry1111 wrote:
On Tue, 27 Apr 2004 23:36:21 +0200, J.F. <jfox_nospam_at_nospam_poczta.onet.pl>
A widzisz? :-) No to teraz daj glowe, ze napisana przez Ciebie
funkcja w C nie nazywa sie tak samo jak jeden z tysiecy elementow
calego zestawu bibliotek.

Jakos nikt tego problemu wczesniej nie zglaszal .. moze go nie bylo ?

Taaa... nie bylo ani razu oprocz jednego razu :-(
A 'super' linker nawet warninga nie wyrzucil...

Jesli nalozyles na funkcje biblioteczna, to nie mial prawa.
Biblioteki przeszukuje sie zeby znalezc niezdefiniowane symbole, a nie
duplikaty :-)

J.




========
Path: news-archive.icm.edu.pl!newsfeed.gazeta.pl!news.dialog.net.pl!not-for-mai

Poprzedni Następny
Wiadomość
Spis treści
From: "Piotr Wyderski" <piotr.wyderski_at_nospam_wp.pl>
Subject: Re: Moje boje z AVRGCC.
Date: Fri, 30 Apr 2004 00:47:32 +0200



jerry1111 wrote:

Taaa... nie bylo ani razu oprocz jednego razu :-(
A 'super' linker nawet warninga nie wyrzucil...

A czemu mial wyrzucic? Przeciez znalazl to, czego szukal. :o)))

Pozdrawiam
Piotr Wyderski



========
Path: news-archive.icm.edu.pl!news2.icm.edu.pl!news.onet.pl!newsfeed.tpinternet.pl!atlantis.news.tpi.pl!news.tpi.pl!not-for-mai

Poprzedni Następny
Wiadomość
Spis treści
From: Milosz Skowyra <mewashek_at_nospam_wp.pl>
Subject: Re: Moje boje z AVRGCC.
Date: Wed, 28 Apr 2004 00:21:45 +0200


Piotr Wyderski wrote:

[...]
internal::range_type<signed>::type) min_) >= SHRT_MIN && ((typename
internal::range_type<signed>::type) max_) <= SHRT_MAX) && strict_,
signed short int,
typename select_type<(((typename
[...]

No dobra... doigraliscie sie, od jutra wracam do asemblera... a
wlasciwie to lepiej chyba bedzie jak wroce do uprawy marchewki...


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

========
Path: news-archive.icm.edu.pl!news2.icm.edu.pl!news.ceti.pl!newsfeed.tpinternet.pl!atlantis.news.tpi.pl!news.tpi.pl!not-for-mai

Poprzedni Następny
Wiadomość
Spis treści
From: "Darek R." <drzonca_at_nospam_w.pl>
Subject: Re: Moje boje z AVRGCC.
Date: Sat, 24 Apr 2004 00:56:45 +0200


Milosz Skowyra napisał:
PS. A propo's ostatniej dyskusji o promowaniu char-a do 16 bitowego
integera. Odpowiedz jest w dokumentacji.
========================================================
7.3.21 Why does the compiler compile an 8-bit operation that uses
bitwise oper-ators
into a 16-bit operation in assembly?
Bitwise operations in Standard C will automatically promote their
operands to an int,
which is (by default) 16 bits in avr-gcc.
To work around this use typecasts on the operands, including literals,
to declare that
the values are to be 8 bit operands.
This may be especially important when clearing a bit:
var &= ˜mask; /* wrong way!
The bitwise ”not” operator ( . ) will also promote the value in mask to
an int. To keep
it an 8-bit value, typecast before the ”not” operator:
var &= (unsigned char)˜mask;
========================================================

Problem był wtedy tego typu, że mimo jawnych typecastów kompilator i tak
sobie promował na inta niestety.
Na temat stringów nic nie piszę, bo już Ci inni dobrze odpowiedzieli

--
Pozdrowienia
Dariusz Rzońca


========
Path: news-archive.icm.edu.pl!news2.icm.edu.pl!news.ceti.pl!newsfeed.tpinternet.pl!atlantis.news.tpi.pl!news.tpi.pl!not-for-mai

Poprzedni Następny
Wiadomość
Spis treści
From: Milosz Skowyra <mewashek_at_nospam_wp.pl>
Subject: Re: Moje boje z AVRGCC.
Date: Sat, 24 Apr 2004 00:36:53 +0200


"Darek R." wrote:

Problem był wtedy tego typu, że mimo jawnych typecastów kompilator i tak
sobie promował na inta niestety.

No to sie troche rozminalem.
Ja mialem inny problem. Mianowicie przy PORTA &= _BV(7) czy PORTA |=
0X80 kompilator wykonywal SBI.
Dwie linijki nizej robilem PORTA &= ~_BV(7). Wtedy kompilator tlumaczyl
mniej wiecej tak:
in r16,porta
ldi r17,0x7F
and r16,r17
out porta,r16
Ale jak podalem jawnie PORTA &= 0x7F to tlumaczyl "poprawnie" na CBI.
Pomoglo zapisanie jako PORTA &= (unsigned char) ~_BV(7).


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

========
Path: news-archive.icm.edu.pl!news2.icm.edu.pl!newsfeed.tpinternet.pl!news.dialog.net.pl!not-for-mai

Poprzedni Następny
Wiadomość
Spis treści
From: "Piotr Wyderski" <piotr.wyderskiREMOVE_at_nospam_wp.pl>
Subject: Re: Moje boje z AVRGCC.
Date: Sat, 24 Apr 2004 03:17:34 +0200



Milosz Skowyra wrote:

Chcialbym napisac sobie procedurke wysylajaca stringa na LCD.
I teraz nie bardzo wiem jak to zrobic, bo w GCC chyba nie ma takiego
typu zmiennej

W C++ jest std::string, ale to nie ta klasa wagowa. :-)

Rzuccie jakims przykladem jak przekazac do procedurki stringa...

void procedurka(const char* const ten_string) {

}

-)

PS2. Pewnie o stringach tez jest... ale cos nie moge znalezc...

I nie znajdziesz, w C _nie ma_ stringow.

Pozdrawiam
Piotr Wyderski



========
Path: news-archive.icm.edu.pl!news2.icm.edu.pl!news.webcorp.com.pl!newsfeed.tpinternet.pl!opal.futuro.pl!news.task.gda.pl!not-for-mai