Delay w C na 51



Masz problem? Zapytaj na forum elektroda.pl

Poprzedni Następny
Wiadomość
Spis treści
From: "Andrzej" <a.warycha_at_nospam_wp.pl>
Subject: Delay w C na 51
Date: Tue, 1 Jul 2003 21:17:53 +0200


W asemblerze kazda instrukcja byla wykonawan n-cykli maszynowych wiec
stworzenie funkcji oczekujacej (założenie: czestotliwosc taktowania
procesora jest nam znana) jest w miare proste.
Niestety w C nie wiem ile cykli maszynowych zabiera wykonanie np petli
for(i=0;i<10;i++)

W jednym z przykładów sciągniętych ze strony Maxima znalazłem:

void dalay(int useconds)
{
int s;
for(s=0;s<useconds;s++);
}

Twierdzą ze przy czestotliwosci 11 .0592MHz dalay wynosi 16us.

Na jakiej podstawie oni tak twierdza?

Z góry dziekuje za wytłumaczenie problemu.







========
Path: news-archive.icm.edu.pl!news.icm.edu.pl!news.atman.pl!news.astercity.net!not-for-mai

Poprzedni Następny
Wiadomość
Spis treści
From: Adam Dybkowski <adybkows_at_nospam_amwaw.edu.pl>
Subject: Re: Delay w C na 51
Date: Tue, 01 Jul 2003 22:46:38 +0200


Andrzej wrote:

W asemblerze kazda instrukcja byla wykonawan n-cykli maszynowych wiec
stworzenie funkcji oczekujacej (założenie: czestotliwosc taktowania
procesora jest nam znana) jest w miare proste.
Niestety w C nie wiem ile cykli maszynowych zabiera wykonanie np petli
for(i=0;i<10;i++)

To zależy od konkretnego kompilatora i ustawień optymalizatora. Jak
zmienną 'i' zrobisz volatile to skompiluj z opcją pozostawiającą źródła
asemblerowe i sobie je obejrzyj.

--

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


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

Poprzedni Następny
Wiadomość
Spis treści
From: "Marek" <neticus_at_nospam_wp.pl>
Subject: Re: Delay w C na 51
Date: Tue, 1 Jul 2003 22:49:54 +0200


W jednym z przykładów sciągniętych ze strony Maxima znalazłem:

void dalay(int useconds)
{
int s;
for(s=0;s<useconds;s++);
}

Twierdzą ze przy czestotliwosci 11 .0592MHz dalay wynosi 16us.

Na jakiej podstawie oni tak twierdza?

Proste !

Zajrzeli do wygenerowanego kodu w assemblerze
i sobie to przeliczyli ... serio ! :-)

Pzdr,

Marek



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

Poprzedni Następny
Wiadomość
Spis treści
From: "swiniaczek" <swiniaczek_at_nospam_buziaczek.pl>
Subject: Re: Delay w C na 51
Date: Tue, 1 Jul 2003 23:43:53 +0200


Cześć:
Stosuję 2 funkcje. Współczynnik 9.2 dobrałem doświadczalnie

#define us 9.2 //code optimalization 8

void delay_us(unsigned int us_time)
{
while(us_time--);
}

void delay_ms(unsigned int ms_time)
{
while(ms_time--)
delay_us(1000/us);
}

pozdr.
Świniaczek


Użytkownik "Andrzej" <a.warycha_at_nospam_wp.pl> napisał w wiadomości
news:bdsmmf$97q$1_at_nospam_nemesis.news.tpi.pl...
W asemblerze kazda instrukcja byla wykonawan n-cykli maszynowych wiec
stworzenie funkcji oczekujacej (założenie: czestotliwosc taktowania
procesora jest nam znana) jest w miare proste.
Niestety w C nie wiem ile cykli maszynowych zabiera wykonanie np petli
for(i=0;i<10;i++)

W jednym z przykładów sciągniętych ze strony Maxima znalazłem:

void dalay(int useconds)
{
int s;
for(s=0;s<useconds;s++);
}

Twierdzą ze przy czestotliwosci 11 .0592MHz dalay wynosi 16us.

Na jakiej podstawie oni tak twierdza?

