Например TDA7294

Форум РадиоКот • Просмотр темы - stm32 и работа со стуктурами и указателями
Форум РадиоКот
Здесь можно немножко помяукать :)



Текущее время: Вт июн 18, 2019 05:57:11

Часовой пояс: UTC + 3 часа [ Летнее время ]


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 54 ]    , , 3
Автор Сообщение
Не в сети
 Заголовок сообщения: Re: stm32 и работа со стуктурами и указателями
СообщениеДобавлено: Вт апр 02, 2019 13:32:29 
Первый раз сказал Мяу!

Зарегистрирован: Сб янв 24, 2015 22:07:59
Сообщений: 20
Рейтинг сообщения: 0
Офтопну :))) , не про указатели!
При работе с памятью, бывает удобно пользоваться union
Например, есть структура Calibrations, в ней переменные с "именами". С помощью union можно обращаться по имени и как к массиву.

Код:
typedef struct {
   parametr_int SetPoint1;
   parametr_int DacPoint1;
   parametr_int SetPoint2;
   parametr_int DacPoint2;
   parametr_int AdcPoint1;
   parametr_int AdcPoint2;
   } Calibrations;
   
typedef union {
   parametr_int m[sizeof(Calibrations)/sizeof(parametr_int)];
   Calibrations n;
   } uCalibrations;
uCalibrations С1;
C1.n.SetPoint1=2;
C1.m[0]=2;

Еще пример
typedef union {
   uint8_t u8[2];
   uint16_t u16;
   } data;
data Ds;
Ds.u16=0xEEDD;

uint8_t r;
r=Ds.u8[1];// тот же результат r=0x00FF & (Ds.u16>>8);


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: stm32 и работа со стуктурами и указателями
СообщениеДобавлено: Вт апр 02, 2019 13:59:42 
Мучитель микросхем
Аватар пользователя

Карма: 6
Рейтинг сообщений: 83
Зарегистрирован: Пн янв 10, 2011 00:05:37
Сообщений: 423
Откуда: СССР
Рейтинг сообщения: 0
Код:
long y = (long *)(&x)


y - имеет тип long. Из x мы получаем указатель на long. В итоге получается, что в тип long мы присваиваем long* (тип указателя). Компилятор выдаст предупреждение о разности типов.

Должно быть так

Код:
long *y = (long *)(&x)


Вот из-за таких приколов (даже у опытных программистов) указатели и не любят :)))

_________________
Иван Сусанин - первый полупроводник :solder:


Вернуться наверх
 
JLCPCB, всего $2 за 10 ПП любого цвета!

Более 600 000 заказчиков по всему миру! Более 10 000 заказов в день!

Скидка до $20 на доставку для первого заказа:https://jlcpcb.com/quote

Не в сети
 Заголовок сообщения: Re: stm32 и работа со стуктурами и указателями
СообщениеДобавлено: Вт апр 02, 2019 14:23:21 
Модератор
Аватар пользователя

Карма: 77
Рейтинг сообщений: 781
Зарегистрирован: Пт мар 19, 2010 00:09:57
Сообщений: 4030
Откуда: Планета Земля
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
Myp3ik писал(а):
Компилятор выдаст предупреждение о разности типов.
Можно написать так :
Код:
long    y = (long)(&x);
И будет вполне корректная операция, без всяких варнингов.
:)

_________________
Я мненью вашему вращенье придавал, а осью был - мой детородный орган.


Вернуться наверх
 
PCBWay - всего $5 за 10 печатных плат, первый заказ для новых клиентов БЕСПЛАТЕН

Сборка печатных плат от $88 + БЕСПЛАТНАЯ доставка по всему миру + трафарет

Онлайн просмотровщик Gerber-файлов от PCBWay
Не в сети
 Заголовок сообщения: Re: stm32 и работа со стуктурами и указателями
СообщениеДобавлено: Вт апр 02, 2019 14:26:06 
Друг Кота
Аватар пользователя

Карма: 69
Рейтинг сообщений: 1176
Зарегистрирован: Вс мар 29, 2009 23:09:05
Сообщений: 7415
Рейтинг сообщения: 7
Ну, я вот указатели люблю. :)

Но это очень мощная штука, и этим инструментом надо пользоваться аккуратно и дозированно. Не следует делать сложно, если можно сделать просто.

Скажем, поменять местами байты в числе можно через указатели, а можно через сдвиги. И я буду делать это через сдвиги, если нет каких-то особых обстоятельств, т.к. такой код гораздо лучше переносим.

С указателями:

Код:
uint16_t x;
uint16_t y;

((uint8_t *)(&y))[0] = ((uint8_t *)(&x))[1];
((uint8_t *)(&y))[1] = ((uint8_t *)(&x))[0];


Со сдвигами:

Код:
uint16_t x;
uint16_t y;

y = ((x & 0x00FF) << 8) | ((x & 0xFF00) >> 8);


Вторая запись гораздо прозрачнее, а главное, будет работать совершенно одинаково где угодно, т.к. порядок доступа к памяти гарантируется самим компилятором. Например, операция

