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

 
 
> Детская ошибка
amiller
сообщение May 2 2016, 06:22
Сообщение #1


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

Группа: Участник
Сообщений: 176
Регистрация: 20-02-14
Из: Томск
Пользователь №: 80 612



Недавно столкнулся с одной странностью (по крайней мере для меня). Хотелось бы понять.
Есть фрагмент года (упрощенный до безобразия):
CODE

int16u temp1, temp2;
for (int32u i = 0; i < 10; i++)
{
temp1 = 0x0001;
temp2 = 0xFFFE;
if (~temp1 != temp2) continue;
temp2 = temp1;
}

Так вот, в этом фрагменте условный оператор и код после него никогда не выполняется. В отладчике после выполнения операции "temp2 = 0xFFFE;" происходит сразу переход на начало цикла. Переменные объявлены как int16u (== unsigned short (16 бит беззнаковое))
При этом никаких предупреждений на этапе компиляции.
Если переменные объявить как int32u (== unsigned long (32 бита беззнаковое)), то условный оператор выполняется, но естественно результат всегда true.
И код работает как надо только в таком варианте:
CODE

int16u temp1, temp2;
for (int32u i = 0; i < 10; i++)
{
temp1 = 0x0001;
temp2 = 0xFFFE;
temp1 = ~temp1;
if (temp1 != temp2) continue;
temp2 = temp1;
}

В этом случае выполняются все операторы, входящие в тело цикла.
IAR C/C++ Compiler for ARM 7.40.3.8902 (7.40.3.8902)
Добавлю: Оптимизация отключена. Проект под микроконтроллер STM32F105VCT6

Сообщение отредактировал amiller - May 2 2016, 06:41
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
aiwa
сообщение May 7 2016, 22:31
Сообщение #2


Местный
***

Группа: Участник
Сообщений: 301
Регистрация: 13-12-15
Из: Харьков
Пользователь №: 89 682



Цитата(Огурцов @ May 8 2016, 00:59) *
вы можете между собой договориться, есть в предписании стандарта речь про предупреждения или нет ?

А о чем должно быть предупреждение?
В сухом остатке получается переменная булевого типа, равная нулю. А само нарушение закона двойного отрицания происходит
в процессе обработки выражения.
Причем, в старых 16-битных компиляторах обработка происходит корректно.

Go to the top of the page
 
+Quote Post
Огурцов
сообщение May 8 2016, 06:05
Сообщение #3


Гуру
******

Группа: Участник
Сообщений: 3 928
Регистрация: 28-03-07
Из: РФ
Пользователь №: 26 588



Цитата(aiwa @ May 7 2016, 22:31) *
А о чем должно быть предупреждение?

о своих действиях - выбросил код, обнаружил невыполняемый или недостижимый код - сообщи
Go to the top of the page
 
+Quote Post
ViKo
сообщение May 8 2016, 06:18
Сообщение #4


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Цитата(Огурцов @ May 8 2016, 09:05) *
о своих действиях - выбросил код, обнаружил невыполняемый или недостижимый код - сообщи

Он так и сделает, будьте patient.
У Кейла есть ключик компилятора -remarks. И тогда он мне кидает больше сотни предупреждений. Один недостаток, трудно сообщения об ошибках искать. Задаю поиск "error". sm.gif
Может, ИАР тоже так может?
Go to the top of the page
 
+Quote Post
jcxz
сообщение May 8 2016, 06:32
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(ViKo @ May 8 2016, 12:18) *
У Кейла есть ключик компилятора -remarks. И тогда он мне кидает больше сотни предупреждений. Один недостаток, трудно сообщения об ошибках искать. Задаю поиск "error". sm.gif
Может, ИАР тоже так может?

