STM32 Помогите изучить 32-bit Cortex STMicroelectronics

Контроллеры, драйверы, датчики, управляющие устройства.
Аватара пользователя
michael-yurov
Почётный участник
Почётный участник
Сообщения: 11624
Зарегистрирован: 26 июл 2012, 00:10
Репутация: 4634
Настоящее имя: Михаил Львович
Откуда: Новоуральск
Контактная информация:

Re: STM32 Помогите изучить 32-bit Cortex STMicroelectronics

Сообщение michael-yurov »

Никак не пойму,
При использовании операций деления и умножения с переменными типа int знак учитывается?
Аватара пользователя
Сергей Саныч
Мастер
Сообщения: 9116
Зарегистрирован: 30 май 2012, 14:20
Репутация: 2857
Откуда: Тюмень
Контактная информация:

Re: STM32 Помогите изучить 32-bit Cortex STMicroelectronics

Сообщение Сергей Саныч »

michael-yurov писал(а):При использовании операций деления и умножения с переменными типа int знак учитывается?
По идее - обязан. Если по умолчанию компилятор принимает int как signed. Если нет - надо переменные объявить как signed int в явном виде.
Чудес не бывает. Бывают фокусы.
Аватара пользователя
Serg
Мастер
Сообщения: 21923
Зарегистрирован: 17 апр 2012, 14:58
Репутация: 5181
Заслуга: c781c134843e0c1a3de9
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

Re: STM32 Помогите изучить 32-bit Cortex STMicroelectronics

Сообщение Serg »

Serg-tmn писал(а):Любая целочисленная переменная в логических операциях принимается как true, если она не равна нулю.
Просто любая переменная. Там совсем тупое сравнение: если в байтах, которые занимает переменая хоть один бит в 1, то истина.
michael-yurov писал(а):2. Нужно ли при создании указывать свойство «valotile», если ее значение изменяется в одной процедуре, а проверяется в другой?
Не нужно. Нужно если например переменная используется и в основной проге и в обработчике прерываний.
michael-yurov писал(а):4. После того, как я убрал галочку «Enable LTO», я уже не смогу использовать автоматическую оптимизацию кода?
Там ещё куча других оптимизаций останется.
michael-yurov писал(а):5. Как максимально быстро разделить переменную типа int (32 бит с учетом знака) на 1024 (сдвинуть на 10 порядков)?
Просто написать "var/1024", не нужно самому выполнять работу компилятора с оптимизатором. :)
michael-yurov писал(а):7. Как максимально быстро в булевом виде получить знак численной переменной?
В принцие можно сделать логическое И со старшим битом, но проще написать "var<0" - пусть компилатор сам делает свою работу. :)
michael-yurov писал(а):8. Как получить значение по модулю (без знака)?
9. Как инвертировать знак?
Ну ты понял.. :hehehe:
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
Аватара пользователя
michael-yurov
Почётный участник
Почётный участник
Сообщения: 11624
Зарегистрирован: 26 июл 2012, 00:10
Репутация: 4634
Настоящее имя: Михаил Львович
Откуда: Новоуральск
Контактная информация:

Re: STM32 Помогите изучить 32-bit Cortex STMicroelectronics

Сообщение michael-yurov »

UAVpilot писал(а):Не нужно. Нужно если например переменная используется и в основной проге и в обработчике прерываний.
А чем этот случай отличается от использования разных процедур/функций?
Обработчик прерывания чем то отличается от основной программы?
UAVpilot писал(а):Там ещё куча других оптимизаций останется.
Так вот при включении любой оптимизации выпадает такая же ошибка, как и при включенном LTO.
UAVpilot писал(а):Просто написать "var/1024", не нужно самому выполнять работу компилятора с оптимизатором.
UAVpilot писал(а):В принцие можно сделать логическое И со старшим битом, но проще написать "var<0" - пусть компилатор сам делает свою работу.
UAVpilot писал(а):Ну ты понял.. :hehehe:
Так и сделал, просто не мог привыкнуть к специфике Си после ассемблера. :wik:
И про деление тоже понимаю, что если после первой операции деления на степень двойки не будет остатка, то такая операция деления займет минимальное количество тактов.
Да и чтобы сравнить один бит может потребоваться больше действий, чем для сравнения всего 32 битного числа.
Так что я понял. :hehehe:
Аватара пользователя
Serg
Мастер
Сообщения: 21923
Зарегистрирован: 17 апр 2012, 14:58
Репутация: 5181
Заслуга: c781c134843e0c1a3de9
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

Re: STM32 Помогите изучить 32-bit Cortex STMicroelectronics

Сообщение Serg »

michael-yurov писал(а):А чем этот случай отличается от использования разных процедур/функций?
Обработчик прерывания чем то отличается от основной программы?
Доступ к переменной из разных паралельных потоков без предварительных телодвижений. В этом случае оптимизатор не будет её "далеко прятать" пытаясь сэкономить память.
michael-yurov писал(а):Так вот при включении любой оптимизации выпадает такая же ошибка, как и при включенном LTO.
Честно говоря я внимательно не смотрел эти галочки в кокосе, я по старинке опциями gcc... :) На досуге гляну.
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
Аватара пользователя
michael-yurov
Почётный участник
Почётный участник
Сообщения: 11624
Зарегистрирован: 26 июл 2012, 00:10
Репутация: 4634
Настоящее имя: Михаил Львович
Откуда: Новоуральск
Контактная информация:

Re: STM32 Помогите изучить 32-bit Cortex STMicroelectronics

Сообщение michael-yurov »

UAVpilot писал(а):Доступ к переменной из разных паралельных потоков без предварительных телодвижений. В этом случае оптимизатор не будет её "далеко прятать" пытаясь сэкономить память.
Частично понял.
Во всяком случае - понимаю случаи, где стоит подстраховаться.
UAVpilot писал(а):Честно говоря я внимательно не смотрел эти галочки в кокосе, я по старинке опциями gcc... На досуге гляну.
У меня пока до оптимизации дело не дошло, так что мне не срочно.
Аватара пользователя
Serg
Мастер
Сообщения: 21923
Зарегистрирован: 17 апр 2012, 14:58
Репутация: 5181
Заслуга: c781c134843e0c1a3de9
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

Re: STM32 Помогите изучить 32-bit Cortex STMicroelectronics

Сообщение Serg »

michael-yurov писал(а):Частично понял.
Во всяком случае - понимаю случаи, где стоит подстраховаться.
Ну вот один из вариантов оптимизации но по скорости: компилятор может в начале кода , где активно используется обычная переменная загрузить её значение из медленной памяти в быстрый регистр и все действия производить с регистром, а в конце этого участка кода выгрузить новое значение обратно в ячейку. Очевидно, что если этот участок кода прерывается обработчиком прерывания, меняющим эту переменную, то для основого кода и для обработчика там будут разные значения. Volatile запрещает компилятору такие фокусы.
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
Аватара пользователя
michael-yurov
Почётный участник
Почётный участник
Сообщения: 11624
Зарегистрирован: 26 июл 2012, 00:10
Репутация: 4634
Настоящее имя: Михаил Львович
Откуда: Новоуральск
Контактная информация:

Re: STM32 Помогите изучить 32-bit Cortex STMicroelectronics

Сообщение michael-yurov »

Не могу до конца понять - какая разница между сбрасыванием флага прерывания в начале и в конце процедуры обработки прерывания?
Аватара пользователя
Serg
Мастер
Сообщения: 21923
Зарегистрирован: 17 апр 2012, 14:58
Репутация: 5181
Заслуга: c781c134843e0c1a3de9
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

Re: STM32 Помогите изучить 32-bit Cortex STMicroelectronics

Сообщение Serg »

Если сбросить вначале, то твой обработчик может быть прерван другим аналогичным прерыванием, а если в конце, то можешь недосчитаться другого прерывания, произошедшего пока ты обрабатывал первое. :)
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
Аватара пользователя
michael-yurov
Почётный участник
Почётный участник
Сообщения: 11624
Зарегистрирован: 26 июл 2012, 00:10
Репутация: 4634
Настоящее имя: Михаил Львович
Откуда: Новоуральск
Контактная информация:

Re: STM32 Помогите изучить 32-bit Cortex STMicroelectronics

Сообщение michael-yurov »

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

А вот если я сбросил флаг в начале, процедура обработки что-то там делает... и происходит новое событие, вызывающее это же прерывание, что тогда?
Процедура обработки оборвется в том месте, где происходила? Или все же дойдет до конца?
Аватара пользователя
Serg
Мастер
Сообщения: 21923
Зарегистрирован: 17 апр 2012, 14:58
Репутация: 5181
Заслуга: c781c134843e0c1a3de9
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

Re: STM32 Помогите изучить 32-bit Cortex STMicroelectronics

Сообщение Serg »

Это зависит от приоритетов. Но в конце концов конечно дойдёт. Задача программиста сделать так, что обработчики завершались в нужном порядке.
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
Аватара пользователя
michael-yurov
Почётный участник
Почётный участник
Сообщения: 11624
Зарегистрирован: 26 июл 2012, 00:10
Репутация: 4634
Настоящее имя: Михаил Львович
Откуда: Новоуральск
Контактная информация:

Re: STM32 Помогите изучить 32-bit Cortex STMicroelectronics

Сообщение michael-yurov »

C приоритетами я разобрался, а вот с флагом - нет.

Допустим, у меня есть конкретный обработчик некого конкретного прерывания.
обычно процедура обработчика завершается очень быстро,
но в некоторых случаях мне необходимо выполнить функцию задержки на 0,02 мс в теле процедуры обработчика прерывания.
Так вот, если во время выполнения процедуры обработчика снова возникнет то же самое прерывание (флаг уже был сброшен в начале процедуры обработчика), требующее запуска той же процедуры обработчика, что тогда?
Аватара пользователя
Serg
Мастер
Сообщения: 21923
Зарегистрирован: 17 апр 2012, 14:58
Репутация: 5181
Заслуга: c781c134843e0c1a3de9
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

Re: STM32 Помогите изучить 32-bit Cortex STMicroelectronics

Сообщение Serg »

Вызовется процедура обработчика. А уж твоя задача, чтоб она не запуталась в своих копиях.
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
Аватара пользователя
Сергей Саныч
Мастер
Сообщения: 9116
Зарегистрирован: 30 май 2012, 14:20
Репутация: 2857
Откуда: Тюмень
Контактная информация:

Re: STM32 Помогите изучить 32-bit Cortex STMicroelectronics

Сообщение Сергей Саныч »

UAVpilot, как считаешь, STM32VLDISCOVERY http://www.elitan.ru/price/bignote.php?nt=5108239 подойдет для первоначального знакомства с STM32?
Чудес не бывает. Бывают фокусы.
Аватара пользователя
Serg
Мастер
Сообщения: 21923
Зарегистрирован: 17 апр 2012, 14:58
Репутация: 5181
Заслуга: c781c134843e0c1a3de9
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

Re: STM32 Помогите изучить 32-bit Cortex STMicroelectronics

Сообщение Serg »

Вполне. Подойдёт любой "официальный" вариант или его точная копия. Со всякими нестандартными вариантами придется у скачанных примеров переназначать выводы, то на первых порах может быть трудно.
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
Аватара пользователя
Сергей Саныч
Мастер
Сообщения: 9116
Зарегистрирован: 30 май 2012, 14:20
Репутация: 2857
Откуда: Тюмень
Контактная информация:

Re: STM32 Помогите изучить 32-bit Cortex STMicroelectronics

Сообщение Сергей Саныч »

UAVpilot писал(а):Вполне. Подойдёт любой "официальный" вариант или его точная копия. Со всякими нестандартными вариантами придется у скачанных примеров переназначать выводы, то на первых порах может быть трудно.
Еще вопрос: вот у меня есть STM8S-DISCOVERY. Можно ли через ST-LINK, который в него входит, работать с STM32?
я читал, что он работает только собственно с STM8S и больше ни с чем.
Чудес не бывает. Бывают фокусы.
Аватара пользователя
Serg
Мастер
Сообщения: 21923
Зарегистрирован: 17 апр 2012, 14:58
Репутация: 5181
Заслуга: c781c134843e0c1a3de9
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

Re: STM32 Помогите изучить 32-bit Cortex STMicroelectronics

Сообщение Serg »

У тебя на плате уже есть встроенный ST-LINK с SWD.
А вообще если планируешь в серьёз и надолго, то советую взять отдельный ST-LINK/V2 - он умеет всё и все STM'ы.
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
Аватара пользователя
Сергей Саныч
Мастер
Сообщения: 9116
Зарегистрирован: 30 май 2012, 14:20
Репутация: 2857
Откуда: Тюмень
Контактная информация:

Re: STM32 Помогите изучить 32-bit Cortex STMicroelectronics

Сообщение Сергей Саныч »

UAVpilot писал(а):У тебя на плате уже есть встроенный ST-LINK с SWD.
Есть, и его даже отломить можно от основной части платы. Только, как я понял, у него возможности ограничены, скорее всего программно.
Чудес не бывает. Бывают фокусы.
Аватара пользователя
Serg
Мастер
Сообщения: 21923
Зарегистрирован: 17 апр 2012, 14:58
Репутация: 5181
Заслуга: c781c134843e0c1a3de9
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

Re: STM32 Помогите изучить 32-bit Cortex STMicroelectronics

Сообщение Serg »

Я не про плату с stm8, а про STM32VLDISCOVERY, про которую ты спрашивал.
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
Аватара пользователя
ZiB
Кандидат
Сообщения: 51
Зарегистрирован: 11 окт 2013, 12:48
Репутация: 23
Откуда: Томск
Контактная информация:

Re: STM32 Помогите изучить 32-bit Cortex STMicroelectronics

Сообщение ZiB »

Serg-tmn писал(а):Еще вопрос: вот у меня есть STM8S-DISCOVERY. Можно ли через ST-LINK, который в него входит, работать с STM32?
я читал, что он работает только собственно с STM8S и больше ни с чем.
Программатор на платах серии STM32 работает только с STM32, аналогично и с STM8, шьют любые из STM8L(S).
Больше ни каких ограничений нет.
Ответить

Вернуться в «Электроника»