FAQ | Points | Add... | Recent posts | Search | Register | Log in


Potrzebna pomoc - uC


Post new topic  Reply to topic      Main Page -> Forum Index -> Microcontrollers Generally -> Potrzebna pomoc - uC
Author
Message
sygi
Poziom 12
Poziom 12


Joined: 19 Jun 2003
Posts: 82
Location: Wrocław

Post#1 Post from the author of the topic 22 Sep 2004 11:50   

Potrzebna pomoc - uC


Kompiluje w Code Vision AVR
Potrzebuje napisać funkcje która bedzie ze zmiennej typu unsigned int(65535) "wyciągała" ilośc jedności dziesiatek, setek ... i zapisywała w tablicy 5- elementowej ( int temp[5] ) . Dzieki
Back to top
   
elektryk
Poziom 26
Poziom 26


Joined: 25 Apr 2002
Posts: 11092

Post#2 22 Sep 2004 12:18   

Re: Potrzebna pomoc - uC


Dziel liczbe przez 10 a reszte z dzielenia ładuj do tablicy od najmłodszej cyfry.
Back to top
   
Google

Google Adsense


Post# 22 Sep 2004 12:18   





Back to top
   
Xitami
Poziom 21
Poziom 21


Joined: 10 Aug 2004
Posts: 1126
Location: Gliwice

Post#3 23 Sep 2004 00:52   

Potrzebna pomoc - uC


itoa() zobacz w helpie
Back to top
   
Robot_
Poziom 16
Poziom 16


Joined: 03 Jun 2004
Posts: 277
Location: Zabrzeg

Post#4 23 Sep 2004 00:56   

Re: Potrzebna pomoc - uC


Funkcja itoa konwertuje liczbe do string'a a chyba nie o to koledze chodzilo, jesli chcemy uzyskac liczbę dziesiątek, setek itp. to lepiej zrobić to tak jak radzi elektryk.
Pozdrawiam
Back to top
   
Tdv
Poziom 22
Poziom 22


Joined: 27 Aug 2002
Posts: 2263
Location: Śląsk

Post#5 23 Sep 2004 07:25   

Re: Potrzebna pomoc - uC


sygi wrote:
Kompiluje w Code Vision AVR
Potrzebuje napisać funkcje która bedzie ze zmiennej typu unsigned int(65535) "wyciągała" ilośc jedności dziesiatek, setek ... i zapisywała w tablicy 5- elementowej ( int temp[5] ) . Dzieki


unsigned char tablica[5];
unsigned int liczba;

tablica[0]=liczba/10000;
liczba%=10000;
tablica[1]=liczba/1000;
liczba%=1000;
tablica[2]=liczba/100;
liczba%=100;
tablica[3]=liczba/10;
tablica[4]=liczba%10;

W tablica[0] masz ilosc dziesiątek tysięcy w tablica[4] jednosci. tablica nie musi być typu int, wystwrczy char ale jeżeli tak Ci wygodniej...
Back to top
   
yego666
Poziom 21
Poziom 21


Joined: 26 Feb 2004
Posts: 1366

Post#6 23 Sep 2004 09:45   

Re: Potrzebna pomoc - uC


:arrow: Tdv,
Wybacz, ze usprawnie Twoj w 100% poprawny program, ale serce mnie boli gdy potegi dziesietne nie odpowiadaja indexom w tablicy.
Dodatkowo mozna jeszcze troszke zagescic ten kod.

#define DLUGOSC_DZISIETNA 5
unsigned char tablica[DLUGOSC_DZISIETNA];
unsigned int liczba;
unsigned char index;
...
...
for(index=0;index<DLUGOSC_DZISIETNA;index++)
{
if(liczba != 0)
{
tablica[index]=liczba%10;
if(index < (DLUGOSC_DZISIETNA-1))
liczba/=10;
}
else
break;
}


