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

 
 
> Странное предупреждение
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
juvf
сообщение Jun 21 2018, 09:01
Сообщение #4


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

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



Цитата
Продолжаем думать дальше. Подсказываю ещё раз: А что будет с Вашим вариантом на memcpy()?
Что за глупость? при чем тут memcpy с отрицатеольными size_to_take? В коде ТС явно size_to_take > 0.
Цитата(jcxz @ Jun 21 2018, 13:44) *
А вот здесь: код в студию!

Код
#pragma optimize=none
unsigned int crc16_byte(unsigned int crc, unsigned int data)
{
    //const unsigned int Poly16=0xA001;
    unsigned int LSB;
    crc = ((crc^data) | 0xFF00) & (crc | 0x00FF);
    for (uint8_t i=0; i<8; i++)
    {
        LSB=(crc & 0x0001);
        crc >>= 1;
        if(LSB)
            crc=crc^0xA001;
    }
    return crc;
}
Такой код работает, если убрать прагму, то црц считается не правильно. Для фантазёров, видящих за рамками кода всякое ООП, перегрузку операторов, переопределение типов и прочую фуе ту.... перегрузки операторов нет, переопределений типов и чего либо ещё нет. тип unsigned int 16 бит!
Go to the top of the page
 
+Quote Post
scifi
сообщение Jun 21 2018, 09:07
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Цитата(juvf @ Jun 21 2018, 12:01) *
Такой код работает, если убрать прагму, то црц считается не правильно. Для фантазёров, видящих за рамками кода всякое ООП, перегрузку операторов, переопределение типов и прочую фуе ту.... перегрузки операторов нет, переопределений типов и чего либо ещё нет. тип unsigned int 16 бит!

Не видно в этом коде никакого криминала. Конечно, нельзя исключить того, что криминал возникает вне этой функции (она же не в вакууме существует). Опять же, не исключён глюк компилятора. У меня яр для coldfire неправильно считал MD5 при включенной оптимизации. Поймать его за руку на конретной инструкции сложно, так как код MD5 зубодробительный.
Go to the top of the page
 
+Quote Post
juvf
сообщение Jun 21 2018, 09:24
Сообщение #6


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

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



Цитата(scifi @ Jun 21 2018, 14:07) *
Конечно, нельзя исключить того, что криминал возникает вне этой функции (она же не в вакууме существует).
Я тоже про это думал. На весь проект стоит максимальная оптимизация по размеру кода. Дебажил на уровне Си, в асм углубляться не стал. Одна строчка #pragma optimize=none давала правильную работу расчета црц. Поэтому врят-ли что-то в остальном коде не так. Времени не было искать глюк в компиляторе или ещё где.... Видимо это был 0,1%.

кому интересно, компилятор IAR C/C++ for STM8 из иара 3,10,1
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
||- - 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
|- - adnega   Цитата(jcxz @ Jun 21 2018, 11:44) Ибо в 9...   Jun 21 2018, 09:06
- - 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 Текстовая версия Сейчас: 20th June 2025 - 21:57
Рейтинг@Mail.ru


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