Офтопну , не про указатели! При работе с памятью, бывает удобно пользоваться union Например, есть структура Calibrations, в ней переменные с "именами". С помощью union можно обращаться по имени и как к массиву.
y - имеет тип long. Из x мы получаем указатель на long. В итоге получается, что в тип long мы присваиваем long* (тип указателя). Компилятор выдаст предупреждение о разности типов.
Должно быть так
Код:
long *y = (long *)(&x)
Вот из-за таких приколов (даже у опытных программистов) указатели и не любят
_________________ Иван Сусанин - первый полупроводник
Но это очень мощная штука, и этим инструментом надо пользоваться аккуратно и дозированно. Не следует делать сложно, если можно сделать просто.
Скажем, поменять местами байты в числе можно через указатели, а можно через сдвиги. И я буду делать это через сдвиги, если нет каких-то особых обстоятельств, т.к. такой код гораздо лучше переносим.
Вторая запись гораздо прозрачнее, а главное, будет работать совершенно одинаково где угодно, т.к. порядок доступа к памяти гарантируется самим компилятором. Например, операция
( (x & 0xFF00) >> 8 )
всегда вернет именно старший байт, вне зависимости от того, как они расположены в памяти.
_________________ Разница между теорией и практикой на практике гораздо больше, чем в теории.
Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ очень важен контроль процесса заряда и разряда для избегания воздействия внешнего зарядного напряжения после достижения 100% заряда. Инженеры КОМПЭЛ подготовили список таких решений от разных производителей.
Заголовок сообщения: Re: stm32 и работа со стуктурами и указателями
Добавлено: Вт апр 02, 2019 13:38:37
Родился
Зарегистрирован: Вт май 04, 2010 22:04:50 Сообщений: 8
Рейтинг сообщения:0
Ух, навалили вы тут... спасибо за ответы, с интересом почитал, но многое пока неясно мне, но это чисто иоя проблема, умения в С слишком вялые.
YS- не могу понять как тут в профиль зайти к пользователю.. вроде залогинен... Напишите ссылку свой свой блог. Пусть почти мертв, но эот не делает информацию из него менее живой.
Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре.
Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.
И будет вполне корректная операция, без всяких варнингов.
можно то можно, лишь бы понимать, что именно будет в итоге сделано - то ли, что хотелось? конкретно здесь в переменную y (не являющуюся указателем) будет помещен адрес переменной x
_________________ если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе при взгляде на многих сверху ничего не меняется...
можно то можно, лишь бы понимать, что именно будет в итоге сделано - то ли, что хотелось?
Конечно то, что хотелось - варнинг исчезнет!
Цитата:
Что это такое?
Встроенная функция CMSIS, дающая доступ к инструкции процессора, которая меняет байты местами.
Вообще, у меня есть сильное ощущение, что современный компилятор, увидев типичный для задачи перестановки байт код, сам подставит нужную инструкцию в ходе оптимизации. Можно проверить, но мне лень.
Могу сказать, что я иногда очень изумлялся, глядя дизассемблированный код, сгенерированный AVR-GCC. Мне временами казалось, что компилятор разумен.
_________________ Разница между теорией и практикой на практике гораздо больше, чем в теории.
Нашел я про порядок следования байтов в памяти. АРМ архитектура работает по little-endian, младшим вперед (LSB). (также у х86 процов интеловских). Моторола и ТСР протокол работают наоборот. Также в АРМ применяется и смешанный порядок...
_________________ Станислав
Последний раз редактировалось СКАЗОЧНИК Ср апр 03, 2019 13:35:08, всего редактировалось 1 раз.
лишь бы понимать, что именно будет в итоге сделано - то ли, что хотелось?
А мне всегда казалось, что такой подход нужно применять для любого кода, а не только для подобных строчек
Да и трудно не понять, что получим в итоге. y объявлен как переменная, и, естественно, работа с ней как с указателем будет невозможна (если не приводить её значение к указателю). Вариантов других не вижу...
а я задаю себе вопрос: а зачем простой переменной присваивать адрес другой? это ведь операция, наиболее характерная для переменной-указателя. отсюда и сомнения: а на самом ли деле написавший это хотел поместить адрес в простую переменную, или по ошибке звездочку потерял?
_________________ если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе при взгляде на многих сверху ничего не меняется...
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 33
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения