Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту


 
Опции темы
Непрочитано 02.04.2013, 16:36  
makser1
Прописка
 
Регистрация: 14.04.2009
Сообщений: 103
Сказал спасибо: 17
Сказали Спасибо 11 раз(а) в 10 сообщении(ях)
makser1 на пути к лучшему
По умолчанию Re: Изучаем STM32 Cortex M3

SasaVitebsk, именно так тоже думаю.
Реклама:
makser1 вне форума  
Непрочитано 02.04.2013, 16:53  
niXto
Почётный гражданин KAZUS.RU
 
Аватар для niXto
 
Регистрация: 13.10.2007
Адрес: Беларусь
Сообщений: 8,048
Сказал спасибо: 60
Сказали Спасибо 3,954 раз(а) в 2,309 сообщении(ях)
niXto на пути к лучшему
По умолчанию Re: Изучаем STM32 Cortex M3

Сообщение от SasaVitebsk Посмотреть сообщение
Я на AVR сейчас стараюсь не работать с битами. То есть на булевую переменную выделяю байт.
Зря. Установка-сброс бита в регистре - 1 слово программы, загрузка константы в регистр - 2. Сохранение-загрузка регистра с битами - одна команда, а не до 8, как в случае с константами. Ну и удобно групповое изменение одной командой одновременно нескольких бит (установка-сброс через логическое И, ИЛИ, инверсия через Исключающее ИЛИ), в случае с константами это минимум до 8 команд, а если нужна инверсия - то ещё прибавляется команда сравнения и переход. В итоге одни неудобства.

Уточните, какие преимущества есть у констант в регистрах на АВР по сравнению с битовыми флагами
niXto вне форума  
Непрочитано 02.04.2013, 23:56  
SasaVitebsk
Гражданин KAZUS.RU
 
Регистрация: 04.08.2006
Сообщений: 911
Сказал спасибо: 28
Сказали Спасибо 180 раз(а) в 139 сообщении(ях)
SasaVitebsk на пути к лучшему
По умолчанию Re: Изучаем STM32 Cortex M3

Сообщение от niXto Посмотреть сообщение
Уточните, какие преимущества есть у констант в регистрах на АВР по сравнению с битовыми флагами
А Вы задумывались, зачем начиная с некоторых кристаллов(например m88 ) Atmel ввёл регистры IO GPIOR?
Всё как бы просто. Биты чаще всего применяют как флаги. В одном байте флагов 8 получается. Чаще всего флаги что-то символизируют. Ну типа закончилась обработка АЦП, принят пакет по USART, таймаут по CAN, ну и так далее. То есть эти флаги глобальные. Представим, что сработал флаг завершения обработки АЦП. Я обработал результаты, что-то там сделал и сбрасываю флаг. Загружаю флаг в регистр, сбрасываю флаг в регистре - в этом месте произошло прерывание от USART и взвёлся флаг приёма пакета, находящийся в том же байте - п/п обработки прерывания закончилась и мы вернулись назад - я записываю регистр назад в байт флага. При этом флаг USART затирается.
Давайте посмотрим с другой стороны. Опять таки рассмотрим ту же AVR. Если я размещаю 1 флаг на байт, то работа с ним будет не медленнее. Таким образом Ваш выигрыш только память. 7 байт на каждые 8 флагов. Но реально их немного в программе. А всё ушло катастрофически. Одно дело я писал на x51 и у меня было 128/256 байт памяти, а совсем другое дело даже таже atmega8, что практически младший камень сейчас. Там 1к памяти. Пересмотрите проекты и Вы увидите, что памяти, как правило сейчас более чем достаточно. Причём, как правило в разы.
Бывают исключения, когда например я писал бутлоадер для той же atmega8 с 128 битным ключём и протоколом WAKE UP. Надо было в 1к флэши вогнать. Ну тогда и бог велел. Тогда я саму дешифрацию написал на ASM, разместил флаги прямо в регистре. Расчёт CRC сделал соответствующим образом тоже через регистр. И всё это указал компилятору. У меня было для m8 1 байт лишний, а для m88 - 3..
А вот давайте рассмотрим более-менее приличный проект на lpc. Ну скажем на lpc1764 или даже на той же lpc2106. Там 1 порт 32 линии. Теперь представим, что у вас в проекте RTOC любая. Прога разбита на задачи. Одна задача выводом на дисплей занимается. Вторая обработкой АЦП занимается. И всё это (и ещё куча другого) висит на одном порту. И Вам самое удобное выводить линии порта так, чтобы не задеть "чужие". И если внимательно посмотреть на порты ARM, то увидишь, что именно так они и построены.
Не всё на виду находится. Порой что-то надо переосмысливать.
===
Вот например уже упомянутые мной регисты GPIOR. Очень удобны для флагов. Но запоздали они. Как правило, когда я делаю проект под atmega8, я в первое изделие закладываю atmega88. Проект пишу так, чтобы работало на любом камне. Отлаживаю под JTAG ICE и отдаю в производство. А на серийное изделие устанавливают уже atmega8. А в меге8 регистров GPIOR нет. Поэтому я не применяю.

