|
Интересный глюк в 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 3 2008, 11:48
|

Частый гость
 
Группа: Свой
Сообщений: 176
Регистрация: 2-04-08
Из: Днепропетровск
Пользователь №: 36 406

|
Цитата(ReAl @ Apr 18 2008, 16:50)  Уже обсуждалось. "Выбрось каку". Кака, конечно. Но если бы в IAR C было также просто вставлять ассемблерный код в текс программы как это сделано в CvAVR...
--------------------
Ребята, как же это вы без гравицапы пепелац выкатываете из гаража? Это непорядок. ©
|
|
|
|
|
Dec 3 2008, 23:53
|
Гуру
     
Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521

|
Цитата(Сергей Борщ @ Dec 3 2008, 17:35)  Тогда вам в gcc. Такого шикарного инлайн-асма в других компиляторах не встречалось. Вставленный код не мешает оптимизатору, компилятор сам решает, в каких регистрах удобнее передать параметры в ваш ассемблерный кусок... Конфетка! Не знаю как CV, но ИАР встретив в функции инлайн-асм складывает крылья и выключает оптимизатор (где-то в описании было). А я не испытал серьёзных неудобств с асмовыми вставками в IARе. (Дальнейшее к Вам Сергей не относится, так как Вы всё это знаете лучше меня, это больше для delamoure и других, выбирающих инструмент) Начнём с того, что IAR позволяет использовать inline ассемблер. В том числе и с многострочными конструкциями. Во-вторых он позволяет писать на ассемблере законченные процедуры и подключать на этапе линковки. Это на мой взгляд намного правильнее и логичнее. Прога получается значительно нагляднее и завершённее. Использование регистров компилятором детально описано, и при таком варианте я не заметил ухудшения работы оптимизатора. (А inline ассемблер не применял, по причине вышеописанной) Во втором варианте возможно использовать общие символические имена. Причём я работал со структурами, массивами, флагами именно с символьными именами. Несколько напрягает в IARе перевод всех символьных имён в регистры и константы десятичные. И это перед выдачей листинга. Ну например исходный текст int i=1234; В распечатке асмового листинга мы увидим что-то типа ldi r26,210 ldi r27,4 Я бы предпочёл увидеть что-нибудь типа ldi R26,low(1234) ldi R27,high(1234) Аналогично и с именами символическими. Хотя наверное это брюзжание.
|
|
|
|
|
Dec 4 2008, 09:36
|

Гуру
     
Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095

|
Цитата(SasaVitebsk @ Dec 4 2008, 01:53)  А я не испытал серьёзных неудобств с асмовыми вставками в IARе. .... (А inline ассемблер не применял, по причине вышеописанной)  "Асмовые вставки" == inline assembler. Они, как правильно заметил Qwertty, хороши именно тем, что не надо тратить время на сохранение регистров и вызов функции. При этом gcc позволяет в такой вставке сделать все, что угодно, а ИАР в документации честно пишет: Цитата Inline assembler sequences have no well-defined interface with the surrounding code generated from your C or C++ code. This makes the inline assembler code fragile, and will possibly also become a maintenance problem if you upgrade the compiler in the future. ... Inline assembler is therefore often best avoided. If there is no suitable intrinsic function available, we recommend the use of modules written in assembler language instead of inline assembler, because the function call to an assembler routine normally causes less performance reduction.
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
Сообщений в этой теме
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 zhevak Выбрось каку
Прошу не пинать -- прошелся поиском... Dec 2 2008, 15:52  Nick_Shl Цитата(zhevak @ Dec 2 2008, 17:52) Вопрос... Dec 3 2008, 06:15    Qwertty Цитата(SasaVitebsk @ Dec 4 2008, 02:53) В... Dec 4 2008, 04:57 _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
|
|
|