[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