Короче я стараюсь не применять уникальные решения, которые труднопереносимы с камня на камень. Ты это забудешь, уже ч/з 2 месяца, а переносить придётся года через 3, и ты ругаешься потом на себя громко и в голос. Выстрадано всё.
PS: Я никого ни к чему не призываю. Я к этому пришёл. А Вы возможно своё решение найдёте. Хотя я вижу, что народ поголовно отказывается от битовых флагов. Это видно по примерам.
SasaVitebsk вне форума  
Непрочитано 03.04.2013, 00:59  
tempora
Почётный гражданин KAZUS.RU
 
Регистрация: 10.01.2007
Сообщений: 3,412
Сказал спасибо: 65
Сказали Спасибо 664 раз(а) в 443 сообщении(ях)
tempora на пути к лучшему
По умолчанию Re: Изучаем STM32 Cortex M3

Сообщение от SasaVitebsk Посмотреть сообщение
Биты чаще всего применяют как флаги. ... Ну типа закончилась обработка АЦП, принят пакет по USART, ... Представим, что сработал флаг завершения обработки АЦП. ... Загружаю ..., сбрасываю флаг ... - в этом месте произошло прерывание от USART...
Всё замечательно, но не выглядит как безусловно лучшее решение. Если Вы разрешаете вложенные прерывания, то почему не обеспечиваете атомарность операций с разделяемыми ресурсами? А если уж так не хочется это делать, что почему не храните флаги в регистрах? Инструкции установки/сброса бит в регистрах и быстрее (что в ISR особенно хорошо - 1 такт всего), и дешевле, чем RMW с переменной в ОЗУ, и атомарны, поэтому описанная Вами метода, выгодная в одних ситуациях, проигрывает в других - ?


Сообщение от SasaVitebsk Посмотреть сообщение
Вот например уже упомянутые мной регисты GPIOR. Очень удобны для флагов.
А чем они удобнее обычных регистров в этом применении? Так, навскидку, вижу только, что битовые операции там в два раза дольше выполняются, а еще чем?

Сообщение от SasaVitebsk Посмотреть сообщение
Я никого ни к чему не призываю.
Вы за последнее время уже, минимум, второй раз об этом пишете и, ЕМНИП, в предыдущем посте выражались несколько категоричнее, чем сейчас. При ближайшем рассмотрении, всё выглядит так, что единственный аргумент "ЗА" - это переносимость, при том, что есть и аргументы "ПРОТИВ", впрочем, я уже писал, что тут возможны варианты ("метода, выгодная в одних ситуациях...").
__________________
There's always more than one way to skin a cat.
tempora вне форума  
Непрочитано 03.04.2013, 08:47  
niXto
Почётный гражданин KAZUS.RU
 