IAR всё может. Только какая польза от такого кол-ва предупреждений, если среди них трудно найти полезные и всё равно их приходится отключать?
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- amiller   Детская ошибка   May 2 2016, 06:22
- - AleksBak   А если так: Кодint16u temp1, temp2; for (int3...   May 2 2016, 07:08
|- - amiller   Цитата(AleksBak @ May 2 2016, 10:08) А ес...   May 2 2016, 07:16
|- - Сергей Борщ   QUOTE (amiller @ May 2 2016, 10:16) После...   May 2 2016, 07:24
||- - amiller   Цитата(Сергей Борщ @ May 2 2016, 10:24) М...   May 2 2016, 07:36
||- - Сергей Борщ   QUOTE (amiller @ May 2 2016, 10:36) Ну а ...   May 2 2016, 08:09
||- - amiller   Цитата(Сергей Борщ @ May 2 2016, 11:09) Д...   May 2 2016, 08:21
|- - scifi   Цитата(amiller @ May 2 2016, 10:16) Но бо...   May 2 2016, 11:30
|- - amiller   Цитата(scifi @ May 2 2016, 14:26) Вы буде...   May 2 2016, 11:35
|- - AleksBak   Цитата(amiller @ May 2 2016, 15:35) В это...   May 2 2016, 12:20
|- - GetSmart   Цитата(amiller @ May 2 2016, 15:35) В это...   May 2 2016, 13:49
||- - Baser   Цитата(GetSmart @ May 2 2016, 16:49) Обна...   May 2 2016, 16:18
||- - ViKo   Цитата(GetSmart @ May 2 2016, 16:49) Обна...   May 2 2016, 16:19
||- - Огурцов   Цитата(GetSmart @ May 2 2016, 13:49) Хоро...   May 2 2016, 16:36
||- - jcxz   Цитата(GetSmart @ May 2 2016, 19:49) Код{...   May 3 2016, 15:33
||- - GetSmart   Цитата(jcxz @ May 3 2016, 19:33) И что в ...   May 3 2016, 16:23
||- - zltigo   QUOTE (GetSmart @ May 3 2016, 19:23) Искр...   May 3 2016, 19:47
||- - GetSmart   Цитата(zltigo @ May 3 2016, 23:47) Так чт...   May 3 2016, 21:42
|- - Tahoe   Цитата(amiller @ May 2 2016, 14:35) Ошибк...   May 6 2016, 04:58
|- - amiller   Цитата(Tahoe @ May 6 2016, 07:58) 1. Стра...   May 6 2016, 06:23
||- - Tahoe   Цитата(amiller @ May 6 2016, 09:23) Если ...   May 6 2016, 08:32
|||- - scifi   Цитата(Tahoe @ May 6 2016, 11:32) Еще раз...   May 6 2016, 08:45
|||- - amiller   Цитата(Tahoe @ May 6 2016, 11:32) Еще раз...   May 6 2016, 08:58
|||- - zltigo   QUOTE (amiller @ May 6 2016, 11:58) И в о...   May 6 2016, 13:44
|||- - amiller   Цитата(zltigo @ May 6 2016, 16:44) Опять ...   May 6 2016, 14:19
|||- - scifi   Цитата(amiller @ May 6 2016, 17:19) 1. Ес...   May 6 2016, 15:29
||||- - Огурцов   Цитата(scifi @ May 6 2016, 16:29) Предупр...   May 7 2016, 16:57
||||- - scifi   Цитата(Огурцов @ May 7 2016, 19:57) а не ...   May 7 2016, 18:27
|||- - Tahoe   Цитата(amiller @ May 6 2016, 17:19) 1. Ес...   May 6 2016, 16:31
||||- - amiller   Цитата(Tahoe @ May 6 2016, 19:31) Последн...   May 7 2016, 02:52
||||- - Tahoe   Цитата(amiller @ May 7 2016, 05:52) Предс...   May 7 2016, 05:14
||||- - amiller   Цитата(Tahoe @ May 7 2016, 08:14) Предста...   May 7 2016, 05:37
||||- - svss   Цитата(amiller @ May 7 2016, 11:37) ... 5...   May 7 2016, 09:24
|||||- - zltigo   QUOTE (svss @ May 7 2016, 12:24) не полаг...   May 7 2016, 10:25
||||- - Tahoe   Цитата(amiller @ May 7 2016, 08:37) А кро...   May 7 2016, 13:47
||||- - amiller   Цитата(Tahoe @ May 7 2016, 16:47) Так мож...   May 7 2016, 14:04
||||- - Tahoe   Цитата(amiller @ May 7 2016, 17:04) сразу...   May 7 2016, 16:06
||||- - amiller   Цитата(Tahoe @ May 7 2016, 19:06) Не поня...   May 7 2016, 17:33
|||- - Сергей Борщ   QUOTE (amiller @ May 6 2016, 17:19) 2. Од...   May 6 2016, 21:37
||- - halfdoom   Цитата(amiller @ May 6 2016, 09:23) Если ...   May 9 2016, 06:43
||- - amiller   Цитата(halfdoom @ May 9 2016, 09:43) Где-...   May 9 2016, 07:54
|- - GetSmart   Цитата(Tahoe @ May 6 2016, 08:58) 3. Насч...   May 9 2016, 16:00
|- - zltigo   QUOTE (GetSmart @ May 9 2016, 19:00) Ещё ...   May 9 2016, 16:11
- - aiwa   Вообще-то да, это работа не компилятора, но редакт...   May 4 2016, 11:59
- - aiwa   Цитата(amiller @ May 7 2016, 08:37) 2. .....   May 7 2016, 07:59
- - aiwa   Цитата(Огурцов @ May 7 2016, 19:57) а не ...   May 7 2016, 20:41
- - Огурцов   вы можете между собой договориться, есть в предпис...   May 7 2016, 21:59
|- - zltigo   QUOTE (aiwa @ May 8 2016, 01:31) Причем, ...   May 8 2016, 03:44
|- - jcxz   Цитата(Огурцов @ May 8 2016, 12:05) о сво...   May 8 2016, 06:18
||- - Огурцов   > Выбросил 2+3, заменил на 5. Сообщать? скорее ...   May 8 2016, 06:53
||- - jcxz   Цитата(Огурцов @ May 8 2016, 12:53) >В...   May 8 2016, 13:30
||- - Огурцов   Цитата(jcxz @ May 8 2016, 13:30) Каким бо...   May 8 2016, 14:53
|- - ViKo   Цитата(jcxz @ May 8 2016, 09:32) IAR всё ...   May 8 2016, 07:18
- - ViKo   Прочитав тему еще раз, понял, что топикстартер при...   May 8 2016, 05:55
|- - amiller   Цитата(ViKo @ May 8 2016, 08:55) Прочитав...   May 8 2016, 09:07
- - ViKo   Keil Example1 CODE; generated by Component: ARM Co...   May 8 2016, 10:35
- - aiwa   Цитата(Огурцов @ May 8 2016, 09:05) о сво...   May 8 2016, 12:13
|- - amiller   Цитата(aiwa @ May 8 2016, 15:13) Так он в...   May 8 2016, 12:24
- - aiwa   Цитата(zltigo @ May 8 2016, 06:44) Маразм...   May 8 2016, 12:29
- - ViKo   И во что же должно продвинуться беззнаковое uint16...   May 8 2016, 12:34
- - aiwa   Цитата(amiller @ May 8 2016, 15:24) Вроде...   May 8 2016, 12:54
- - aiwa   Цитата(jcxz @ May 8 2016, 16:30) Хмммм......   May 8 2016, 14:27
- - ViKo   Правильно, продвигается до знакового целого. Но по...   May 8 2016, 14:37
|- - jcxz   Цитата(ViKo @ May 8 2016, 20:37) Правильн...   May 8 2016, 16:41
|- - Огурцов   Цитата(jcxz @ May 8 2016, 17:41) Ещё раз ...   May 8 2016, 18:19
|- - jcxz   Цитата(Огурцов @ May 9 2016, 00:19) ещё р...   May 9 2016, 08:59
- - aiwa   Цитата(ViKo @ May 8 2016, 17:37) Правильн...   May 8 2016, 14:43
- - ViKo   О! Может, топикстартер все же напутал с опреде...   May 8 2016, 14:45
|- - amiller   Цитата(ViKo @ May 8 2016, 17:45) О! М...   May 8 2016, 15:04
- - aiwa   Цитата(ViKo @ May 8 2016, 17:45) О! М...   May 8 2016, 15:24
- - ViKo   Почему никто не комментирует листинги от Кейла? Вс...   May 8 2016, 15:45
- - aiwa   Цитата(ViKo @ May 8 2016, 18:40) Почему н...   May 8 2016, 15:53
- - ViKo   Кейл, он же Кайл, он же Keil (нем.), он же куплен ...   May 8 2016, 15:57
|- - scifi   Цитата(ViKo @ May 8 2016, 18:57) Кейл, он...   May 8 2016, 16:43
|- - jcxz   Цитата(ViKo @ May 8 2016, 21:57) Кейл, он...   May 8 2016, 17:00
- - aiwa   Цитата(ViKo @ May 8 2016, 18:57) Кейл, он...   May 8 2016, 16:20
- - ViKo   Дополню для ясности. У Cortex-M команды - THUMB2 -...   May 8 2016, 18:11
- - ViKo   Таки да, операция ~temp1 дает число 0xFFFFFFFE. Во...   May 8 2016, 19:42
- - aiwa   Цитата(ViKo @ May 8 2016, 22:42) Таки да,...   May 8 2016, 22:52
- - aiwa   Цитата(halfdoom @ May 9 2016, 09:43) Пере...   May 9 2016, 11:10
|- - zltigo   QUOTE (aiwa @ May 9 2016, 14:10) В резуль...   May 9 2016, 11:56
||- - svss   Цитата(zltigo @ May 9 2016, 17:56) Если ...   May 10 2016, 05:13
|- - halfdoom   Цитата(aiwa @ May 9 2016, 14:10) В резуль...   May 9 2016, 14:51
- - aiwa   Цитата(zltigo @ May 9 2016, 14:56) Если ...   May 9 2016, 12:41
|- - scifi   Цитата(aiwa @ May 9 2016, 15:41) Вы вопро...   May 9 2016, 12:49
||- - jcxz   Цитата(scifi @ May 9 2016, 18:49) Было бы...   May 9 2016, 16:51
|- - zltigo   QUOTE (aiwa @ May 9 2016, 15:41) Вы вопро...   May 9 2016, 13:38
|- - dxp   QUOTE (zltigo @ May 9 2016, 19:38) Python...   May 9 2016, 16:29
|- - zltigo   QUOTE (dxp @ May 9 2016, 19:29) Питон - в...   May 9 2016, 16:57
|- - dxp   QUOTE (zltigo @ May 9 2016, 22:57) Ага. Б...   May 10 2016, 06:57
- - aiwa   Цитата(halfdoom @ May 9 2016, 17:51) Если...   May 9 2016, 23:30
|- - halfdoom   Цитата(aiwa @ May 10 2016, 02:30) наводит...   May 10 2016, 04:20
|- - aiwa   Цитата(halfdoom @ May 10 2016, 07:20) Ста...   May 10 2016, 07:58
|- - scifi   Цитата(aiwa @ May 10 2016, 10:58) повторю...   May 10 2016, 08:13
|- - halfdoom   Цитата(aiwa @ May 10 2016, 10:58) Все дов...   May 10 2016, 08:49
- - aiwa   Цитата(scifi @ May 10 2016, 11:13) Код, к...   May 10 2016, 09:43
2 страниц V   1 2 >


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

 


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


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