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

 
 
> Интересный глюк в CodeVisionAVR
DMD
сообщение Apr 17 2008, 09:02
Сообщение #1


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

Группа: Свой
Сообщений: 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


Интересно, зачем это надо или это просто баг??..


--------------------
Все будет хорошо! Я проверял!
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
ReAl
сообщение Apr 18 2008, 14:50
Сообщение #2


Нечётный пользователь.
******

Группа: Свой
Сообщений: 2 033
Регистрация: 26-05-05
Из: Бровари, Україна
Пользователь №: 5 417



Цитата(DMD @ Apr 17 2008, 12:02) *
Обнаружил интересный глюк в CodeVision, целый день вчера просидел - думал во мне дело, оказалось, что нет.

Уже обсуждалось. "Выбрось каку".


--------------------
Ну, я пошёл… Если что – звоните…
Go to the top of the page
 
+Quote Post
delamoure
сообщение Dec 3 2008, 11:48
Сообщение #3


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

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



Цитата(ReAl @ Apr 18 2008, 16:50) *
Уже обсуждалось. "Выбрось каку".


Кака, конечно.
Но если бы в IAR C было также просто вставлять ассемблерный код в текс программы как это сделано в CvAVR... crying.gif


--------------------
Ребята, как же это вы без гравицапы пепелац выкатываете из гаража? Это непорядок. ©
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Dec 3 2008, 13:35
Сообщение #4


Гуру
******

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



Цитата(delamoure @ Dec 3 2008, 13:48) *
Но если бы в IAR C было также просто вставлять ассемблерный код в текс программы как это сделано в CvAVR... crying.gif
Тогда вам в gcc. Такого шикарного инлайн-асма в других компиляторах не встречалось. Вставленный код не мешает оптимизатору, компилятор сам решает, в каких регистрах удобнее передать параметры в ваш ассемблерный кусок... Конфетка! Не знаю как CV, но ИАР встретив в функции инлайн-асм складывает крылья и выключает оптимизатор (где-то в описании было).


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
SasaVitebsk
сообщение Dec 3 2008, 23:53
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 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)
Аналогично и с именами символическими. Хотя наверное это брюзжание. smile.gif
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Dec 4 2008, 09:36
Сообщение #6


Гуру
******

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



Цитата(SasaVitebsk @ Dec 4 2008, 01:53) *
А я не испытал серьёзных неудобств с асмовыми вставками в IARе.
....
(А inline ассемблер не применял, по причине вышеописанной)
smile.gif "Асмовые вставки" == 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)
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- 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


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

 


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


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