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

 
 
> Странное поведение 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
 
Start new topic
Ответов
volodya
сообщение Nov 8 2007, 05:37
Сообщение #2


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

Группа: Свой
Сообщений: 194
Регистрация: 14-02-07
Из: УКРАИНА
Пользователь №: 25 344



Цитата(Diz @ Nov 8 2007, 00:20) *
PIC24FJ16GA002, компилятор C30 v3.0 (исправленная студенческая).

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


Проблема с преобразованием long->char при передаче с неявным преобразованием действительно возникает ошибка в отдельных ситуациях.
При пердаче

Код
void rs232_tx_uchar( unsigned char);

void rs232_tx_ulong( unsigned long txData)
{
        rs232_tx_uchar( (unsigned char){txData >> 24));        
}


ситуация должна исправляется. (покрайней мере в моем случае smile3046.gif было так).

Сообщение отредактировал volodya - Nov 8 2007, 05:39


--------------------
"Для того чтобы избежать критики, надо ничего не делать, ничего не говорить и никем не быть"
"Каждый из нас бывает дураком по крайней мере пять минут в день; мудрость заключается в том, чтобы не превысить лимит." Элберт Хаббард
Go to the top of the page
 
+Quote Post



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

 


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


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