Teraz mozna zadawac spodziewana liczbe cyfr dziesietnych w wyniku poprzez zmiane wartosci definicji "DLUGOSC_DZISIETNA". Czyli n.p. dla liczby binarnej o dlugosci 32bity bedzie to wartosc 10. Oczywiscie trzeba wtedy zmienic typ zmiennej "liczba" na wlasciwy, by kompilator nie krzyczal i by liczba sie zmiescila. Dodatkowo indexy tablicy odzwierciedlaja potegi dziesietne w danej lokacji tablicy.
Ten kod nie spowoduje znaczacego wzrostu czasu wykonania, a na pewno oszczedzi troche miejsca we flashu procesora.
Mam nadzieje, ze program jest poprawny, choc pisalem go z rana.
Back to top
   
Google

Google Adsense


Post# 23 Sep 2004 09:45   





Back to top
   
Tdv
Poziom 22
Poziom 22


Joined: 27 Aug 2002
Posts: 2263
Location: Śląsk

Post#7 23 Sep 2004 09:53   

Re: Potrzebna pomoc - uC


yego66 :arrow: wybaczam :D ale żeby mi to było przedostatni raz 8)
Back to top
   
yego666
Poziom 21
Poziom 21


Joined: 26 Feb 2004
Posts: 1366

Post#8 23 Sep 2004 10:04   

Re: Potrzebna pomoc - uC


Tdv wrote:
yego66 :arrow: wybaczam :D ale żeby mi to było przedostatni raz 8)

:arrow: Tdv

Dzieki. :) :) Chyba sie juz to nie powtorzy :) , no chyba zeby.
Wiem, ze pisales kod tak by osoba poczatkujaca wszystko pojela,
ale nie sadze by trzeba bylo az tak dalece upraszczac sprawy. Wiecej wiary w ludzi :D
Pozdrawiam, Yego
Back to top
   
Tdv
Poziom 22
Poziom 22


Joined: 27 Aug 2002
Posts: 2263
Location: Śląsk

Post#9 23 Sep 2004 10:15   

Potrzebna pomoc - uC


Hehehe, jak już chcesz tak optymalizować to:

if(liczba) wystarczy ;-D
i to else break; też tak trochę jak na mój gust nadmiarowe jest...

BTW to fajny pomysł na konkurs, napisać jak najbardziej optymalny kod do okreslonego algorytmu. Konkurs siłą rzeczy musiałby być w kilku kategoriach (C, BASCOM, asm).
Back to top
   
yego666
Poziom 21
Poziom 21


Joined: 26 Feb 2004
Posts: 1366

Post#10 23 Sep 2004 10:31   

Re: Potrzebna pomoc - uC


Tdv wrote:
Hehehe, jak już chcesz tak optymalizować to:

if(liczba) wystarczy ;-D

Jesli chodzi o sposob zapisu to masz 100% racji, ale kompilator dokladnie taki sam kod wygeneruje w obu przypadkach :)
Tdv wrote:

i to else break; też tak trochę jak na mój gust nadmiarowe jest...

Nie jest nadmiarowy, gdyz bez niego petla bedzie mlocic indeksy dla zerowej wartosci liczby, a tak zaoszczedzisz na czasie, co przy operacjach dzielenia i modulo moze dac pare ladnych milisekund.
Tdv wrote:
BTW to fajny pomysł na konkurs, napisać jak najbardziej optymalny kod do okreslonego algorytmu. Konkurs siłą rzeczy musiałby być w kilku kategoriach (C, BASCOM, asm).

Pomysl jest fajny, tyle ze nie chcialem sie z Toba scigac, a tylko zoptymalizowac ten kod i pokazac ze zawsze jest wiecej niz jeden sposob na napisanie programu. To wszystko. Zadnych zawodow nie urzadzalem. :wink:
Back to top
   
Tdv
Poziom 22
Poziom 22


Joined: 27 Aug 2002
Posts: 2263
Location: Śląsk

Post#11 23 Sep 2004 10:48   

Potrzebna pomoc - uC


Mnie nie chodziło o ściganie:
http://www.elektroda.pl/rtvforum/viewtopic.php?t=159114&highlight=konkurs

