Глядя на репозиторий CVS для tos/types/AM.h
, похоже, что он задыхается от следующего кода:
154: enum {
155: MSG_DATA_SIZE = offsetof(struct TOS_Msg, crc) + sizeof(uint16_t), // 36 by default
156: TINYSEC_MSG_DATA_SIZE = offsetof(struct TinySec_Msg, mac) + TINYSEC_MAC_LENGTH, // 41 by default
157: DATA_LENGTH = TOSH_DATA_LENGTH,
158: LENGTH_BYTE_NUMBER = offsetof(struct TOS_Msg, length) + 1,
159: TINYSEC_NODE_ID_SIZE = sizeof(uint16_t)
160: };
Обычным элементом из строк 155, 156 и 158 является макрос offsetof()
, который должен быть определен в stddef.h
и который выглядит так, как будто должен был быть введен tos.h
, прежде чем он вызовет AM.h
быть включенным, поэтому offsetof()
уже должно быть определено.
Возможно, вы захотите проверить, правильно ли используется используемый вами компилятор offsetof()
и / или почему он не доступен для использования в AM.h
. При необходимости вы, вероятно, можете определить его самостоятельно, используя более или менее обычную реализацию:
#define offsetof(st, m) ((size_t) ( (char *)&((st *)(0))->m - (char *)0 )) // stolen from Wikipedia