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

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

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

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

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

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


 
Опции темы
Непрочитано 31.01.2013, 23:01  
TAutomatic
Временная регистрация
 
Регистрация: 18.07.2012
Сообщений: 73
Сказал спасибо: 4
Сказали Спасибо 5 раз(а) в 5 сообщении(ях)
TAutomatic на пути к лучшему
По умолчанию Re: Изучаем STM32 Cortex M3

Получается, у меня не чтение чуток рановато,я не совсем разобрался с механизмом формирования ACK и NAK. В более привычной мне среде бит подверждения устанвливался или нет в зависимости от логики вручную установкой соответствующего бита. В STM32F1 он устанавливается автоматически и только перед чтением последнего байте в блоке нужно поставить запрет его выдачи. Теперь понятно.
К слову, да заработало. Вам, Boba_spb спасибоза помощь.
Но остался один момент. Вся эта конструкция, я имею ввиду обмен по I2C - чрезвычайно "хрупкая вещь" при работе под отладчиком. Может это только под отладчиком? Стоит остановиться гдето посередине, контроллер стоит в бесконечном цикле и вывести его я не могу. Только переподключение питания. Если не останавливаться в середине - все работает нормально. Есть опасения что в серийном изделии он тоже также станет в ступор. Получается, нужно делать выход из циклов ожидания по таймауту, передергивать ноги портов и снова пытаться связаться. Как коллеги выходят из такой ситуации и вообще бывает ли она в STM32F1?
Реклама:
TAutomatic вне форума  
Непрочитано 31.01.2013, 23:13  
Easyrider83
Гуру портала
 
Аватар для Easyrider83
 
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,835
Сказал спасибо: 919
Сказали Спасибо 4,308 раз(а) в 2,573 сообщении(ях)
Easyrider83 на пути к лучшему
По умолчанию Re: Изучаем STM32 Cortex M3

Нельзя вечно ждать какого-то события, которое зависит от железа. Таймаут обязателен. И лучше до начала работы послать на шину RESET.
Easyrider83 вне форума  
Непрочитано 31.01.2013, 23:23  
TAutomatic
Временная регистрация
 
Регистрация: 18.07.2012
Сообщений: 73
Сказал спасибо: 4
Сказали Спасибо 5 раз(а) в 5 сообщении(ях)
TAutomatic на пути к лучшему
По умолчанию Re: Изучаем STM32 Cortex M3

Сообщение от Easyrider83 Посмотреть сообщение
Нельзя вечно ждать какого-то события, которое зависит от железа. Таймаут обязателен. И лучше до начала работы послать на шину RESET.
Это понятно, я не спорю. Для начала такой таймаут делаешь для перестраховки. Потом понимаешь, контроллер в связке с EEPROM работает настолько надежно, что нет смысла ставить таймаут, начинаешь жлобиться даже на эти 5-6 строк кода. Но это упрощение и оправдано и подтверждено работой, мы выпускаем приборы сотнями штук, если были бы проблемы, пользователи завалили бы рекламациями. Но вроде Бог миловал. Но я точно видел, что если сделать остановку внутрисхемным отладчиком в ПИКе внутри кода работы по I2C, он дальше продолжает работать, никаких ступоров не бывает. Тут другая ситуация, ступоры есть, но и отладчик другой, он считывает переменные и бывает, мешает контроллеру. Столкнулся с таким при работе SPI с DMA.
TAutomatic вне форума  
Непрочитано 31.01.2013, 23:44  
Boba_spb
Почётный гражданин KAZUS.RU
 
Регистрация: 08.06.2008
Сообщений: 1,394
Сказал спасибо: 4
Сказали Спасибо 183 раз(а) в 167 сообщении(ях)
Boba_spb на пути к лучшему
По умолчанию Re: Изучаем STM32 Cortex M3

Да не очень хрупкая -распространненный интерфейс. Чуть что "СТОП" на линию. и все должны придти в ожидания "Старт". А затем со "Старт" и начинать.

Как то давно у меня было подозрение, что если долго окончания операции не дожидался кто то , то переходил в режим ожидания старта. Но это могло показаться - давно это было. По I2C в основном с часиками общался - проблем не было. А сейчас перешел на STM там часики уже встроены. Так что I2c уж вряд ли когда пригодится.
Boba_spb вне форума  
Непрочитано 01.02.2013, 00:09  
Boba_spb
Почётный гражданин KAZUS.RU
 
