Test on nodemcu-firmware. The int/uint pointer on esp8266 seems different to intel. memcpy is working.
This commit is contained in:
parent
34524e635e
commit
5bd231b52b
54
bytearr.c
54
bytearr.c
@ -276,18 +276,34 @@ static void readBytes( Buf *p, void *bytes, uint32_t offset, size_t length )
|
|||||||
p->position += length;
|
p->position += length;
|
||||||
}
|
}
|
||||||
|
|
||||||
#define READ_BUILDIN_TEMPLATE( type, name ) \
|
#ifdef _MEMORY_ALIGN_SAFE
|
||||||
static type name( Buf *p ) \
|
#define READ_BUILDIN_TEMPLATE( type, name ) \
|
||||||
{ \
|
static type name( Buf *p ) \
|
||||||
size_t sz = sizeof(type); \
|
{ \
|
||||||
RANGE_CHECK(p, sz); \
|
size_t sz = sizeof(type); \
|
||||||
\
|
RANGE_CHECK(p, sz); \
|
||||||
type retval = *(type*)(p->buffer + p->position); \
|
\
|
||||||
adjustEndian( (uint8_t*)&retval, sz, getEndian(p) ); \
|
type retval; \
|
||||||
\
|
memcpy( &retval, p->buffer + p->position, sz ); \
|
||||||
p->position += sz; \
|
adjustEndian( (uint8_t*)&retval, sz, getEndian(p) ); \
|
||||||
return retval; \
|
\
|
||||||
|
p->position += sz; \
|
||||||
|
return retval; \
|
||||||
}
|
}
|
||||||
|
#else
|
||||||
|
#define READ_BUILDIN_TEMPLATE( type, name ) \
|
||||||
|
static type name( Buf *p ) \
|
||||||
|
{ \
|
||||||
|
size_t sz = sizeof(type); \
|
||||||
|
RANGE_CHECK(p, sz); \
|
||||||
|
\
|
||||||
|
type retval = *(type*)(p->buffer + p->position); \
|
||||||
|
adjustEndian( (uint8_t*)&retval, sz, getEndian(p) ); \
|
||||||
|
\
|
||||||
|
p->position += sz; \
|
||||||
|
return retval; \
|
||||||
|
}
|
||||||
|
#endif//_MEMORY_ALIGN_SAFE
|
||||||
|
|
||||||
READ_BUILDIN_TEMPLATE( uint8_t, readUnsignedByte )
|
READ_BUILDIN_TEMPLATE( uint8_t, readUnsignedByte )
|
||||||
READ_BUILDIN_TEMPLATE( int8_t, readByte )
|
READ_BUILDIN_TEMPLATE( int8_t, readByte )
|
||||||
@ -330,6 +346,21 @@ static void writeBytes( Buf *p, const void *bytes, uint32_t offset, size_t lengt
|
|||||||
UPDATE_LENGTH(p);
|
UPDATE_LENGTH(p);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef _MEMORY_ALIGN_SAFE
|
||||||
|
#define WRITE_BUILDIN_TEMPLATE( type, name ) \
|
||||||
|
static void name( Buf *p, type value ) \
|
||||||
|
{ \
|
||||||
|
size_t sz = sizeof(type); \
|
||||||
|
RANGE_RESERVE(p, sz); \
|
||||||
|
\
|
||||||
|
uint8_t *pvalue = p->buffer + p->position; \
|
||||||
|
memcpy( pvalue, &value, sz ); \
|
||||||
|
adjustEndian(pvalue, sz, getEndian(p)); \
|
||||||
|
\
|
||||||
|
p->position += sz; \
|
||||||
|
UPDATE_LENGTH(p); \
|
||||||
|
}
|
||||||
|
#else
|
||||||
#define WRITE_BUILDIN_TEMPLATE( type, name ) \
|
#define WRITE_BUILDIN_TEMPLATE( type, name ) \
|
||||||
static void name( Buf *p, type value ) \
|
static void name( Buf *p, type value ) \
|
||||||
{ \
|
{ \
|
||||||
@ -343,6 +374,7 @@ static void writeBytes( Buf *p, const void *bytes, uint32_t offset, size_t lengt
|
|||||||
p->position += sz; \
|
p->position += sz; \
|
||||||
UPDATE_LENGTH(p); \
|
UPDATE_LENGTH(p); \
|
||||||
}
|
}
|
||||||
|
#endif//_MEMORY_ALIGN_SAFE
|
||||||
|
|
||||||
WRITE_BUILDIN_TEMPLATE( uint8_t, writeUnsignedByte )
|
WRITE_BUILDIN_TEMPLATE( uint8_t, writeUnsignedByte )
|
||||||
WRITE_BUILDIN_TEMPLATE( int8_t, writeByte )
|
WRITE_BUILDIN_TEMPLATE( int8_t, writeByte )
|
||||||
|
Loading…
x
Reference in New Issue
Block a user