[elektro] C kérdés
hg12345
hg12345 at freemail.hu
Fri Jan 19 08:17:57 CET 2018
Ha már sebességről volt szó....
uint32_t mask=0x00000001;
uint32:t val=0;
while(val|=mask,mask<<=1,i--);
ami lehet célszerű "register" definiálni.
Amúgy még ennél is gyorsabb megoldás van az M3-tól, ha bit-banding területre definiálod a változókat, és bit struktaraként határozod meg, ilyenkor automatikusan generálja a bit-es területet
a.bit0=b .bit31, sajnos a bit srukturára index-vel nem lehet hivatkozni.
Amennyiben indexelni szeretnéd akkor a változó cimét meghatározva, a bit banding területen keresztül egy pointerrel C-ben asm betét nélkül bitenkét hivatkozhatsz rá
-------- Eredeti levél --------
Feladó: Bali Zoltán < eltexto at freemail.hu (Link -> mailto:eltexto at freemail.hu) >
Dátum: 2018 január 19 07:38:02
Tárgy: Re: [elektro] C kérdés
Címzett: elektro at tesla.hu (Link -> mailto:elektro at tesla.hu)
Nahát, ez igazán hatékonynak tűnik. Megint tanultam valamit tőletek
Köszönöm!
Üdv. Zoli
----- Original Message -----
From: "Kiss Gabor" <kissg at ssg.ki.iif.hu>
Newsgroups: hun.lists.elektro
To: <elektro at tesla.hu>
Sent: Thursday, January 18, 2018 8:52 PM
Subject: Re: [elektro] C kérdés
On 01/18/2018 08:49 PM, Kiss Gabor wrote:
> On 01/18/2018 06:20 PM, Bali Zoltan wrote:
>
>> void FillLedBar(uint32_t how_many,uint32_t direction)
>> {<!-- -->
>> uint32_t i,val;
>>
>> for(i=0;i<how_many;i++) {<!-- -->
>> val |= 1<<i;
>> }
>
> Bocs, hogy beleszólok! A for ciklus helyett ezt írnám:
>
> val |= (1<<how_many)-1;
>
> Ha nincs szorzóutasítás a processzorban, ez is ciklusra fordul,
> de picit gyorsabb lesz, mert egyszerűbb a ciklus törzse.
Izé! Most látom csak, hogy nálad a val nem kapott kezdőérteket.
Ez amúgy is hiba volt. :-)
Szó val=(1<<how_many)-1;
kissg
-----------------------------------------
elektro[-flame|-etc]
-----------------------------------------
elektro[-flame|-etc]
More information about the Elektro
mailing list