Регистрация: 08.06.2008
Сообщений: 1,394
Сказал спасибо: 4
Сказали Спасибо 183 раз(а) в 167 сообщении(ях)
Boba_spb на пути к лучшему
По умолчанию Re: Изучаем STM32 Cortex M3

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

Сообщение от TAutomatic Посмотреть сообщение
...Уровень оптимизации всегда стоит 0. И сравнивал, кстати, код Пика и АРМа тоже в одинаковых условиях, при отключенной оптимизации. Оптимизация я включаю только по завершению проектов.
Дело в том, что я не считаю себя новичком в программировании микроконтроллеров...
Да вы себе льстите. Оптимизация 0 предназначена для генерации пооператорно и никогда не используется. Я включаю максимальный уровень на нём пишу на нём и отлаживаю. История помнит лишь пару случаев, когда приходилось выключать оптимизацию. Чтобы вам понятней было, в двух последовательных операторах компилятор сгенерит сохранение в переменную а потом опять загрузку. Вы путаете оптимизацию алгоритма, которую вы должны выполнять сами и компилятор здесь вам сможет помочь лишь незначительно. И оптимизацию преобразования Си операторов в ASM инструкции, которая мало зависит от вашего мастерства, а зависит от проффессианализма разработчиков компилятора.
****
Компилятор IAR ARM 6.40.2/ процессор stm32f107/ оптимизация none
20 310 bytes of readonly code memory
729 bytes of readonly data memory
2 397 bytes of readwrite data memory

Компилятор IAR ARM 6.40.2/ процессор stm32f107/ оптимизация high balansed
12 978 bytes of readonly code memory
186 bytes of readonly data memory
2 401 bytes of readwrite data memory

(12978+186)/(20310+729) = 13164/21039 = 63%

Итого ваш 24 кб код превратится в 15к, что я и говорил.
SasaVitebsk вне форума  
Непрочитано 01.02.2013, 10:40  
TAutomatic
Временная регистрация
 
Регистрация: 18.07.2012
Сообщений: 73
Сказал спасибо: 4
Сказали Спасибо 5 раз(а) в 5 сообщении(ях)
TAutomatic на пути к лучшему
По умолчанию Re: Изучаем STM32 Cortex M3

Сообщение от SasaVitebsk Посмотреть сообщение
Да вы себе льстите. Оптимизация 0 предназначена для генерации пооператорно и никогда не используется.
Ну зачем же Вы так...Кто не использует, а кто-то использует. И нет в Кейле сообщения при выборе уровня оптимизации 0, что пользователь начинает себе тем самым льстить.
Сообщение от SasaVitebsk Посмотреть сообщение
Я включаю максимальный уровень на нём пишу на нём и отлаживаю.
Ради Бога, делайте, как знаете. Я Вам не указчик. Но только ненадо думать, что и остальные точно так делаю, тем более обязаны делать.
Сообщение от SasaVitebsk Посмотреть сообщение
История помнит лишь пару случаев, когда приходилось выключать оптимизацию. Чтобы вам понятней было, в двух последовательных операторах компилятор сгенерит сохранение в переменную а потом опять загрузку. Вы путаете оптимизацию алгоритма, которую вы должны выполнять сами и компилятор здесь вам сможет помочь лишь незначительно. И оптимизацию преобразования Си операторов в ASM инструкции, которая мало зависит от вашего мастерства, а зависит от проффессианализма разработчиков компилятора.
****
Компилятор IAR ARM 6.40.2/ процессор stm32f107/ оптимизация none
20 310 bytes of readonly code memory
729 bytes of readonly data memory
2 397 bytes of readwrite data memory

Компилятор IAR ARM 6.40.2/ процессор stm32f107/ оптимизация high balansed
12 978 bytes of readonly code memory
186 bytes of readonly data memory
2 401 bytes of readwrite data memory

(12978+186)/(20310+729) = 13164/21039 = 63%

