|
Интересный глюк в CodeVisionAVR |
|
|
|
Apr 17 2008, 09:02
|

Частый гость
 
Группа: Свой
Сообщений: 120
Регистрация: 19-02-08
Пользователь №: 35 166

|
Обнаружил интересный глюк в CodeVision, целый день вчера просидел - думал во мне дело, оказалось, что нет. Если мы делаем сдвиг и результирующее число выходит из размера 1 байта, то, почему-то, компилятор не преобразует его к int (хотя обязан по стандарту). То есть вот такой код работает непрявильно: Код unisigned char s = 243; //... unsigned int d = (unsigned int)(s << 4); // d != 3888 а надо так делать, что глупо... Код unisigned char s = 243; //... unsigned int d = (unsigned int)(((unsigned int)s) << 4); // d = 3888 Интересно, зачем это надо или это просто баг??..
--------------------
Все будет хорошо! Я проверял!
|
|
|
|
|
 |
Ответов
|
Dec 2 2008, 15:52
|

Знающий
   
Группа: Свой
Сообщений: 723
Регистрация: 29-08-05
Из: Березовский
Пользователь №: 8 065

|
Выбрось каку  Прошу не пинать -- прошелся поиском по сайту и нашел сто-0-олько тем про глюконат-кодевижина, что прям ой! Вобщем, пощщу (от сл. "постить") в первый попавшийся топик по глюкам. Сегодня приспичило меня поднять старые исходники, которые я еще писал в CodeVision в хз каком мохнатом году... Думал, закопипащщу (опять, гы-гы) текст в ИАР, подправлю где надо порты/регистры и вперед! Тема-то изъезженная вдоль и поперек -- подключение текстового LCD. Чего тут думать-то!? Ан, нет! Старые грабли с новыми ручкам... Короче, IAR обнаружил ошибку на выходе из функции. Стыдно признаться, но это так, -- моя невнимательность. Но меня другое плющит -- Codevision эту ошибку в упор не видит. Пф-ф! Вот код функции (слегка урезанный): Код // // Перевод кодировки Win-1251 в LDC-кодировку // BYTE _Translate(BYTE data) { switch (data) { case 'Ё': return 0xA2; case 'ё': ... case '№': return 0xCC; case '\\': return 0xFF; }
if (data >= 0xC0) return rus[data - 0xC0]; } Для молодых поэтов поясняю -- собака порылась в последнем операторе if. Вопрос: что будет, если data будет меньше 0xC0? Какой код вернет функция? Правльный выход из функции должен быть, разумеется, такой: Код ... if (data >= 0xC0) return rus[data - 0xC0]; else return data; } (Может кому пригодится. Хех!)
--------------------
Хочешь рассмешить Бога -- расскажи ему о своих планах!
|
|
|
|
|
Dec 3 2008, 06:15
|
Участник

Группа: Участник
Сообщений: 55
Регистрация: 17-04-08
Пользователь №: 36 850

|
Цитата(zhevak @ Dec 2 2008, 17:52)  Вопрос: что будет, если data будет меньше 0xC0? Какой код вернет функция? Все зависит от того, что вы выкинули заменив точечками в switch'e возможно за этот if управление даже не выйдет. Кстати, насколько я припоминаю, у КодеВижена есть настройка какие варнинги выводить, а какие нет. Надо там глянуть не отключены ли.
|
|
|
|
Сообщений в этой теме
DMD Интересный глюк в CodeVisionAVR Apr 17 2008, 09:02 Сергей Борщ Да, выходит, это еще одно несоответствие стандарту... Apr 17 2008, 09:17 defunct Цитата(Сергей Борщ @ Apr 17 2008, 11:17) ... Dec 3 2008, 00:15  Сергей Борщ Цитата(defunct @ Dec 3 2008, 02:15) Можно... Dec 3 2008, 01:58  zhevak Цитатаdefunct[/b]' date='Dec 3 2008, 05:15... Dec 3 2008, 21:26   defunct zhevak
за подробнейшие ответы. Dec 3 2008, 22:47   LordVader Цитата(zhevak @ Dec 4 2008, 01:26) Если L... Dec 4 2008, 10:26    zhevak Цитата(LordVader @ Dec 4 2008, 15:26) Сущ... Dec 4 2008, 10:47     LordVader Цитата(zhevak @ Dec 4 2008, 13:47) Я вам ... Dec 4 2008, 18:22      zhevak Цитата(LordVader @ Dec 4 2008, 23:22) Ну ... Dec 4 2008, 19:15 prottoss Цитата(DMD @ Apr 17 2008, 16:02) Обнаружи... Apr 17 2008, 10:31 Сергей Борщ Цитата(prottoss @ Apr 17 2008, 13:31) А п... Apr 17 2008, 11:20  prottoss Цитата(Сергей Борщ @ Apr 17 2008, 18:20) ... Apr 18 2008, 00:42  Andrew O. Shadoura Цитата(Сергей Борщ @ Apr 17 2008, 14:20) ... Apr 18 2008, 02:01 WHALE Цитата(DMD @ Apr 17 2008, 13:02) Обнаружи... Apr 17 2008, 12:33 DMD Ворнинги не генерились, что и странно. А насчет то... Apr 18 2008, 09:41 delamoure Цитата(ReAl @ Apr 18 2008, 16:50) Уже обс... Dec 3 2008, 11:48  Сергей Борщ Цитата(delamoure @ Dec 3 2008, 13:48) Но ... Dec 3 2008, 13:35   SasaVitebsk Цитата(Сергей Борщ @ Dec 3 2008, 17:35) Т... Dec 3 2008, 23:53    Qwertty Цитата(SasaVitebsk @ Dec 4 2008, 02:53) В... Dec 4 2008, 04:57    Сергей Борщ Цитата(SasaVitebsk @ Dec 4 2008, 01:53) А... Dec 4 2008, 09:36 _Pasha Интересно, какие грабельки еще подкинет 16-битная ... Dec 3 2008, 14:22 Serj78 Цитата(_Pasha @ Dec 3 2008, 17:22) Интере... Dec 4 2008, 08:20 delamoure Впрочем, IAR для меня не новость
"Многостроч... Dec 4 2008, 00:52 ARV а как можно преобразовать строки для вывода на LCD... Dec 4 2008, 09:51 Сергей Борщ Цитата(ARV @ Dec 4 2008, 11:51) понимаю, ... Dec 4 2008, 10:16  ARV Цитата(Сергей Борщ @ Dec 4 2008, 13:16) Н... Dec 4 2008, 10:19   ReAl Цитата(ARV @ Dec 4 2008, 12:19) это очеви... Dec 5 2008, 11:06 zhevak Цитата(ARV @ Dec 4 2008, 14:51) а как мож... Dec 4 2008, 10:25 _Pasha Цитата(ARV @ Dec 4 2008, 13:51) а как мож... Dec 4 2008, 10:38 SasaVitebsk Стоимость LCD от 3.5$ за 2х16 до 11 за 4х20. ... Dec 4 2008, 20:56 delamoure Цитата(SasaVitebsk @ Dec 4 2008, 22:56) П... Dec 4 2008, 21:25  SasaVitebsk Цитата(delamoure @ Dec 5 2008, 01:25) В C... Dec 4 2008, 23:39 Сергей Борщ Цитата(SasaVitebsk @ Dec 4 2008, 22:56) П... Dec 5 2008, 02:41
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|