Nie bardzo rozumie o co Ci idzie z tym młóceniem indexów... Ale mniejsza już o to, reszta to już sprawa autora postu.
Back to top
   
Google

Google Adsense


Post# 23 Sep 2004 10:48   





Back to top
   
yego666
Poziom 21
Poziom 21


Joined: 26 Feb 2004
Posts: 1366

Post#12 23 Sep 2004 11:09   

Re: Potrzebna pomoc - uC


Tdv wrote:
Mnie nie chodziło o ściganie:
http://www.elektroda.pl/rtvforum/viewtopic.php?t=159114&highlight=konkurs.

Sprobuj to zglosic, bo pomysl jest dobry. Mysle, ze wywola zainteresowanie. Niemniej oprocz podzialu na jezyki programowania ( ASM, C, C++, C--, itd itp, trzeba bedzie okreslic czy chodzi nam o jak najwieksza czytelnosc programu, czy o zwiezly kod, czy o wydajnosc czasowa, czy tez zgodnosc z tym lub tamtym standardem. Bedzie na ten temat cala wielka dyskusja, ktora pewnie wobec wielosci rozbieznych zdan znow utknie w martwym punkcie :(
Tdv wrote:
Nie bardzo rozumie o co Ci idzie z tym młóceniem indexów... Ale mniejsza już o to, reszta to już sprawa autora postu.
Sprawa ma sie tak, ze majac n.p. liczbe 16 bitowa o wartosci 32768 bedziemy potrzebowali wszystkich pieciu iteracji do jej przetworzenia, natomiast liczba 123 wymaga zaledwie trzech iteracji. W chwili gdy if(liczba) wyczai zerowa wartosc argumentu, else break; spowoduje przerwanie wykonywania petli FOR zamiast pozwolic jej przejsc ( niepotrzebnie zreszta ) jeszcze dwie iteracje ( zmieniajac tylko indexy ) na zerowym argumencie. Zaoszczedzisz w ten sposob troche cennego czasu.
Back to top
   
Xitami
Poziom 21
Poziom 21


Joined: 10 Aug 2004
Posts: 1126
Location: Gliwice

Post#13 23 Sep 2004 11:27   

Potrzebna pomoc - uC


owszem zaoszczędzisz, ale pamiętaj o zainicjowaniu tablicy, bo mogą w niej zostać jakieś śmieci.
Back to top
   
juliusz
Poziom 8
Poziom 8


Joined: 15 Jul 2004
Posts: 28
Location: 3miasto

Post#14 23 Sep 2004 11:44   

Re: Potrzebna pomoc - uC


Albo można tak:

W pętli np. while odejmować od danej liczby 10000 i zliczać ile razy pętla się wykona, dopóki liczba będzie większa od 10000. W tym liczniku będzie właśnie liczba dziesiątków tysięcy, tysięcy itd. Potem odejmować w ten sposób 1000, 100 i 10, na końcu zostanie liczba jedności.
Kto wie czy nie będzie się szybciej wykonywać niż dzielenie. U mnie działa - robiłem na tym właśnie miernik częstotliwości z wy na 7seg:)
Back to top
   
Post new topic  Reply to topic      Main Page -> Forum Index -> Microcontrollers Generally -> Potrzebna pomoc - uC
Page 1 of 1
Similar topics
Pilnie pomoc potrzebna! (2)
Co wybrać? Potrzebna POMOC (6)
hallotron potrzebna pomoc. (16)
Panowie potrzebna pomoc C++ (1)
wzmacniacz potrzebna pomoc (1)
potrzebna pomoc do schematu (12)
potrzebna pomoc do PIC-ow (36)
POTRZEBNA SZYBKA POMOC (1)
potrzebna pomoc (2)
Potrzebna pomoc - Program w c++ (7)

Page generation time: 0.111 seconds


FAQ || Administrator || Moderators || Widgets and banners || Contact
elektroda.pl topic RSS feed