( (x & 0xFF00) >> 8 )

всегда вернет именно старший байт, вне зависимости от того, как они расположены в памяти.

_________________
Разница между теорией и практикой на практике гораздо больше, чем в теории.


Вернуться наверх
 
Приглашаем на вебинар «Создание беспроводных устройств на системах-на-кристалле семейства SimpleLink компании TI»

Компания Компэл, совместно с Texas Instruments приглашают 26 июня принять участие в вебинаре, где инженер по применению беспроводных технологий компании TI расскажет, как на новых беспроводных системах можно реализовать несколько полезнейших в повседневной жизни функций для ваших устройств.
С развитием элементной базы TI становится возможной реализация более удобных, функциональных и безопасных систем, недоступных ранее.
Вебинар проводит инженер по применению беспроводных технологий в TI Мари Хернес(будет дублированный перевод).
Подробнее>>
Не в сети
 Заголовок сообщения: Re: stm32 и работа со стуктурами и указателями
СообщениеДобавлено: Вт апр 02, 2019 14:38:37 
Родился

Зарегистрирован: Вт май 04, 2010 23:04:50
Сообщений: 8
Рейтинг сообщения: 0
Ух, навалили вы тут...
спасибо за ответы, с интересом почитал, но многое пока неясно мне, но это чисто иоя проблема, умения в С слишком вялые.

YS- не могу понять как тут в профиль зайти к пользователю.. вроде залогинен...
Напишите ссылку свой свой блог.
Пусть почти мертв, но эот не делает информацию из него менее живой.


Вернуться наверх
 
Старт складской программы по Wi-Fi/Bluetooth-чипам ESP8266 и ESP32 от Espressif

На склад КОМПЭЛ поступили чипы, модули и отладочные платы от компании Espressif Systems на базе ESP8266 и ESP32. Стоимость всех изделий данной линейки - в 2-3 раза ниже ближайших аналогов, чипы занимают минимальное место на плате, энергоэффективны и универсальны в применении.
Продукция компании популярна как среди инженеров-любителей, так и в среде разработчиков-профессионалов, которые уже смогли по достоинству оценить её качество.
Подробнее...
Не в сети
 Заголовок сообщения: Re: stm32 и работа со стуктурами и указателями
СообщениеДобавлено: Вт апр 02, 2019 14:41:50 
Ум, честь и совесть. И скромность.
Аватар пользователя

Карма: 90
Рейтинг сообщений: 1410
Зарегистрирован: Чт дек 28, 2006 09:19:56
Сообщений: 13635
Откуда: Новочеркасск
Рейтинг сообщения: 0
Медали: 2
Получил миской по аватаре (1) Мявтор 3-й степени (1)
Можно написать так :
Код:
long    y = (long)(&x);
И будет вполне корректная операция, без всяких варнингов.
:)
можно то можно, лишь бы понимать, что именно будет в итоге сделано - то ли, что хотелось? конкретно здесь в переменную y (не являющуюся указателем) будет помещен адрес переменной x

_________________
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
удивительно, но при взгляде на многих сверху ничего не меняется...


Вернуться наверх
 


Не в сети
 Заголовок сообщения: Re: stm32 и работа со стуктурами и указателями
СообщениеДобавлено: Вт апр 02, 2019 14:44:15 
Мучитель микросхем
Аватар пользователя

Карма: 6
Рейтинг сообщений: 83
Зарегистрирован: Пн янв 10, 2011 00:05:37
Сообщений: 423
Откуда: СССР
Рейтинг сообщения: 0
У STM32 поменять байты местами можно еще проще 8)

Код:
uint16_t x = 0x1234;

x = __REV16(x);

// x = 0x3412;

_________________
Иван Сусанин - первый полупроводник :solder:


Вернуться наверх
 


Не в сети
 Заголовок сообщения: Re: stm32 и работа со стуктурами и указателями
СообщениеДобавлено: Вт апр 02, 2019 15:26:39 
Идёт направо - песнь заводит, Налево - сказку говорит.
Аватар пользователя

Карма: 125
Рейтинг сообщений: 698
Зарегистрирован: Чт апр 21, 2011 18:55:50
Сообщений: 4650
Откуда: Иркутск
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
Что это такое?
__REV16(x)

_________________
Станислав


Вернуться наверх
 
Prist.ru предлагает скидку всем частным лицам при покупке приборов АКИП, GW Instek, APPA (кроме осциллографов АКИП-4115/1А, GDS-71102)!

Интересные новинки уже на складе:

Осциллограф АКИП-4126Е

Многоканальные источники питания серии GPP

Не в сети
 Заголовок сообщения: Re: stm32 и работа со стуктурами и указателями
СообщениеДобавлено: Вт апр 02, 2019 15:56:42 
Друг Кота
Аватар пользователя

Карма: 69
Рейтинг сообщений: 1176
Зарегистрирован: Вс мар 29, 2009 23:09:05
Сообщений: 7415
Рейтинг сообщения: 0
Цитата:
можно то можно, лишь бы понимать, что именно будет в итоге сделано - то ли, что хотелось?


