[elektro] Megint C kérdés

Gál Zsolt tralitoverin at freemail.hu
Wed Apr 20 14:02:22 CEST 2011


Én azt nem tudom:

long
_mullong (long a, long b)
{
  long result = 0;
  unsigned char i;

  /* check all bits in a byte */
  for (i = 0; i < 8u; i++) {
    /* check all bytes in operand (generic code, optimized by the compiler) */
    if (a & 0x0001u) result += b;
    if (sizeof (a) > 1 && (a & 0x00000100ul)) result += (b << 8u);
    if (sizeof (a) > 2 && (a & 0x00010000ul)) result += (b << 16u);
    if (sizeof (a) > 3 && (a & 0x01000000ul)) result += (b << 24u);
    a = ((unsigned long)a) >> 1u;
    b <<= 1u;
  } // for i

  return result;
}

2011/4/20 Lajos Rancz <lajos.rancz at gmail.com>:
> Hello!
>
> int, aminek a szelessege pedig fordito/architektura fuggo. Hasznalj
> uint64-et makroban.
>
> Udv
>
> 2011/4/20 hg12345 <hg12345 at freemail.hu>
>
>> Hi!
>>
>> Mi a szabvány, szokvány a C-ben (nem ++!!!), a számkonstans vagy
>> helyettesítési érték meghatározásakor.
>> - 32 bit vagy 64 bit a számábrázolás?
>> - a shiftelés max 31 vagy max 63?
>>
>> ilyet szeretnék
>> #define   PortTypeOut   0x03
>> #define   PortO(Type,Pin)  ((PortTypeOut<<Pin)<<2)   /*egy meghatározás 4
>> bit*/
>> #define   Port32Out     (PortO(PortTypeOut,8))       /*16 bites port van)
>>
>> egy port meghatározása nem fér el 32 biten tudom, és a meghatározó
>> regiszter is csak 32bites és csak 8 bitet tud meghatározni....
>>
>> 64 bites helyettesítési értékekkel egyszerűbb a kezelése!
>> ((( igy helyettesítési érték meghatározásánál nem kell tudni, hogy a port
>> melyik részén helyezkedik el a felhasznált láb, több láb kezeléséhez
>> kell...)))
>>
>> PortX->TypeLo = Port32Out & 0xFFFFFFFF;
>> PortX->TypeHi = Port32Out >> 32;
>>
>> A sajnos az alkalmazott C-t még rálehet szedni, hogy a helyettesítési
>> értékeket uLL vagy LL ként tárolja, de shiftelést nem hajlandó 31 felett
>> kezelni....
>>
>> A GNU C ezt hogy kezeli, a problémás egy KEIL...
>>
>>  üdv
>>
>>
>> -----------------------------------------
>>          elektro[-flame|-etc]
>>
> -----------------------------------------
>          elektro[-flame|-etc]
>
>



-- 
~~~~~~~~~~~~~~~~
http://galzsolt.zzl.org



More information about the Elektro mailing list