-
- ИИ предложил так: Конечно, вот пример кода на языке C для
преобразования 24-битного значения в 32-битное с учетом знака: Бoмж(933 знак., 23.11.2024 21:58)
- Ах, да. 1-2-3-4 -- это ваш комментарий или комментарий ИИ, или
задание ему? - Бapбoc(23.11.2024 23:00)
- Это комментарий ИИ, а заданием ему был ваш первоначальный пост. Бoмж(1 знак., 23.11.2024 23:08, картинка)
- Кросавчег ваш ИИ. Моя так же сделать. Просто без оформления аки функция. Бapбoc(121 знак., 23.11.2024 22:23)
- Ах, да. 1-2-3-4 -- это ваш комментарий или комментарий ИИ, или
задание ему? - Бapбoc(23.11.2024 23:00)
- А если вот так: Tpoeшник(1 знак., 23.11.2024 10:50, картинка)
- ркуожопая сахара съела код balbes(287 знак., 10.09.2024 19:32)
Рукожопныйрозовый balbes не умеет пользоваться :) - Гyдвин(10.09.2024 19:40)- зато умеет пограмировать :) - balbes(10.09.2024 20:02)
- На телесисях было. Teлecиcтeмa(234 знак., 10.09.2024 12:59, )
- что мешает знаковое сдвинуть влево на 8? - Vit(11.09.2024 07:55)
- Наверно, можно и так, но я бы не стал на ровном месте оценивать
шансы риска. Проще беззнаковый, он каши не просит. Teлecиcтeмa(457 знак., 11.09.2024 08:27, )
- :) ну приведи к беззнаковому. ЗЫ считаю лишние юнионы глубоким
моветоном - Vit(11.09.2024 09:22)
- +1. Уж лучше промежуточная переменная и явное приведение типа. - Cкpипaч(11.09.2024 09:27)
- Знаете, я невольно начинаю дрейфовать в лагерь коллеги Крока. Скоро
2 и 2 не получится сложить без масштабного диспута... - SciFi(11.09.2024 09:29)
- Да. Чем абстрактно дискутировать лучше бы громадяне выложили код на
иных принципах, "более лучших". Так было раньше, всегда находился
энтузиаст и крутил байты и биты - Teлeчиcтeмa(11.09.2024 09:38, )
- Складывать 2 и 2 "на иных принципах" неинтересно... - SciFi(11.09.2024 09:45)
- У меня вообще аллергия на "иные принципы". Все что может быть
сделано в лоб, должно быть именно так. Можете считать это pythonic.
Ну там, явное лучше неявного,
а сладкое лучше кислого.Cкpипaч(1 знак., 11.09.2024 18:41, ссылка)- Ну, это правда, что в данной задаче есть более одной развилки: 1)
комбинировать байты арифметикой или положить в память в нужном
порядке, 2) как размножить бит знака. И вокруг этих нехитрых
развилок образуется традиционный бесконечный хоровод... - SciFi(11.09.2024 20:23)
- Надеюсь, не турецкий. - mse homjak(11.09.2024 21:40)
- Ну, это правда, что в данной задаче есть более одной развилки: 1)
комбинировать байты арифметикой или положить в память в нужном
порядке, 2) как размножить бит знака. И вокруг этих нехитрых
развилок образуется традиционный бесконечный хоровод... - SciFi(11.09.2024 20:23)
- У меня вообще аллергия на "иные принципы". Все что может быть
сделано в лоб, должно быть именно так. Можете считать это pythonic.
Ну там, явное лучше неявного,
- Складывать 2 и 2 "на иных принципах" неинтересно... - SciFi(11.09.2024 09:45)
- Да. Чем абстрактно дискутировать лучше бы громадяне выложили код на
иных принципах, "более лучших". Так было раньше, всегда находился
энтузиаст и крутил байты и биты - Teлeчиcтeмa(11.09.2024 09:38, )
- Знаете, я невольно начинаю дрейфовать в лагерь коллеги Крока. Скоро
2 и 2 не получится сложить без масштабного диспута... - SciFi(11.09.2024 09:29)
- +1. Уж лучше промежуточная переменная и явное приведение типа. - Cкpипaч(11.09.2024 09:27)
- :) ну приведи к беззнаковому. ЗЫ считаю лишние юнионы глубоким
моветоном - Vit(11.09.2024 09:22)
- Наверно, можно и так, но я бы не стал на ровном месте оценивать
шансы риска. Проще беззнаковый, он каши не просит. Teлecиcтeмa(457 знак., 11.09.2024 08:27, )
- Если нет бочечного сдвигателя, то фигня получается. Гораздо проще смотреть на 24 бит и писать его в старший байт юниона. - mse homjak(10.09.2024 17:49)
- Всё придумали до нас. Запомнил, спасибо. - Бapбoc(10.09.2024 16:41)
- Много лишних сдвигов. АЦП, весьма вероятно, - выдаёт начиная c СЗБ? Toчкa oпopы(257 знак., 10.09.2024 17:08)
- Сдвигов всего 1 или 2, а для кортекса это не проблема. Удачи! - Teлecиcтeмa(11.09.2024 08:55, )
- Я вообще не парюсь, делаю приведение типа исходного значения к массиву байт и работаю как с массивом: Nikolay_Po(772 знак., 10.09.2024 17:25)
- Много лишних сдвигов. АЦП, весьма вероятно, - выдаёт начиная c СЗБ? Toчкa oпopы(257 знак., 10.09.2024 17:08)
- что мешает знаковое сдвинуть влево на 8? - Vit(11.09.2024 07:55)
- Вот так balbes(20 знак., 09.09.2024 16:40)
- Не надо изящно, сделай понятно. - Codavr(09.09.2024 13:21)
- Я бы не выебывался. if старший бит единица, в четвертый байт
записать 0xff. - Cкpипaч(09.09.2024 09:54)
- +1. И не забыть принудительно занулить перед. - Nikolay_Po(09.09.2024 10:26)
- Таки так и сделал. - Бapбoc(09.09.2024 13:13)
- Как-то так: int32_t result = b0 + (b1 << 8) + (b2
<< 16) + (b2 & 0x80 ? 0xff000000 : 0); - SciFi(09.09.2024 14:03)
- Если архитектура не 32 бита, то нужно привести тип b2 к 32-бит.
Иначе в тип INT16 по-умолчанию не поместится. - Nikolay_Po(09.09.2024 15:34)
- Хуже того, (b1 << 8) может стать отрицательным числом. Да, есть такое. - SciFi(09.09.2024 15:42)
- Теперь посмотрите во что оно развернется в асме. :-) - Boвa(09.09.2024 14:07)
- А я так и знал, что ассемблер головного мозга - смертельно опасная
болезнь :-) - SciFi(09.09.2024 14:07)
- Гы ищо вариант на входе: в Х число из 24 битов со знаком помещенное
в 32 битный int с нулями в старшем байте, на выходе - 32 битный int
: Х=((X+0x00800000) & 0x00FFFFFF) - 0x00800000) Конечно же это для
любителей крестов и для 32 разрядников. :-) - Boвa(09.09.2024 15:03 - 15:11)
- Да-да, я видел компиляторы для восьмибитников. Они тупые, чо уж
там. А я бы специально вот такое им подсовывал, пусть скрипят
ржавыми шестерёнками. Если байты во флеше не кончились, пусть
будет. За байты уплочено! :-) - SciFi(09.09.2024 15:05)
- Кровь, кишки и мелкие индейцы без всяких если. Boвa(318 знак., 10.09.2024 12:21)
- Да-да, я видел компиляторы для восьмибитников. Они тупые, чо уж
там. А я бы специально вот такое им подсовывал, пусть скрипят
ржавыми шестерёнками. Если байты во флеше не кончились, пусть
будет. За байты уплочено! :-) - SciFi(09.09.2024 15:05)
- наоборот, спасает от ожирения кода. - =L.A.=(09.09.2024 14:53)
- Спасались от ожирения, а сгубил Альцгеймер с Паркинсоном :-) - SciFi(09.09.2024 14:54)
- Гы ищо вариант на входе: в Х число из 24 битов со знаком помещенное
в 32 битный int с нулями в старшем байте, на выходе - 32 битный int
: Х=((X+0x00800000) & 0x00FFFFFF) - 0x00800000) Конечно же это для
любителей крестов и для 32 разрядников. :-) - Boвa(09.09.2024 15:03 - 15:11)
- А я так и знал, что ассемблер головного мозга - смертельно опасная
болезнь :-) - SciFi(09.09.2024 14:07)
- Если архитектура не 32 бита, то нужно привести тип b2 к 32-бит.
Иначе в тип INT16 по-умолчанию не поместится. - Nikolay_Po(09.09.2024 15:34)
- Как-то так: int32_t result = b0 + (b1 << 8) + (b2
<< 16) + (b2 & 0x80 ? 0xff000000 : 0); - SciFi(09.09.2024 14:03)
- Таки так и сделал. - Бapбoc(09.09.2024 13:13)
- +1. И не забыть принудительно занулить перед. - Nikolay_Po(09.09.2024 10:26)
- Знаковый бит расширяете в старший байт, можно на асме. - Boвa(08.09.2024 21:02)
- Для этого нужен ПИК - Kpoк(09.09.2024 09:41)
- Ніт. Издеваться можно и на сях для кейла под MCS51 Boвa(852 знак., 09.09.2024 11:00)
- На ПИКе это выглядит цынично: SE W0,W0 - это когда у вас в
16-разрядном регистре хранится старший байт, полученный от АЦП - Kpoк(09.09.2024 13:35)
- Оно и для других процессоров вполне цынично: Прибавляем к знаковому
байту АЦП 0х80 и отнимаем от регистра старшего байта результата сам этот регистр и дополнительно флаг переноса. :-) Boвa(121 знак., 09.09.2024 14:04 - 15:10)
- А из зала кричат: сколько тактов? - Kpoк(09.09.2024 14:12)
- Оно и для других процессоров вполне цынично: Прибавляем к знаковому
байту АЦП 0х80 и отнимаем от регистра старшего байта результата сам этот регистр и дополнительно флаг переноса. :-) Boвa(121 знак., 09.09.2024 14:04 - 15:10)
- На ПИКе это выглядит цынично: SE W0,W0 - это когда у вас в
16-разрядном регистре хранится старший байт, полученный от АЦП - Kpoк(09.09.2024 13:35)
- Ніт. Издеваться можно и на сях для кейла под MCS51 Boвa(852 знак., 09.09.2024 11:00)
- Для этого нужен ПИК - Kpoк(09.09.2024 09:41)
- Вот неизящно... но почему-то лет 10 назад именно на таком остановился (keil51). POV(86 знак., 08.09.2024 20:39, картинка, картинка)
- просто получить их в переменную int32_t (в компиляторе STM32) - bnb62(08.09.2024 20:12)
- Вообще не понял извращений оказывается "8-битного мышления"
большинства советников. Эдак не не поедем... На самом деле всё до
смешного просто - 32-битная архитектура позволяет применять любую
длину данных SPI, напр. STM32 от 4 до 32 бит. В чём же загадка Сих
Изысков алгоритмом сшивания 32-бит слова. Неужели 24 бит АЦП
разбивает данные на три чем-то отдельных куска? Этот интерфейс
синхронный! - bnb62(10.09.2024 20:04)
- Модуль SPI контроллера приемлет данные длиной от 2 до 16 бит. Выбирай на вкус. - Бapбoc(11.09.2024 12:10)
- Вообще не понял извращений оказывается "8-битного мышления"
большинства советников. Эдак не не поедем... На самом деле всё до
смешного просто - 32-битная архитектура позволяет применять любую
длину данных SPI, напр. STM32 от 4 до 32 бит. В чём же загадка Сих
Изысков алгоритмом сшивания 32-бит слова. Неужели 24 бит АЦП
разбивает данные на три чем-то отдельных куска? Этот интерфейс
синхронный! - bnb62(10.09.2024 20:04)
- u8 b2,b1,b0;
out=(((s32)((s8)b2))<<16)|(b1<<8)|b0; - IBAH(08.09.2024 18:43)
- Знак потеряется. Не? - Бapбoc(08.09.2024 19:06)
- чтобы знак не потерялся, два преобразования сначала бесзнакового к
знаковому, а потом расширение до 32 - IBAH(08.09.2024 19:30)
- Как-то так: SciFi(635 знак., 09.09.2024 09:49 - 10:41)
- вместо последнего сдвига поделить на 256 - Vit(09.09.2024 14:14)
- Сдвиг и деление дают разные результаты для отрицательных чисел. - SciFi(09.09.2024 14:20)
- вроде как при делении заполнение старшего байта единичками в случае
отрицательного числа компилер будет обязан сделать. оптимизацию со
сдвигом он сделает сам, если нужно - Vit(09.09.2024 14:32)
- Это я тормознул. В данном случае разницы не будет, так как деление
без остатка. - SciFi(09.09.2024 14:33)
- разницы не будет, если компилер сдвиг гарантированно делает как нам
надо, о чем был дисклеймер. а деление обязывает сделать как надо. и
при делении на такое число очень низка вероятность использования
компилятором именно операции деления - Vit(09.09.2024 14:40)
- Вот и вот. Шланг более лучше >>> SciFi(33 знак., 09.09.2024 14:48, ссылка, ссылка)
- таки да - Vit(09.09.2024 15:30)
- Вот и вот. Шланг более лучше >>> SciFi(33 знак., 09.09.2024 14:48, ссылка, ссылка)
- разницы не будет, если компилер сдвиг гарантированно делает как нам
надо, о чем был дисклеймер. а деление обязывает сделать как надо. и
при делении на такое число очень низка вероятность использования
компилятором именно операции деления - Vit(09.09.2024 14:40)
- Это я тормознул. В данном случае разницы не будет, так как деление
без остатка. - SciFi(09.09.2024 14:33)
- вроде как при делении заполнение старшего байта единичками в случае
отрицательного числа компилер будет обязан сделать. оптимизацию со
сдвигом он сделает сам, если нужно - Vit(09.09.2024 14:32)
- Сдвиг и деление дают разные результаты для отрицательных чисел. - SciFi(09.09.2024 14:20)
- и моя традиционная реплика :-) - Kpoк(09.09.2024 10:17)
- вместо последнего сдвига поделить на 256 - Vit(09.09.2024 14:14)
- Понял. Спасибо за науку. - Бapбoc(08.09.2024 19:53)
- Я вот такой табличкой преобразования типов из книжки пользуюсь, в
этих ваших интернетах ее найти не могу, Может SciFi сможет, у него
искалка железная. IBAH(3 знак., 08.09.2024 20:26, картинка, картинка)
- Эта табличка работает для типов, поддерживаемых компилятором. Int24 не поддерживается, в частности, GCC для Arm Cortex. Отсюда и необходимость вручную. - Nikolay_Po(09.09.2024 10:33)
- Это ересь кокойты. Книгу порвать и выбросить. Не сжигать, ибо
сжигать книги - харам. В стандарте нормально расписано, не надо
перепевок этой темы, тем более таких. - SciFi(09.09.2024 09:53)
- Вызываем антиересевую команду mse homjak(1 знак., 09.09.2024 11:13, картинка)
- Я вот такой табличкой преобразования типов из книжки пользуюсь, в
этих ваших интернетах ее найти не могу, Может SciFi сможет, у него
искалка железная. IBAH(3 знак., 08.09.2024 20:26, картинка, картинка)
- Как-то так: SciFi(635 знак., 09.09.2024 09:49 - 10:41)
- чтобы знак не потерялся, два преобразования сначала бесзнакового к
знаковому, а потом расширение до 32 - IBAH(08.09.2024 19:30)
- Знак потеряется. Не? - Бapбoc(08.09.2024 19:06)
- ИИ предложил так: Конечно, вот пример кода на языке C для
преобразования 24-битного значения в 32-битное с учетом знака: Бoмж(933 знак., 23.11.2024 21:58)