Аватар для niXto
 
Регистрация: 13.10.2007
Адрес: Беларусь
Сообщений: 8,048
Сказал спасибо: 60
Сказали Спасибо 3,954 раз(а) в 2,309 сообщении(ях)
niXto на пути к лучшему
По умолчанию Re: Изучаем STM32 Cortex M3

Сообщение от tempora Посмотреть сообщение
А чем они удобнее обычных регистров в этом применении? Так, навскидку, вижу только, что битовые операции там в два раза дольше выполняются, а еще чем?
GPIOR0 лежит в области с битовым доступом (команды установка-сброс-проверка бита выполняются за 1 такт), 2 остальных регистра - действительно, обычные ячейки памяти

Сообщение от SasaVitebsk Посмотреть сообщение
Представим, что сработал флаг завершения обработки АЦП. Я обработал результаты, что-то там сделал и сбрасываю флаг. Загружаю флаг в регистр, сбрасываю флаг в регистре - в этом месте произошло прерывание от USART и взвёлся флаг приёма пакета, находящийся в том же байте - п/п обработки прерывания закончилась и мы вернулись назад - я записываю регистр назад в байт флага. При этом флаг USART затирается.
Я в своих проектах под флаги выделяю регистры старше R17 (R16 и R17 использует компилятор) или GPIOR0 если есть. Полностью атомарный доступ, без RWW. И да, вложенные прерывания на АВР - дурной вкус, и вообще, обработчики прерываний нужно делать как можно короче

А описанная вами проблема как раз встает в полный рост при использовании вместо битовых флагов констант в регистрах. Т.к. ни в АРМах, ни в АВР нет команд "запись константы в ячейку ОЗУ" - только через многоходовые операции загрузки константы в регистр и копирование регистра в ОЗУ. И что будет записано в регистр, если между этими операциями произойдет прерывание? Есть конечно битбандинг в стм32 и аналогичные механизмы в лпц, но это не выход
niXto вне форума  
Непрочитано 03.04.2013, 09:55  
SasaVitebsk
Гражданин KAZUS.RU
 
Регистрация: 04.08.2006
Сообщений: 911
Сказал спасибо: 28
Сказали Спасибо 180 раз(а) в 139 сообщении(ях)
SasaVitebsk на пути к лучшему
По умолчанию Re: Изучаем STM32 Cortex M3

И да и нет.
1. Регистры в качестве флагов я иногда выделяю. Как в упомянутом мной бутлоадере. Но это непереносимо. В буте я применил, так как он по сути своей и не будет переносится. Это бут.
2. Вопрос атомарности на байтовых флагах, практически не стоит. Как правило в одной задаче флаг только устанавливается - в другой только сбрасывается. А применение критических секций при работе с битами даёт потерю и по производительности и по размеру кода. Возникает вопрос - зачем тогда эти танцы с бубном? Выигрыша несколько байт - проигрыш - существенное усложнение.
3. Единообразность решений. Тоже не фонтан если в одном проекте вы так делаете, а в другом этак. Поэтому хотелось бы ощее решение максимально устраивающее. Я пришёл к этому. Причём самостоятельно. Наблюдаю, что многие ведут себя также.

2 niXto. Я не считаю вложенные прерывания, где бы то ни было, дурным тоном. Я постоянно этим пользуюсь. Начиналось наверное с х51. Там аппаратно было возможно. Поэтому был удручён, когда в AVR этого не обнаружил. Ну чтож, пришлось софтовым способом. Делал в проектах на ASM и на Си. Не вижу в чём тут "дурной тон". В ARM7TDMI есть аппаратный механизм FIQ/IRQ. Этого хватает. В Cortex всё аппаратно. По-моему в xMega тоже аппартно ввели. Я с ними так и не поработал. В один проект заложил, но он так и не пошёл. А сейчас как-то ориентируюсь на stm32. Они умудрились все ниши закрыть. В 2 проектах применил stm8 - жалею.
SasaVitebsk вне форума  
Сказали "Спасибо" SasaVitebsk
lsa (03.04.2013)
Непрочитано 03.04.2013, 10:44  
stmfaq
Прописка
 