Z góry dziekuje za wytłumaczenie problemu.









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

Poprzedni Następny
Wiadomość
Spis treści
From: Marcin E. Hamerla <Xmehamerla_at_nospam_Xpro.Xonet.Xpl.remove_X>
Subject: Re: Delay w C na 51
Date: Tue, 01 Jul 2003 23:45:33 +0200


Andrzej napisal(a):

W asemblerze kazda instrukcja byla wykonawan n-cykli maszynowych wiec
stworzenie funkcji oczekujacej (założenie: czestotliwosc taktowania
procesora jest nam znana) jest w miare proste.
Niestety w C nie wiem ile cykli maszynowych zabiera wykonanie np petli
for(i=0;i<10;i++)

W jednym z przykładów sciągniętych ze strony Maxima znalazłem:

void dalay(int useconds)
{
int s;
for(s=0;s<useconds;s++);
}

Twierdzą ze przy czestotliwosci 11 .0592MHz dalay wynosi 16us.

Na jakiej podstawie oni tak twierdza?

Zapewne obejrzeli kod assemblerowy i policzyli takty instrukcji.

Tak czy siak takie delaye to jest proszenie sie o klopoty. Albo zrob
funkcje delaya w assemblerze albo , jesli delay jest dluzszy, zrob to
na przerwaniu.



--
Pozdrowienia, Marcin E. Hamerla

- What about your soul?
- I'm an engineer.

========
Path: news-archive.icm.edu.pl!news.icm.edu.pl!newsfeed.gazeta.pl!newsfeed.tpinternet.pl!news-spur1.maxwell.syr.edu!news.maxwell.syr.edu!sn-xit-03!sn-xit-01!sn-post-02!sn-post-01!supernews.com!corp.supernews.com!not-for-mai

Poprzedni Następny
Wiadomość
Spis treści
From: Greg Sz <greg_sz_at_nospam_dsuper.net>
Subject: Re: Delay w C na 51
Date: Tue, 01 Jul 2003 20:22:43 -0400


Andrzej wrote:

Niestety w C nie wiem ile cykli maszynowych zabiera wykonanie np petli
for(i=0;i<10;i++)

W jednym z przykładów sciągniętych ze strony Maxima znalazłem:

void dalay(int useconds)
{
int s;
for(s=0;s<useconds;s++);
}

Twierdzą ze przy czestotliwosci 11 .0592MHz dalay wynosi 16us.

Na jakiej podstawie oni tak twierdza?

Zobacz na co w asseb\mblerze sie to tlumaczy pewnie dosc proesto mozna to
policzyc.
Jest to popularna ale nedobra metoda. Jesli masz przrwania albo cos to nie
kontrolujesz tego czasu tak naprawde. Szczgolnie na dluzsze opoznienia
lepiej uzywac tajmerow ktore masz w procku.
Jak bedzies ztak robil to moze CI tez wywalic WatchDog. Wez to pod uwage.
Pozdro
grzechu




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

Poprzedni Następny
Wiadomość
Spis treści
From: "marcinuh" <marcinuh_at_nospam_wp.pl>
Subject: Re: Delay w C na 51
Date: Wed, 2 Jul 2003 08:25:51 +0200


Użytkownik "Andrzej" <a.warycha_at_nospam_wp.pl> napisał w wiadomości
news:bdsmmf$97q$1_at_nospam_nemesis.news.tpi.pl...
W asemblerze kazda instrukcja byla wykonawan n-cykli maszynowych wiec
stworzenie funkcji oczekujacej (założenie: czestotliwosc taktowania
procesora jest nam znana) jest w miare proste.
Niestety w C nie wiem ile cykli maszynowych zabiera wykonanie np petli

moze Ci ulatwic sprawe posluzenie sie biblioteka intrins.h i zawarta w niej
f-cja nop() - wstawia do kodu asemblerowego czystego nopa, a jesli chodzi
o liczenie czasu obslugi petli to petla do{}while() jest bardziej
przewidywalna od for(;;).
pzdr,
marcin



========
Path: news-archive.icm.edu.pl!mat.uni.torun.pl!news.man.torun.pl!news.man.poznan.pl!not-for-mai