STM32 Помогите изучить 32-bit Cortex STMicroelectronics
- michael-yurov
- Почётный участник
- Сообщения: 11626
- Зарегистрирован: 26 июл 2012, 00:10
- Репутация: 4634
- Настоящее имя: Михаил Львович
- Откуда: Новоуральск
- Контактная информация:
Re: STM32 Помогите изучить 32-bit Cortex STMicroelectronics
Никак не пойму,
При использовании операций деления и умножения с переменными типа int знак учитывается?
При использовании операций деления и умножения с переменными типа int знак учитывается?
- Сергей Саныч
- Мастер
- Сообщения: 9116
- Зарегистрирован: 30 май 2012, 14:20
- Репутация: 2857
- Откуда: Тюмень
- Контактная информация:
Re: STM32 Помогите изучить 32-bit Cortex STMicroelectronics
По идее - обязан. Если по умолчанию компилятор принимает int как signed. Если нет - надо переменные объявить как signed int в явном виде.michael-yurov писал(а):При использовании операций деления и умножения с переменными типа int знак учитывается?
Чудес не бывает. Бывают фокусы.
- Serg
- Мастер
- Сообщения: 21923
- Зарегистрирован: 17 апр 2012, 14:58
- Репутация: 5181
- Заслуга: c781c134843e0c1a3de9
- Настоящее имя: Сергей
- Откуда: Москва
- Контактная информация:
Re: STM32 Помогите изучить 32-bit Cortex STMicroelectronics
Просто любая переменная. Там совсем тупое сравнение: если в байтах, которые занимает переменая хоть один бит в 1, то истина.Serg-tmn писал(а):Любая целочисленная переменная в логических операциях принимается как true, если она не равна нулю.
Не нужно. Нужно если например переменная используется и в основной проге и в обработчике прерываний.michael-yurov писал(а):2. Нужно ли при создании указывать свойство «valotile», если ее значение изменяется в одной процедуре, а проверяется в другой?
Там ещё куча других оптимизаций останется.michael-yurov писал(а):4. После того, как я убрал галочку «Enable LTO», я уже не смогу использовать автоматическую оптимизацию кода?
Просто написать "var/1024", не нужно самому выполнять работу компилятора с оптимизатором.michael-yurov писал(а):5. Как максимально быстро разделить переменную типа int (32 бит с учетом знака) на 1024 (сдвинуть на 10 порядков)?
В принцие можно сделать логическое И со старшим битом, но проще написать "var<0" - пусть компилатор сам делает свою работу.michael-yurov писал(а):7. Как максимально быстро в булевом виде получить знак численной переменной?
Ну ты понял..michael-yurov писал(а):8. Как получить значение по модулю (без знака)?
9. Как инвертировать знак?
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
- michael-yurov
- Почётный участник
- Сообщения: 11626
- Зарегистрирован: 26 июл 2012, 00:10
- Репутация: 4634
- Настоящее имя: Михаил Львович
- Откуда: Новоуральск
- Контактная информация:
Re: STM32 Помогите изучить 32-bit Cortex STMicroelectronics
А чем этот случай отличается от использования разных процедур/функций?UAVpilot писал(а):Не нужно. Нужно если например переменная используется и в основной проге и в обработчике прерываний.
Обработчик прерывания чем то отличается от основной программы?
Так вот при включении любой оптимизации выпадает такая же ошибка, как и при включенном LTO.UAVpilot писал(а):Там ещё куча других оптимизаций останется.
UAVpilot писал(а):Просто написать "var/1024", не нужно самому выполнять работу компилятора с оптимизатором.
UAVpilot писал(а):В принцие можно сделать логическое И со старшим битом, но проще написать "var<0" - пусть компилатор сам делает свою работу.
Так и сделал, просто не мог привыкнуть к специфике Си после ассемблера.UAVpilot писал(а):Ну ты понял..
И про деление тоже понимаю, что если после первой операции деления на степень двойки не будет остатка, то такая операция деления займет минимальное количество тактов.
Да и чтобы сравнить один бит может потребоваться больше действий, чем для сравнения всего 32 битного числа.
Так что я понял.
- Serg
- Мастер
- Сообщения: 21923
- Зарегистрирован: 17 апр 2012, 14:58
- Репутация: 5181
- Заслуга: c781c134843e0c1a3de9
- Настоящее имя: Сергей
- Откуда: Москва
- Контактная информация:
Re: STM32 Помогите изучить 32-bit Cortex STMicroelectronics
Доступ к переменной из разных паралельных потоков без предварительных телодвижений. В этом случае оптимизатор не будет её "далеко прятать" пытаясь сэкономить память.michael-yurov писал(а):А чем этот случай отличается от использования разных процедур/функций?
Обработчик прерывания чем то отличается от основной программы?
Честно говоря я внимательно не смотрел эти галочки в кокосе, я по старинке опциями gcc... На досуге гляну.michael-yurov писал(а):Так вот при включении любой оптимизации выпадает такая же ошибка, как и при включенном LTO.
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
- michael-yurov
- Почётный участник
- Сообщения: 11626
- Зарегистрирован: 26 июл 2012, 00:10
- Репутация: 4634
- Настоящее имя: Михаил Львович
- Откуда: Новоуральск
- Контактная информация:
Re: STM32 Помогите изучить 32-bit Cortex STMicroelectronics
Частично понял.UAVpilot писал(а):Доступ к переменной из разных паралельных потоков без предварительных телодвижений. В этом случае оптимизатор не будет её "далеко прятать" пытаясь сэкономить память.
Во всяком случае - понимаю случаи, где стоит подстраховаться.
У меня пока до оптимизации дело не дошло, так что мне не срочно.UAVpilot писал(а):Честно говоря я внимательно не смотрел эти галочки в кокосе, я по старинке опциями gcc... На досуге гляну.
- Serg
- Мастер
- Сообщения: 21923
- Зарегистрирован: 17 апр 2012, 14:58
- Репутация: 5181
- Заслуга: c781c134843e0c1a3de9
- Настоящее имя: Сергей
- Откуда: Москва
- Контактная информация:
Re: STM32 Помогите изучить 32-bit Cortex STMicroelectronics
Ну вот один из вариантов оптимизации но по скорости: компилятор может в начале кода , где активно используется обычная переменная загрузить её значение из медленной памяти в быстрый регистр и все действия производить с регистром, а в конце этого участка кода выгрузить новое значение обратно в ячейку. Очевидно, что если этот участок кода прерывается обработчиком прерывания, меняющим эту переменную, то для основого кода и для обработчика там будут разные значения. Volatile запрещает компилятору такие фокусы.michael-yurov писал(а):Частично понял.
Во всяком случае - понимаю случаи, где стоит подстраховаться.
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
- michael-yurov
- Почётный участник
- Сообщения: 11626
- Зарегистрирован: 26 июл 2012, 00:10
- Репутация: 4634
- Настоящее имя: Михаил Львович
- Откуда: Новоуральск
- Контактная информация:
Re: STM32 Помогите изучить 32-bit Cortex STMicroelectronics
Не могу до конца понять - какая разница между сбрасыванием флага прерывания в начале и в конце процедуры обработки прерывания?
- Serg
- Мастер
- Сообщения: 21923
- Зарегистрирован: 17 апр 2012, 14:58
- Репутация: 5181
- Заслуга: c781c134843e0c1a3de9
- Настоящее имя: Сергей
- Откуда: Москва
- Контактная информация:
Re: STM32 Помогите изучить 32-bit Cortex STMicroelectronics
Если сбросить вначале, то твой обработчик может быть прерван другим аналогичным прерыванием, а если в конце, то можешь недосчитаться другого прерывания, произошедшего пока ты обрабатывал первое.
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
- michael-yurov
- Почётный участник
- Сообщения: 11626
- Зарегистрирован: 26 июл 2012, 00:10
- Репутация: 4634
- Настоящее имя: Михаил Львович
- Откуда: Новоуральск
- Контактная информация:
Re: STM32 Помогите изучить 32-bit Cortex STMicroelectronics
Если в конце, то все понятно. Пока не сброшу флаг, это прерывание не будет отслеживаться, процедура обработки дойдет до конца и тогда обработчик опять начнет ждать прерывания.
Понятно, что в таком случае можно прохлопать ушами, если последующее событие произойдет раньше, чем я обработаю предыдущее.
А вот если я сбросил флаг в начале, процедура обработки что-то там делает... и происходит новое событие, вызывающее это же прерывание, что тогда?
Процедура обработки оборвется в том месте, где происходила? Или все же дойдет до конца?
Понятно, что в таком случае можно прохлопать ушами, если последующее событие произойдет раньше, чем я обработаю предыдущее.
А вот если я сбросил флаг в начале, процедура обработки что-то там делает... и происходит новое событие, вызывающее это же прерывание, что тогда?
Процедура обработки оборвется в том месте, где происходила? Или все же дойдет до конца?
- Serg
- Мастер
- Сообщения: 21923
- Зарегистрирован: 17 апр 2012, 14:58
- Репутация: 5181
- Заслуга: c781c134843e0c1a3de9
- Настоящее имя: Сергей
- Откуда: Москва
- Контактная информация:
Re: STM32 Помогите изучить 32-bit Cortex STMicroelectronics
Это зависит от приоритетов. Но в конце концов конечно дойдёт. Задача программиста сделать так, что обработчики завершались в нужном порядке.
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
- michael-yurov
- Почётный участник
- Сообщения: 11626
- Зарегистрирован: 26 июл 2012, 00:10
- Репутация: 4634
- Настоящее имя: Михаил Львович
- Откуда: Новоуральск
- Контактная информация:
Re: STM32 Помогите изучить 32-bit Cortex STMicroelectronics
C приоритетами я разобрался, а вот с флагом - нет.
Допустим, у меня есть конкретный обработчик некого конкретного прерывания.
обычно процедура обработчика завершается очень быстро,
но в некоторых случаях мне необходимо выполнить функцию задержки на 0,02 мс в теле процедуры обработчика прерывания.
Так вот, если во время выполнения процедуры обработчика снова возникнет то же самое прерывание (флаг уже был сброшен в начале процедуры обработчика), требующее запуска той же процедуры обработчика, что тогда?
Допустим, у меня есть конкретный обработчик некого конкретного прерывания.
обычно процедура обработчика завершается очень быстро,
но в некоторых случаях мне необходимо выполнить функцию задержки на 0,02 мс в теле процедуры обработчика прерывания.
Так вот, если во время выполнения процедуры обработчика снова возникнет то же самое прерывание (флаг уже был сброшен в начале процедуры обработчика), требующее запуска той же процедуры обработчика, что тогда?
- Serg
- Мастер
- Сообщения: 21923
- Зарегистрирован: 17 апр 2012, 14:58
- Репутация: 5181
- Заслуга: c781c134843e0c1a3de9
- Настоящее имя: Сергей
- Откуда: Москва
- Контактная информация:
Re: STM32 Помогите изучить 32-bit Cortex STMicroelectronics
Вызовется процедура обработчика. А уж твоя задача, чтоб она не запуталась в своих копиях.
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
- Сергей Саныч
- Мастер
- Сообщения: 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
Вполне. Подойдёт любой "официальный" вариант или его точная копия. Со всякими нестандартными вариантами придется у скачанных примеров переназначать выводы, то на первых порах может быть трудно.
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
- Сергей Саныч
- Мастер
- Сообщения: 9116
- Зарегистрирован: 30 май 2012, 14:20
- Репутация: 2857
- Откуда: Тюмень
- Контактная информация:
Re: STM32 Помогите изучить 32-bit Cortex STMicroelectronics
Еще вопрос: вот у меня есть STM8S-DISCOVERY. Можно ли через ST-LINK, который в него входит, работать с STM32?UAVpilot писал(а):Вполне. Подойдёт любой "официальный" вариант или его точная копия. Со всякими нестандартными вариантами придется у скачанных примеров переназначать выводы, то на первых порах может быть трудно.
я читал, что он работает только собственно с STM8S и больше ни с чем.
Чудес не бывает. Бывают фокусы.
- Serg
- Мастер
- Сообщения: 21923
- Зарегистрирован: 17 апр 2012, 14:58
- Репутация: 5181
- Заслуга: c781c134843e0c1a3de9
- Настоящее имя: Сергей
- Откуда: Москва
- Контактная информация:
Re: STM32 Помогите изучить 32-bit Cortex STMicroelectronics
У тебя на плате уже есть встроенный ST-LINK с SWD.
А вообще если планируешь в серьёз и надолго, то советую взять отдельный ST-LINK/V2 - он умеет всё и все STM'ы.
А вообще если планируешь в серьёз и надолго, то советую взять отдельный 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
Я не про плату с stm8, а про STM32VLDISCOVERY, про которую ты спрашивал.
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
- ZiB
- Кандидат
- Сообщения: 51
- Зарегистрирован: 11 окт 2013, 12:48
- Репутация: 23
- Откуда: Томск
- Контактная информация:
Re: STM32 Помогите изучить 32-bit Cortex STMicroelectronics
Программатор на платах серии STM32 работает только с STM32, аналогично и с STM8, шьют любые из STM8L(S).Serg-tmn писал(а):Еще вопрос: вот у меня есть STM8S-DISCOVERY. Можно ли через ST-LINK, который в него входит, работать с STM32?
я читал, что он работает только собственно с STM8S и больше ни с чем.
Больше ни каких ограничений нет.