Конечно то, что хотелось - варнинг исчезнет! :wink:

:)))

Цитата:
Что это такое?


Встроенная функция CMSIS, дающая доступ к инструкции процессора, которая меняет байты местами.

Вообще, у меня есть сильное ощущение, что современный компилятор, увидев типичный для задачи перестановки байт код, сам подставит нужную инструкцию в ходе оптимизации. Можно проверить, но мне лень. :)

Могу сказать, что я иногда очень изумлялся, глядя дизассемблированный код, сгенерированный AVR-GCC. Мне временами казалось, что компилятор разумен. :shock:

_________________
Разница между теорией и практикой на практике гораздо больше, чем в теории.


Вернуться наверх
 
Купить электронные компоненты в LCSC

Отправка со склада через 4 часа после заказа!
900 000 пользователей, 3000+ заказов в день!
Зарегистрируйтесь сегодня и получите скидку 8 долларов на первый заказ!
Не в сети
 Заголовок сообщения: Re: stm32 и работа со стуктурами и указателями
СообщениеДобавлено: Вт апр 02, 2019 15:58:59 
Ум, честь и совесть. И скромность.
Аватар пользователя

Карма: 90
Рейтинг сообщений: 1410
Зарегистрирован: Чт дек 28, 2006 09:19:56
Сообщений: 13635
Откуда: Новочеркасск
Рейтинг сообщения: 0
Медали: 2
Получил миской по аватаре (1) Мявтор 3-й степени (1)
YS писал(а):
код, сгенерированный AVR-GCC. Мне временами казалось, что компилятор разумен.
ага. а иногда думаешь, что он обкуренный ушлёпок :)

_________________
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
удивительно, но при взгляде на многих сверху ничего не меняется...


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: stm32 и работа со стуктурами и указателями
СообщениеДобавлено: Вт апр 02, 2019 16:02:55 
Друг Кота
Аватар пользователя

Карма: 69
Рейтинг сообщений: 1176
Зарегистрирован: Вс мар 29, 2009 23:09:05
Сообщений: 7415
Рейтинг сообщения: 0
Цитата:
Напишите ссылку свой свой блог.


http://embedderslife.wordpress.com/

https://habr.com/en/users/lamptester/posts/

_________________
Разница между теорией и практикой на практике гораздо больше, чем в теории.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: stm32 и работа со стуктурами и указателями
СообщениеДобавлено: Ср апр 03, 2019 11:13:45 
Идёт направо - песнь заводит, Налево - сказку говорит.
Аватар пользователя

Карма: 125
Рейтинг сообщений: 698
Зарегистрирован: Чт апр 21, 2011 18:55:50
Сообщений: 4650
Откуда: Иркутск
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
Нашел я про порядок следования байтов в памяти. АРМ архитектура работает по little-endian, младшим вперед (LSB). (также у х86 процов интеловских).
Моторола и ТСР протокол работают наоборот.
Также в АРМ применяется и смешанный порядок...

_________________
Станислав


Последний раз редактировалось СКАЗОЧНИК Ср апр 03, 2019 14:35:08, всего редактировалось 1 раз.

Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: stm32 и работа со стуктурами и указателями
СообщениеДобавлено: Ср апр 03, 2019 13:58:37 
Модератор
Аватар пользователя

Карма: 77
Рейтинг сообщений: 781
Зарегистрирован: Пт мар 19, 2010 00:09:57
Сообщений: 4030
Откуда: Планета Земля
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
лишь бы понимать, что именно будет в итоге сделано - то ли, что хотелось?
А мне всегда казалось, что такой подход нужно применять для любого кода, а не только для подобных строчек :)

Да и трудно не понять, что получим в итоге. y объявлен как переменная, и, естественно, работа с ней как с указателем будет невозможна (если не приводить её значение к указателю). Вариантов других не вижу... :dont_know:

_________________
Я мненью вашему вращенье придавал, а осью был - мой детородный орган.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: stm32 и работа со стуктурами и указателями
СообщениеДобавлено: Ср апр 03, 2019 14:06:05 
Ум, честь и совесть. И скромность.
Аватар пользователя

Карма: 90
Рейтинг сообщений: 1410
Зарегистрирован: Чт дек 28, 2006 09:19:56
Сообщений: 13635
Откуда: Новочеркасск
Рейтинг сообщения: 0
Медали: 2
Получил миской по аватаре (1) Мявтор 3-й степени (1)
Аlex писал(а):
Вариантов других не вижу...
а я задаю себе вопрос: а зачем простой переменной присваивать адрес другой? это ведь операция, наиболее характерная для переменной-указателя. отсюда и сомнения: а на самом ли деле написавший это хотел поместить адрес в простую переменную, или по ошибке звездочку потерял? :dont_know:

_________________
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
удивительно, но при взгляде на многих сверху ничего не меняется...


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 54 ]    , , 3

Часовой пояс: UTC + 3 часа [ Летнее время ]


Кто сейчас на форуме

Сейчас этот форум просматривают: Bing [Bot] и гости: 6


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y