Всех с наступающим Новым Годом!
Проблема такова:
С ARM работаю недавно. Имеется код, который нормально работал с AVR и платформенно не зависим. Перенес сей код на ARM - все, затык. Кoд такой:
Код
В хедере:
#define MAKEUINT16(byte_h, byte_l) ((UINT16)(((UINT16)byte_h << 8)|(UINT16)byte_l))
#define HIBYTE(word) ((UCHAR)((UINT16)word >> 8))
#define LOBYTE(word) ((UCHAR)((UINT16)word & 0xff))
#define MAKEUINT32(word_h, word_l) ((UINT32)(((UINT32)word_h << 16)|(UINT32)word_l))
#define HIWORD(longv) ((UINT16)((UINT32)longv >> 16))
#define LOWORD(longv) ((UINT16)((UINT32)longv & 0xffff))
#define SWAP16(n16) (MAKEUINT16(LOBYTE(n16), HIBYTE(n16)))
#define SWAP32(n32) (MAKEUINT32(SWAP16(LOWORD(n32)), SWAP16(HIWORD(n32))))
в модуле:
Код
...
if(hTCP->flags & TCP_FLAG_ACK)
{
/* Jup, use it as our seq */
socket->send_unacked = SWAP32(hTCP->ackno);
socket->hTCP.flags = TCP_FLAG_RESET;
socket->receive_next = SWAP32(hTCP->seqno);
}
else
{
socket->send_unacked = 0;
socket->hTCP.flags = TCP_FLAG_RESET | TCP_FLAG_ACK;
socket->receive_next = SWAP32(hTCP->seqno) + 1;
}
Если ставлю точку останова на строку с SWAP32 и потом, при попадании программы в эту точку, стартую программу - все нормально, код выполняется. Если точку останова не ставлю - программа виснет:-(
Если строки с SWAP32 удаляю - программа работает нормально...
Переменные send_unacked и receive_next 32-битные.
IAR C/C++ Compiler for ARM 4.42A Evaluation (4.42.1.201)
Помогите разобраться, в чем прикол...