Регистрация: 31.03.2013
Сообщений: 146
Сказал спасибо: 50
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
stmfaq на пути к лучшему
По умолчанию Re: Изучаем STM32 Cortex M3

Отвлеку вас немного , решил проверить сколько мой код займет на STM8, раз уж он на STM32 так сильно раздулся. В качестве компилятора взял IAR, но возникла непонятка, IAR компилирует только тот файл на закладке которого я нахожусь, весь проект полностью скомпилировать не получается, что я не так сделал? получается что если в main.c идет обращение к функции которая находится в des.c а я эту функцию из файла des.c удалил, то компиляция main.c проходит нормально. Я что то не пойму как с этим IAR работать.
Миниатюры:
Нажмите на изображение для увеличения
Название: iarscr.jpg
Просмотров: 48
Размер:	60.5 Кб
ID:	45489  
stmfaq вне форума  
Непрочитано 03.04.2013, 11:35  
Vov123
Вид на жительство
 
Регистрация: 03.06.2007
Сообщений: 368
Сказал спасибо: 3
Сказали Спасибо 59 раз(а) в 52 сообщении(ях)
Vov123 на пути к лучшему
По умолчанию Re: Изучаем STM32 Cortex M3

Может прописать его надо в свойствах проекта?
Vov123 вне форума  
Непрочитано 03.04.2013, 12:01  
SasaVitebsk
Гражданин KAZUS.RU
 
Регистрация: 04.08.2006
Сообщений: 911
Сказал спасибо: 28
Сказали Спасибо 180 раз(а) в 139 сообщении(ях)
SasaVitebsk на пути к лучшему
По умолчанию Re: Изучаем STM32 Cortex M3

Выберите Rebuild All. Если хотите, киньте мне свой проект я попробую скомпилить для stm32
SasaVitebsk вне форума  
Непрочитано 03.04.2013, 12:08  
tempora
Почётный гражданин KAZUS.RU
 
Регистрация: 10.01.2007
Сообщений: 3,412
Сказал спасибо: 65
Сказали Спасибо 664 раз(а) в 443 сообщении(ях)
tempora на пути к лучшему
По умолчанию Re: Изучаем STM32 Cortex M3

Сообщение от stmfaq Посмотреть сообщение
решил проверить сколько мой код займет на STM8, раз уж он на STM32 так сильно раздулся.
Сообщение от stmfaq Посмотреть сообщение
... IAR компилирует только тот файл на закладке которого я нахожусь, весь проект полностью скомпилировать не получается, что я не так сделал?
Это разные команды, [F7] - собрать проект, [Ctrl-F7] - компилировать текущий файл.

Сообщение от stmfaq Посмотреть сообщение
.. если в main.c идет обращение к функции которая находится в des.c а я эту функцию из файла des.c удалил, то компиляция main.c проходит нормально.
По-моему, что-то пропущено в описании ситуации...
__________________
There's always more than one way to skin a cat.
tempora вне форума  
Сказали "Спасибо" tempora
stmfaq (03.04.2013)
 

Закладки
Опции темы

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

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Школа АRMрестлинга Uragan90 Микроконтроллеры, АЦП, память и т.д 54 22.08.2011 16:13
ARM Cortex M3 + Linux SiMiLya Микроконтроллеры, АЦП, память и т.д 10 17.06.2011 17:20
Помогите с STM32 - очень нужно... yakuzaa Микроконтроллеры, АЦП, память и т.д 60 04.08.2010 11:04
Как добавить поддержку для STM32 SFHK Микроконтроллеры, АЦП, память и т.д 11 18.12.2009 18:09


Часовой пояс GMT +4, время: 17:19.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot