powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Странный код
25 сообщений из 52, страница 1 из 3
Странный код
    #39923227
jenya7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Разбираюсь с одним модулем. Под него есть готовые библиотеки. Наткнулся на такой код
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
int16_t SPI_WIFI_ReceiveData(uint8_t *pData, uint16_t len, uint32_t timeout)
{
    int16_t length = 0;
    uint8_t tmp[2];

    while (WIFI_IS_CMDDATA_READY())
    {
         if((length < len) || (!len))
        {
            HAL_SPI_Receive_IT(&hspi, tmp, 1);
            pData[0] = tmp[0];
            pData[1] = tmp[1];
            length += 2;
            pData  += 2;
        } 
    }
 }



онии продвигают указатель
pData += 2;
но данные кладут всегда в начальные индексы
pData[0] = tmp[0];
pData[1] = tmp[1];

я что то не понимаю? по моему должно быть так
*pData++ = tmp[0];
*pData++ = tmp[1];
...
Рейтинг: 0 / 0
Странный код
    #39923253
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Насколько я понимаю, в "странном" коде единственный инкремент, а в вашем - два. Одна лишняя операция.
...
Рейтинг: 0 / 0
Странный код
    #39923260
jenya7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Basil A. Sidorov
Насколько я понимаю, в "странном" коде единственный инкремент, а в вашем - два. Одна лишняя операция.


pData += 2; не равно pData++; pData++; ?

array[index] - указывает на абсолютный адрес (?)
если мы продвинем указатель array += 2 - то array[0] - это не будет array[0+2].
...
Рейтинг: 0 / 0
Странный код
    #39923266
Фотография crutchmaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jenya7
pData += 2; не равно pData++; pData++; ?

Нет. Это же две инструкции вместо одной. Вот пустой tmp[2] меня напрягает. Откуда код? Ядро что-ли?
...
Рейтинг: 0 / 0
Странный код
    #39923269
Фотография crutchmaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
crutchmasterЯдро что-ли?

amazon-freertos-optiga-trust
...
Рейтинг: 0 / 0
Странный код
    #39923271
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jenya7
pData += 2; не равно pData++; pData++; ?
Я где-то утверждал, что не равно?
Я сказал - "одна лишняя операции".array[index] - указывает на абсолютный адрес (?)Нет в Це Pascal-евых массивов. Есть разные формы адресной арифметики.если мы продвинем указатель array += 2 - то array[0] - это не будет array[0+2].Есть массив переменных.
Можно взять указатель на начало массива и получать нужный элемент, используя индекс.
Можно менять значение указателя и получать нужный элемент без всякого индекса. Ну или "по индексу ноль", если вам угодно.
...
Рейтинг: 0 / 0
Странный код
    #39923272
jenya7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
crutchmaster
jenya7
pData += 2; не равно pData++; pData++; ?

Нет. Это же две инструкции вместо одной. Вот пустой tmp[2] меня напрягает. Откуда код? Ядро что-ли?


int i = 0;
i+=2;
результат 2.

int i = 0;
i++;
i++;
результат 2.
...
Рейтинг: 0 / 0
Странный код
    #39923275
jenya7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Basil A. Sidorov

Можно взять указатель на начало массива и получать нужный элемент, используя индекс.
Можно менять значение указателя и получать нужный элемент без всякого индекса. Ну или "по индексу ноль", если вам угодно.

если это так то это серьезный фак в С.
...
Рейтинг: 0 / 0
Странный код
    #39923289
Фотография crutchmaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jenya7
если это так то это серьезный фак в С

Нет. Жонглирование указателями, гексогеном и острыми бритвами, крутя педали одноколёсного велосипеда - обычная практика в разработке на си.
...
Рейтинг: 0 / 0
Странный код
    #39923291
Фотография crutchmaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jenya7,

Одна операция, результат - 2
Две операции, результат - 2
Если нет разницы, то зачем делать больше?
...
Рейтинг: 0 / 0
Странный код
    #39923321
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jenya7
онии продвигают указатель
pData += 2;
но данные кладут всегда в начальные индексы
pData[0] = tmp[0];
pData[1] = tmp[1];

я что то не понимаю? по моему должно быть так
*pData++ = tmp[0];
*pData++ = tmp[1];

это одно и тоже, дальше дело вкуса как читабельнее написать. На вкус и цвет все фломастеры разные (с) Лично я за исходный вариант.
...
Рейтинг: 0 / 0
Странный код
    #39923331
Фотография crutchmaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T,

Это не дело вкуса. Во втором варианте на операцию больше будет жи!
...
Рейтинг: 0 / 0
Странный код
    #39923335
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
crutchmaster
Dima T,

Это не дело вкуса. Во втором варианте на операцию больше будет жи!

Не факт, надо код после компиляции смотреть. +=2 это сложение, а ++ это инкремент, второе легче в выполнении и короче записывается.
Да и оптимизатор проца скорее всего запараллелит выполнение двух ++, т.е. в итоге получим примерно одно и тоже по производительности.
...
Рейтинг: 0 / 0
Странный код
    #39923338
