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

 
 
> Странное предупреждение
Jenya7
сообщение Jun 5 2018, 05:52
Сообщение #1


Профессионал
*****

Группа: Участник
Сообщений: 1 778
Регистрация: 29-03-12
Пользователь №: 71 075



Есть такая строчка в коде
Код
for (i=0; i < size_to_take; i++)
{
      DataBuffer[i] = (data_out[j++]<<8) | data_out[j++];
}
Выскакивает предупреждение
Цитата
Warning[Pa079]: undefined behavior: variable "j" (declared at line 176) (or a value reached by some form of indirection through it) is modified more than once without an intervening
В GCC компайлере такого предупреждения нет.Что надо переделать чтоб предупреждение исчезло?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
juvf
сообщение Jun 21 2018, 07:50
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 261
Регистрация: 14-05-09
Из: Челябинск
Пользователь №: 49 045



ну на конец то предметный разговор, а не "слепая вера"

Цитата
Попробуйте когда-нить
попробую обязательно.

Цитата
Современные оптимизаторы творят чудеса. И им по-барабану Ваши жалкие потуги заменить операции индексирования на указатели и подобное - они это и сами хорошо делают, даже ещё и лучше.
Это я слышал и/или знаю.... Но, во первых, современные оптимизаторы иногда портят код так, что он не работает как надо, приходится либо отключать оптимизацию полностью, либо на отдельной функции. Во вторых про потуги вы зря.... когда мой код перестал влазить в флешь, а в прерываниях стал долго задерживаться, то сделал рефакторинг - код и влез и стал быстрее работать. Одна строчка до рефакторинга была 6 машинных команд, стала 2 или 4.
Убрал всякие лишние << |, на каждом участке экономил где по 10-20 байт флеша, где по 100.

Цитата
во-вторых: ничего не известно о значении size_to_take, а если она перед началом цикла может быть отрицательной (и i - тоже знаковое)

Морите!? О чем тут дискутировать, если вы не знаете как работает for? Если size_to_take отрицательная и i тоже знаковое, то в примере ТС в тело цикла for не разу не зайдем. Это вообще букварь Си.

Цитата
с чего Вы приводите входные аргументы к типу void *?
Да, согласен, неточность есть. Если быть скрупулёзным к явным преобразованиям, то нужно так
memcpy((void*)DataBuffer, (const void*)&data_out[j], 2*size_to_take);
Я не утверждаю, я всего лишь предположил, что копировать память лучше через memcpy. Если это не 8 и 16 бит, то забыли про мой совет. О чем спор?

Цитата
А если у ТС-а DataBuffer и data_out объявлены к примеру с модификатором volatile
И что? в чем разница вот в таких кодах с volatile (архитектура ст первый, без перевёртывания):
Вариант 1:
Код
volatile uint16_t DataBuffer[100];
volatile uint8_t data_out [1024];
uint16_t size_to_take = 100;
uint8_t j = 17;
for(uint16_t  i=0; i<size_to_take; i++ )
{
   DataBuffer[i] = (data_out[j] << 8)| data_out[j+1];
   j += 2;
}


Вариант 2:
Код
volatile uint16_t DataBuffer[100];
volatile uint8_t data_out [1024];
uint16_t size_to_take = 100;
memcpy((void*)DataBuffer, (const void*)&data_out[17], 2*size_to_take);


Или по вашему 1-ый вариант работать будет, а второй нет?



Go to the top of the page
 
+Quote Post
jcxz
сообщение Jun 21 2018, 08:44
Сообщение #3


Гуру
******

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



Цитата(juvf @ Jun 21 2018, 10:50) *
Но, во первых, современные оптимизаторы иногда портят код так, что он не работает как надо, приходится либо отключать оптимизацию полностью

А вот здесь: код в студию!
Ибо в 99.9% таких случаев причина - баг в коде. smile3046.gif
Я даже скажу больше: я при отладке кода проверяю его работу с включенной и отключенной оптимизацией - это помогает находить скрытые баги в коде.
Go to the top of the page
 
+Quote Post
adnega
сообщение Jun 21 2018, 09:06
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 2 724
Регистрация: 14-05-07
Из: Ярославль, Россия
Пользователь №: 27 702



Цитата(jcxz @ Jun 21 2018, 11:44) *
Ибо в 99.9% таких случаев причина - баг в коде. smile3046.gif

Да, но 0.1% все же баг в компиляторе.
У меня есть проект, который собирается и работает при O2 и не собирается при Os. Интересно?
Код
C:\Users\user\AppData\Local\Temp\ccShzzAY.s: Assembler messages:
C:\Users\user\AppData\Local\Temp\ccShzzAY.s:3151: Error: value of 256 too large for field of 1 bytes at 000000000000103a
make.EXE: *** [obj_sw/esp8266.o] Error 1

В asm
Код
.L276:
    .byte    (.L274-.L276)/2 - переполнение