Итого ваш 24 кб код превратится в 15к, что я и говорил.
Все эти Ваши выкладки ничего не стоят, если Вы не понимаете, как выполняется и чем заканчивается статическая оптимизация.
И я ничего по этому вопросу не путаю, как бы Вам хотелось.
Самый простой пример статической оптимизации, самый первый и самый простой:
А = 0;
В = 0;
или
А = В = 0;
Проверте, как это работает, если еще не знаете.
Затем идет оптимизация и минимизация логических выражений, выбор между конструкциями if или switch в зависимости от количества уровней выбора, прямая и обратная итерация циклов и т.д и т. п.
И заканчивается это правильной передачей параметров в функции, сознательным и грамотным распределением памяти как ОЗУ так и ПЗУ, приоритетной работой с указателями, а не с именами.
И все это относится к статической оптимизации.
Применение всех возможных мер оптимизации начиная с первой строчки проекта позволяет свести кминимуму необходимость вмешательства оптимизатора компилятора. Вмешательство, кстати, может приносить и побочный негативный эффект.
У меня на фирме не работают никогда программисты, которые мне заявляют на собеседовании: пишу код как получается, компилятор потом все равно все поправит.
Предлагаю прекратить продолжение "пиписькометра" на сайте. Если хочется продолжить, перейдите в личку. Зачем остальных грузить.
TAutomatic вне форума  
Непрочитано 01.02.2013, 11:31  
DanilinSA
Почётный гражданин KAZUS.RU
 
Регистрация: 25.11.2010
Адрес: г. Дзержинск Нижегородская обл.
Сообщений: 1,714
Сказал спасибо: 130
Сказали Спасибо 1,108 раз(а) в 527 сообщении(ях)
DanilinSA на пути к лучшему
По умолчанию Re: Изучаем STM32 Cortex M3

Сообщение от Boba_spb Посмотреть сообщение
Да не очень хрупкая -распространненный интерфейс. Чуть что "СТОП" на линию. и все должны придти в ожидания "Старт". А затем со "Старт" и начинать.

Как то давно у меня было подозрение, что если долго окончания операции не дожидался кто то , то переходил в режим ожидания старта. Но это могло показаться - давно это было. По I2C в основном с часиками общался - проблем не было. А сейчас перешел на STM там часики уже встроены. Так что I2c уж вряд ли когда пригодится.
Можно конечно и таймаут ждать ... Но пора уходить от PIC-ового водения проблеммы. Контроллер I2C может генерировать прерывания. Одно из них - при ошибке. Ничего не мешает обработать его, прочиталь флаги для детализации ошибки ...

А можно и по таймеру. Этого барахла в наличии навалом, знай проверяй статус контроллера ...

Последний раз редактировалось DanilinSA; 01.02.2013 в 11:36.
DanilinSA вне форума  
Непрочитано 01.02.2013, 12:39  
TAutomatic
Временная регистрация
 
Регистрация: 18.07.2012
Сообщений: 73
Сказал спасибо: 4
Сказали Спасибо 5 раз(а) в 5 сообщении(ях)
TAutomatic на пути к лучшему
По умолчанию Re: Изучаем STM32 Cortex M3

Сообщение от DanilinSA Посмотреть сообщение
уходить от PIC-ового водения проблеммы. Контроллер I2C может генерировать прерывания. Одно из них - при ошибке. Ничего не мешает обработать его, прочиталь флаги для детализации ошибки ...
Ну зачем Вы так. У веряю, ПИК не плохой контроллер. Мне не очень нравятся сравнения общего плана типа пики хуже(лучше, площе, тольще и т.д.) армов. Нужно говорить предметно. Да старые пики были не очень, были определенные особенности и т.д. и т.п. Но тогда армов и в помине не было. Я то лично говорю конкретно о серии PIC24 и уверяю - вполне достойный контроллер. Да есть определенные недостатки, но есть и достоинства. И в том числе I2c там тоже мощный модуль с кучей настроек и прерываний. Другое дело, там несколько иной подход к работе с периферией. Например, меня просто "убивает" у STM32F100 объединение в один вектор прерывания несколько разнородных источников, таких как разные таймеры. Думал, от такого объединения давно отказались, а нет... Ну это тоже нетрагично. АРМ - тоже достойный контроллер, у него есть свои преимущества.
Так что нет никакого особого видения. Есть просто привычка, выработанный рефлекс поведения. Иногда не срабатывает, приходится перестраиваться.

Последний раз редактировалось TAutomatic; 01.02.2013 в 12:49.
TAutomatic вне форума  
Непрочитано 01.02.2013, 12:52  
Boba_spb
Почётный гражданин KAZUS.RU
 
Регистрация: 08.06.2008
Сообщений: 1,394
Сказал спасибо: 4
Сказали Спасибо 183 раз(а) в 167 сообщении(ях)
Boba_spb на пути к лучшему
По умолчанию Re: Изучаем STM32 Cortex M3

Да векторов прерываний много. Контроллер прерываний обеспечивает разные приоритеты прерываний - эт иногда помогает что б более приоритетное прерывание рвало обработку прерывания мелочей.
Boba_spb вне форума  
 

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

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

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, время: 01:46.


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