Page 3 of 5

Re: IAR Вопрос про макрос

PostPosted: 18 Dec 2012, 04:09
by DimkaM
BIG_ENDIAN и LITTLE_ENDIAN
Мозги чёйта замёрзли походу. Какие два из четырёх применимы к з80?

Re: IAR Вопрос про макрос

PostPosted: 18 Dec 2012, 04:29
by DimkaM
контики:
Code: Select all
#ifndef UIP_HTONS
#   if UIP_BYTE_ORDER == UIP_BIG_ENDIAN
#      define UIP_HTONS(n) (n)
#      define UIP_HTONL(n) (n)
#   else /* UIP_BYTE_ORDER == UIP_BIG_ENDIAN */
#      define UIP_HTONS(n) (uint16_t)((((uint16_t) (n)) << 8) | (((uint16_t) (n)) >> 8))
#      define UIP_HTONL(n) (((uint32_t)UIP_HTONS(n) << 16) | UIP_HTONS((uint32_t)(n) >> 16))
#   endif /* UIP_BYTE_ORDER == UIP_BIG_ENDIAN */
#else
#error "UIP_HTONS already defined!"
#endif /* UIP_HTONS
дрова визнета
Code: Select all
u_short swaps(u_int i)
{
   u_short ret=0;
   ret = (i & 0xFF) << 8;
   ret |= ((i >> 8)& 0xFF);
   return ret;   
}

u_long swapl(u_long l)
{
   u_long ret=0;
   ret = (l & 0xFF) << 24;
   ret |= ((l >> 8) & 0xFF) << 16;
   ret |= ((l >> 16) & 0xFF) << 8;
   ret |= ((l >> 24) & 0xFF);
   return ret;
}

/**
@brief   htons function converts a unsigned short from host to TCP/IP network byte order (which is big-endian).
@return    the value in TCP/IP network byte order
*/
unsigned short htons(
   unsigned short hostshort   /**< A 16-bit number in host byte order.  */
   )
{
#if ( SYSTEM_ENDIAN == _ENDIAN_LITTLE_ )
   return swaps(hostshort);
#else
   return hostshort;
#endif      
}


/**
@brief   htonl function converts a unsigned long from host to TCP/IP network byte order (which is big-endian).
@return    the value in TCP/IP network byte order
*/
unsigned long htonl(
   unsigned long hostlong      /**< hostshort  - A 32-bit number in host byte order.  */
   )
{
#if ( SYSTEM_ENDIAN == _ENDIAN_LITTLE_ )
   return swapl(hostlong);
#else
   return hostlong;
#endif   
}

Re: IAR Вопрос про макрос

PostPosted: 18 Dec 2012, 04:54
by DimkaM
ага.
Разобрался.
Всегда бигендиан дефайнил - визнет робил. а тут чёрт дёрнул на вики залезть, они там расписали хер проссышь чего, запутался ещё больше

Re: IAR Вопрос про макрос

PostPosted: 18 Dec 2012, 16:15
by deathsoft
DimkaM wrote:Какие два из четырёх применимы к з80?

Ясно дело, что LITTLE_ENDIAN, т.к. клон интела.

Re: IAR Вопрос про макрос

PostPosted: 21 Dec 2012, 08:53
by DimkaM
deathsoft wrote: LITTLE_ENDIAN

судя по процедурам, да.
но логически сообразить немогу.
вроде литлендиан, значит младший в конце. а у з80 младший в начале, если расположение в памяти имеется ввиду.
Оно мне похер, лижбы работало, но покоя недаёт

Re: IAR Вопрос про макрос

PostPosted: 21 Dec 2012, 16:55
by deathsoft
DimkaM wrote:вроде литлендиан, значит младший в конце

Читать до полного просветления Порядок байтов

Re: IAR Вопрос про макрос

PostPosted: 22 Dec 2012, 04:57
by DimkaM
deathsoft wrote:Читать до полного просветления Порядок байтов

просветлился.
little-endian, дословно: «остроконечный»
а я оное пословно переводил. английский в школе прогуливал обычно

Re: IAR Вопрос про макрос

PostPosted: 22 Dec 2012, 09:32
by deathsoft
DimkaM wrote:а я оное пословно переводил

Ну какбэ литтл - это маленький, а биг - большой, что какбэ не двусмысленно намекает какой байт лежит первым.

Re: IAR Вопрос про макрос

PostPosted: 22 Dec 2012, 17:43
by lvd
deathsoft wrote:Ну какбэ литтл - это маленький, а биг - большой, что какбэ не двусмысленно намекает какой байт лежит первым.

А эндиан какбы намекает, о каком именно байте речь.

Re: IAR Вопрос про макрос

PostPosted: 22 Dec 2012, 22:07
by TS-Labs
DimkaM wrote:английский в школе прогуливал обычно

И программирование ))