реклама на сайте
подробности

 
 
> Странное поведение C30, глюк с большими сдвигами ?
Diz
сообщение Nov 7 2007, 22:20
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 84
Регистрация: 1-08-06
Пользователь №: 19 250



PIC24FJ16GA002, компилятор C30 v3.0 (исправленная студенческая).

Столкнулся со странным поведением при больших сдвигах, например:

Код
void rs232_tx_uchar( unsigned char);


Код
void rs232_tx_ulong( unsigned long txData)
{
        rs232_tx_uchar( txData >> 24);
        rs232_tx_uchar( txData >> 16);
        rs232_tx_uchar( txData >> 8);
        rs232_tx_uchar( txData);
}


При запуске старший байт старшего слова на терминал не выводится, вместо него дважды
выводится младший байт старшего слова - 'сдвиг' на 24 не работает.

Если сделать так
Код
void rs232_tx_ulong( unsigned long txData)
{
        unsigned int tmpData = txData >> 16;

        rs232_tx_uchar( tmpData >> 8);
        rs232_tx_uchar( txData >> 16);
        rs232_tx_uchar( txData >> 8);
        rs232_tx_uchar( txData);
}

то все работает нормально.

Та же проблема и в более серьезных местах.
Кто-нибудь сталкивался или это я чего-то не понимаю ?

PS Да, оптимизация -O2.
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 17th July 2025 - 23:47
Рейтинг@Mail.ru


Страница сгенерированна за 0.01353 секунд с 7
ELECTRONIX ©2004-2016