Меняешь две строчки в Си-исходнике и проект начинает собираться.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Jenya7   Странное предупреждение   Jun 5 2018, 05:52
- - scifi   j++ два раза в одном выражении - это бяка. Результ...   Jun 5 2018, 05:54
|- - Jenya7   Цитата(scifi @ Jun 5 2018, 11:54) j++ два...   Jun 5 2018, 05:58
|- - MrYuran   Цитата(scifi @ Jun 5 2018, 08:54) j++ два...   Jun 5 2018, 06:18
- - scifi   Цитата(Jenya7 @ Jun 5 2018, 08:58) по мое...   Jun 5 2018, 06:37
|- - andrew_b   Цитата(scifi @ Jun 5 2018, 09:37) То есть...   Jun 5 2018, 06:49
||- - scifi   Цитата(andrew_b @ Jun 5 2018, 09:49) Риск...   Jun 5 2018, 07:09
||- - andrew_b   Цитата(scifi @ Jun 5 2018, 10:09) Неверно...   Jun 5 2018, 13:24
||- - Сергей Борщ   QUOTE (andrew_b @ Jun 5 2018, 16:24) Оно?...   Jun 5 2018, 15:22
|- - MrYuran   Цитата(scifi @ Jun 5 2018, 09:37) То есть...   Jun 5 2018, 07:07
|- - Jenya7   Цитата(scifi @ Jun 5 2018, 12:37) Что меш...   Jun 5 2018, 08:17
- - ViKo   А вот же похожая тема. Только в ней инкремент с др...   Jun 5 2018, 07:34
- - k155la3   Код DataBuffer[i] = (data_out[j++...   Jun 5 2018, 12:55
- - juvf   Цитата(Jenya7 @ Jun 5 2018, 10:52) Есть т...   Jun 20 2018, 07:19
|- - scifi   Цитата(juvf @ Jun 20 2018, 10:19) без вор...   Jun 20 2018, 08:59
|- - jcxz   Цитата(juvf @ Jun 20 2018, 10:19) безопас...   Jun 20 2018, 09:40
|- - juvf   Цитата(jcxz @ Jun 20 2018, 14:40) Не верю...   Jun 20 2018, 10:10
|- - jcxz   Цитата(juvf @ Jun 20 2018, 13:10) Bера в ...   Jun 20 2018, 10:24
||- - juvf   Цитата(jcxz @ Jun 20 2018, 15:24) но даже...   Jun 20 2018, 10:37
||- - jcxz   Цитата(juvf @ Jun 20 2018, 13:37) какую? ...   Jun 20 2018, 18:30
||- - adnega   Цитата(jcxz @ Jun 20 2018, 21:30) С чего ...   Jun 20 2018, 18:42
||- - jcxz   Цитата(adnega @ Jun 20 2018, 21:42) Это о...   Jun 20 2018, 19:31
||- - adnega   Цитата(jcxz @ Jun 20 2018, 22:31) И что? ...   Jun 20 2018, 20:01
|- - adnega   Цитата(juvf @ Jun 20 2018, 13:10) C memcp...   Jun 20 2018, 10:31
|- - Obam   Цитата(juvf @ Jun 20 2018, 13:10) ...ТС с...   Jun 20 2018, 18:49
|- - juvf   Цитата(Obam @ Jun 20 2018, 23:49) GCC не ...   Jun 21 2018, 04:24
|- - adnega   Цитата(juvf @ Jun 21 2018, 07:24) С чего ...   Jun 21 2018, 05:32
||- - Сергей Борщ   QUOTE (adnega @ Jun 21 2018, 08:32) ...   Jun 21 2018, 06:22
||- - VladislavS   Цитата(Сергей Борщ @ Jun 21 2018, 09:22) ...   Jun 21 2018, 07:27
|- - jcxz   Цитата(juvf @ Jun 21 2018, 07:24) Как вы ...   Jun 21 2018, 07:05
|- - juvf   Цитата(jcxz @ Jun 21 2018, 12:05) Цитата(...   Jun 22 2018, 05:11
|- - scifi   Цитата(juvf @ Jun 22 2018, 08:11) Добрый ...   Jun 22 2018, 06:55
|- - jcxz   Цитата(juvf @ Jun 22 2018, 08:11) ps пров...   Jun 22 2018, 07:37
|- - juvf   ваш ответ - тоже априори. много слюней, воды, теле...   Jun 22 2018, 09:13
|- - jcxz   Цитата(juvf @ Jun 22 2018, 12:13) Нормаль...   Jun 22 2018, 09:31
|- - juvf   Цитата(jcxz @ Jun 22 2018, 14:31) Ну, дае...   Jun 22 2018, 18:10
- - scifi   Цитата(juvf @ Jun 20 2018, 10:19) и БЫСТР...   Jun 20 2018, 12:52
|- - VladislavS   Цитата(scifi @ Jun 20 2018, 15:52) Интере...   Jun 20 2018, 17:59
|- - scifi   Цитата(juvf @ Jun 21 2018, 10:50) Но, во ...   Jun 21 2018, 08:03
||- - juvf   Цитата(scifi @ Jun 21 2018, 13:03) За так...   Jun 21 2018, 08:17
|- - jcxz   Цитата(juvf @ Jun 21 2018, 10:50) Морите...   Jun 21 2018, 08:41
|- - scifi   Цитата(juvf @ Jun 21 2018, 10:50) Или по ...   Jun 21 2018, 08:42
|- - juvf   ЦитатаПродолжаем думать дальше. Подсказываю ещё ра...   Jun 21 2018, 09:01
||- - scifi   Цитата(juvf @ Jun 21 2018, 12:01) Такой к...   Jun 21 2018, 09:07
|||- - juvf   Цитата(scifi @ Jun 21 2018, 14:07) Конечн...   Jun 21 2018, 09:24
||- - jcxz   Цитата(juvf @ Jun 21 2018, 12:01) Что за ...   Jun 21 2018, 10:18
||- - juvf   Цитата(jcxz @ Jun 21 2018, 14:53) Где это...   Jun 21 2018, 10:24
|||- - jcxz   Цитата(juvf @ Jun 21 2018, 13:24) ээээ......   Jun 21 2018, 11:06
|||- - scifi   Цитата(jcxz @ Jun 21 2018, 14:06) И по ас...   Jun 21 2018, 11:09
|||- - juvf   Цитата(jcxz @ Jun 21 2018, 16:06) При пер...   Jun 21 2018, 11:19
||- - adnega   Цитата(jcxz @ Jun 21 2018, 13:09) В приве...   Jun 21 2018, 10:25
|||- - jcxz   Цитата(adnega @ Jun 21 2018, 13:25) компи...   Jun 21 2018, 11:12
|||- - scifi   Цитата(jcxz @ Jun 21 2018, 14:10) Для так...   Jun 21 2018, 11:13
||||- - jcxz   Цитата(scifi @ Jun 21 2018, 14:13) Пожалу...   Jun 21 2018, 11:22
|||- - adnega   Цитата(jcxz @ Jun 21 2018, 14:12) Из Ваше...   Jun 21 2018, 12:01
||- - juvf   Цитата(jcxz @ Jun 21 2018, 15:18) При отл...   Jun 21 2018, 10:50
||- - scifi   Цитата(juvf @ Jun 21 2018, 13:50) inline ...   Jun 21 2018, 11:04
||- - jcxz   Цитата(juvf @ Jun 21 2018, 13:50) У меня ...   Jun 21 2018, 11:19
|||- - juvf   Цитата(jcxz @ Jun 21 2018, 16:19) Ведь ес...   Jun 21 2018, 11:46
|||- - jcxz   Цитата(juvf @ Jun 21 2018, 14:46) в waitS...   Jun 21 2018, 12:11
|||- - adnega   Цитата(jcxz @ Jun 21 2018, 15:11) PS: Есл...   Jun 21 2018, 12:57
|||- - juvf   Цитата(jcxz @ Jun 21 2018, 17:11) Вот так...   Jun 21 2018, 13:09
|||- - scifi   Цитата(juvf @ Jun 21 2018, 16:09) Дело в ...   Jun 21 2018, 13:19
||||- - juvf   ЦитатаПравильно тут уже написали про Ваш стиль: Вм...   Jun 21 2018, 14:44
|||- - adnega   Цитата(juvf @ Jun 21 2018, 16:09) Т.е. по...   Jun 21 2018, 13:34
|||- - scifi   Цитата(adnega @ Jun 21 2018, 16:34) Телеп...   Jun 21 2018, 13:40
|||- - adnega   Цитата(scifi @ Jun 21 2018, 16:40) А не л...   Jun 21 2018, 13:56
||- - jcxz   Цитата(juvf @ Jun 21 2018, 13:50) inline ...   Jun 21 2018, 11:48
||- - juvf   Цитата(jcxz @ Jun 21 2018, 16:48) описани...   Jun 21 2018, 12:29
||- - scifi   Цитата(juvf @ Jun 21 2018, 15:29) CS - не...   Jun 21 2018, 12:39
||- - jcxz   Цитата(juvf @ Jun 21 2018, 15:29) Я же го...   Jun 21 2018, 14:21
||- - adnega   Цитата(jcxz @ Jun 21 2018, 17:21) Нет, не...   Jun 21 2018, 14:47
- - Kabdim   Любопытства ради и самообразования для, не могли б...   Jun 21 2018, 11:02
|- - juvf   Цитата(Kabdim @ Jun 21 2018, 16:02) Любоп...   Jun 21 2018, 11:06
- - VladislavS   Вместо стольких слов достаточно посмотреть листинг...   Jun 21 2018, 15:52
- - jcxz   Цитата(VladislavS @ Jun 21 2018, 18:52) В...   Jun 21 2018, 16:51


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

 


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


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