Фотография Имя пользователя1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
я может чего не понимаю, но зачем здесь tmp?

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
int16_t SPI_WIFI_ReceiveData(uint8_t *pData, uint16_t len, uint32_t timeout)
{
    int16_t length = 0;

    while (WIFI_IS_CMDDATA_READY())
    {
         if((length < len) || (!len))
        {
            HAL_SPI_Receive_IT(&hspi, pData, 1);
            length += 2;
            pData  += 2;
        } 
    }
 }
...
Рейтинг: 0 / 0
Странный код
    #39923377
jenya7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
[quot Dima T#22074549]
jenya7
онии продвигают указатель
это одно и тоже, дальше дело вкуса как читабельнее написать. На вкус и цвет все фломастеры разные (с) Лично я за исходный вариант.

исходный вариант как минимум путает. нужно держать в голове что pData[0] это уже не нулевой индекс, а первый индекс текущего указателя. выстрел в ногу может мягко перейти в выстрел в голову. :)
...
Рейтинг: 0 / 0
Странный код
    #39923457
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T
Да и оптимизатор проца скорее всего запараллелит выполнение двух ++

Это вряд ли: они зависимы. А вот два независимых присваивания он запараллелит гарантированно.

jenya7
исходный вариант как минимум путает

Только слабых на голову. Но таким в области низкоуровневой оптимизации делать нечего. Таки да, первый код работает заметно быстрее второго.
...
Рейтинг: 0 / 0
Странный код
    #39923466
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov
Dima T
Да и оптимизатор проца скорее всего запараллелит выполнение двух ++

Это вряд ли: они зависимы. А вот два независимых присваивания он запараллелит гарантированно.

это может сделать оптимизатор компилятора
...
Рейтинг: 0 / 0
Странный код
    #39923468
kolobok0
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Имя пользователя1
...но зачем...


код мутный, от слова совсем.
1) есть закос на различия по платформе и дохлые компиляторы
2) нарушена общая логика в решении
3) не однозначное поведение алгоритма


индусский код одним словом...
(круглый)
...
Рейтинг: 0 / 0
Странный код
    #39923545
Фотография полудух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изопропил
Dimitry Sibiryakov
пропущено...

Это вряд ли: они зависимы. А вот два независимых присваивания он запараллелит гарантированно.

это может сделать оптимизатор компилятора

если на компилятор вешать оптимизацию, которую должен делать человек, у человека всегда будут проблемы.
...
Рейтинг: 0 / 0
Странный код
    #39923608
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А зачем там таймаут. Я полагаю можно переписать так и смысл тот-же.
+1 к tmp. Тоже убрал.
Лишние скобАчки убрал. Задлянафига нам скобАчки?
+Egyptian-style bracers. Я делаю это машинально. (Сорян привыкли руки к топорам).

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
int16_t SPI_WIFI_ReceiveData(uint8_t *pData, uint16_t len) {
    int16_t length = 0;
    while (WIFI_IS_CMDDATA_READY()) {
        if(length < len || !len) {
            HAL_SPI_Receive_IT(&hspi, pData, 1);
            length += 2;
            pData  += 2;
        } 
    }
 }



И гдеж тот господин который рекламировал PVS. Когда он нужен - его нет
...
Рейтинг: 0 / 0
Странный код
    #39923616
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jenya7
исходный вариант как минимум путает. нужно держать в голове что pData[0] это уже не нулевой индекс, а первый индекс текущего указателя. выстрел в ногу может мягко перейти в выстрел в голову. :)

По мне так все пишущие на С должны помнить как 2+2=4 что pData[1] и *(pData+1) это одно и тоже, ИМХО первая запись красивее, т.е. читабельнее, но могут быть применены обе, это не должно путать.

PS Считающие что быстрее pData+=2 учтите этот неявный +1.
...
Рейтинг: 0 / 0
Странный код
    #39923619
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Честно я-бы забил. Я чем больше смотрю на процесс разработки - тем больше уверен что correctness - важнее
чем гипотетический и недоказанный performance.

Главное - написать код без ошибок. Код который работает правильно. А оптимизации уже пойдут потом.

Кроме того интеллект компиллеров шибко крепчает и они спокойно распознают много-ходовки.
...
Рейтинг: 0 / 0
Странный код
    #39923632
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И надо еще посмотреть какие коды ошибок возвращает HAL_SPI_Receive_IT()
...
Рейтинг: 0 / 0
Странный код
    #39923634
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
полудух
если на компилятор вешать оптимизацию, которую должен делать человек, у человека всегда будут проблемы.

а должен ли?

на интеле например, давно уже i++ транслируется в ADD r,1 а не INC r

зачем мешать оптитимизатору?
...
Рейтинг: 0 / 0
Странный код
    #39923641
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я-бы переписал такой код.

Код: plaintext
1.
if(length < len || !len)



Здесь - неочевидна арифметика числовых интервалов. Ну... не в данном коде
а вообще в принципе.

Типа

Код: java
1.
len==0



Если есть возможность объединять предикаты там строгое неравенство соединить
с равенством нулю - то ябы сокращал количество предикатов.

Опять же. Не в данном коде а вообще.
...
Рейтинг: 0 / 0
25 сообщений из 52, страница 1 из 3
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Странный код
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]