Здравствуйте.
Переполз с компилятора EW AVR 5.51 на 6.11 и поймал непонятный глюк cо встроенной функцией __reverse().
В 5.51 компилировалось без ошибок. 6.11 ругается на
w5100_control.SIPR = __reverse(ip); ошибкой
Error[Pa108]: no variant of the generic intrinsic function "" available for the type "unsigned long" D:\!Projects\Reverse_test\6.11\main.cpp 19 При этом в функции
reverse() та же функция с теми же типами данных проходит. И дальше по коду
return __reverse(x); тоже нормально. И если вместо __reverse() в проблемном месте использовать reverse(), то тоже нормально.
CODE
#include <ioavr.h>
#include <stdint.h>
typedef struct
{
uint32_t SIPR; // Source IP Address
} W5100_CONTROL;
//#pragma location=0x8000
__no_init volatile W5100_CONTROL w5100_control;
uint32_t reverse(uint32_t data)
{
return __reverse(data); //Вот так всё хорошо
}
class W5100
{
public:
void SetIP(uint32_t ip)
{
w5100_control.SIPR = __reverse(ip); //Тут проблема
// w5100_control.SIPR = reverse(ip); //А вот тут уже всё нормально
};
};
W5100 w5100;
int main()
{
w5100.SetIP(0x01020304);
uint32_t x=0xAAAAAAAA;
return __reverse(x); //Вот так всё хорошо
}
Хелп ми

Проекты для 5.51 и 6.11 соответственно в архиве прилагаю.
Reverse_test.rar ( 16.2 килобайт )
Кол-во скачиваний: 67
Сообщение отредактировал IgorKossak - May 29 2012, 08:02
Причина редактирования: [codebox] для длинного кода