31.01.2013, 23:01
|
|
Временная регистрация
Регистрация: 18.07.2012
Сообщений: 73
Сказал спасибо: 4
Сказали Спасибо 5 раз(а) в 5 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Получается, у меня не чтение чуток рановато,я не совсем разобрался с механизмом формирования ACK и NAK. В более привычной мне среде бит подверждения устанвливался или нет в зависимости от логики вручную установкой соответствующего бита. В STM32F1 он устанавливается автоматически и только перед чтением последнего байте в блоке нужно поставить запрет его выдачи. Теперь понятно.
К слову, да заработало. Вам, Boba_spb спасибоза помощь.
Но остался один момент. Вся эта конструкция, я имею ввиду обмен по I2C - чрезвычайно "хрупкая вещь" при работе под отладчиком. Может это только под отладчиком? Стоит остановиться гдето посередине, контроллер стоит в бесконечном цикле и вывести его я не могу. Только переподключение питания. Если не останавливаться в середине - все работает нормально. Есть опасения что в серийном изделии он тоже также станет в ступор. Получается, нужно делать выход из циклов ожидания по таймауту, передергивать ноги портов и снова пытаться связаться. Как коллеги выходят из такой ситуации и вообще бывает ли она в STM32F1?
|
|
|
|
31.01.2013, 23:13
|
|
Гуру портала
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,835
Сказал спасибо: 919
Сказали Спасибо 4,308 раз(а) в 2,573 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Нельзя вечно ждать какого-то события, которое зависит от железа. Таймаут обязателен. И лучше до начала работы послать на шину RESET.
|
|
|
|
31.01.2013, 23:23
|
|
Временная регистрация
Регистрация: 18.07.2012
Сообщений: 73
Сказал спасибо: 4
Сказали Спасибо 5 раз(а) в 5 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Сообщение от Easyrider83
|
Нельзя вечно ждать какого-то события, которое зависит от железа. Таймаут обязателен. И лучше до начала работы послать на шину RESET.
|
Это понятно, я не спорю. Для начала такой таймаут делаешь для перестраховки. Потом понимаешь, контроллер в связке с EEPROM работает настолько надежно, что нет смысла ставить таймаут, начинаешь жлобиться даже на эти 5-6 строк кода. Но это упрощение и оправдано и подтверждено работой, мы выпускаем приборы сотнями штук, если были бы проблемы, пользователи завалили бы рекламациями. Но вроде Бог миловал. Но я точно видел, что если сделать остановку внутрисхемным отладчиком в ПИКе внутри кода работы по I2C, он дальше продолжает работать, никаких ступоров не бывает. Тут другая ситуация, ступоры есть, но и отладчик другой, он считывает переменные и бывает, мешает контроллеру. Столкнулся с таким при работе SPI с DMA.
|
|
|
|
31.01.2013, 23:44
|
|
Почётный гражданин KAZUS.RU
Регистрация: 08.06.2008
Сообщений: 1,394
Сказал спасибо: 4
Сказали Спасибо 183 раз(а) в 167 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Да не очень хрупкая -распространненный интерфейс. Чуть что "СТОП" на линию. и все должны придти в ожидания "Старт". А затем со "Старт" и начинать.
Как то давно у меня было подозрение, что если долго окончания операции не дожидался кто то , то переходил в режим ожидания старта. Но это могло показаться - давно это было. По I2C в основном с часиками общался - проблем не было. А сейчас перешел на STM там часики уже встроены. Так что I2c уж вряд ли когда пригодится.
|
|
|
|
01.02.2013, 00:09
|
|
Почётный гражданин KAZUS.RU
Регистрация: 08.06.2008
Сообщений: 1,394
Сказал спасибо: 4
Сказали Спасибо 183 раз(а) в 167 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Не надо делать много Breakpoint, иначе отладчик будет перегружать часть программы
|
|
|
|
01.02.2013, 01:15
|
|
Гражданин KAZUS.RU
Регистрация: 04.08.2006
Сообщений: 911
Сказал спасибо: 28
Сказали Спасибо 180 раз(а) в 139 сообщении(ях)
|
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к, что я и говорил.
|
|
|
|
01.02.2013, 10:40
|
|
Временная регистрация
Регистрация: 18.07.2012
Сообщений: 73
Сказал спасибо: 4
Сказали Спасибо 5 раз(а) в 5 сообщении(ях)
|
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 в зависимости от количества уровней выбора, прямая и обратная итерация циклов и т.д и т. п.
И заканчивается это правильной передачей параметров в функции, сознательным и грамотным распределением памяти как ОЗУ так и ПЗУ, приоритетной работой с указателями, а не с именами.
И все это относится к статической оптимизации.
Применение всех возможных мер оптимизации начиная с первой строчки проекта позволяет свести кминимуму необходимость вмешательства оптимизатора компилятора. Вмешательство, кстати, может приносить и побочный негативный эффект.
У меня на фирме не работают никогда программисты, которые мне заявляют на собеседовании: пишу код как получается, компилятор потом все равно все поправит.
Предлагаю прекратить продолжение "пиписькометра" на сайте. Если хочется продолжить, перейдите в личку. Зачем остальных грузить.
|
|
|
|
01.02.2013, 11:31
|
|
Почётный гражданин KAZUS.RU
Регистрация: 25.11.2010
Адрес: г. Дзержинск Нижегородская обл.
Сообщений: 1,714
Сказал спасибо: 130
Сказали Спасибо 1,108 раз(а) в 527 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Сообщение от Boba_spb
|
Да не очень хрупкая -распространненный интерфейс. Чуть что "СТОП" на линию. и все должны придти в ожидания "Старт". А затем со "Старт" и начинать.
Как то давно у меня было подозрение, что если долго окончания операции не дожидался кто то , то переходил в режим ожидания старта. Но это могло показаться - давно это было. По I2C в основном с часиками общался - проблем не было. А сейчас перешел на STM там часики уже встроены. Так что I2c уж вряд ли когда пригодится.
|
Можно конечно и таймаут ждать ... Но пора уходить от PIC-ового водения проблеммы. Контроллер I2C может генерировать прерывания. Одно из них - при ошибке. Ничего не мешает обработать его, прочиталь флаги для детализации ошибки ...
А можно и по таймеру. Этого барахла в наличии навалом, знай проверяй статус контроллера ...
Последний раз редактировалось DanilinSA; 01.02.2013 в 11:36.
|
|
|
|
01.02.2013, 12:39
|
|
Временная регистрация
Регистрация: 18.07.2012
Сообщений: 73
Сказал спасибо: 4
Сказали Спасибо 5 раз(а) в 5 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Сообщение от DanilinSA
|
уходить от PIC-ового водения проблеммы. Контроллер I2C может генерировать прерывания. Одно из них - при ошибке. Ничего не мешает обработать его, прочиталь флаги для детализации ошибки ...
|
Ну зачем Вы так. У веряю, ПИК не плохой контроллер. Мне не очень нравятся сравнения общего плана типа пики хуже(лучше, площе, тольще и т.д.) армов. Нужно говорить предметно. Да старые пики были не очень, были определенные особенности и т.д. и т.п. Но тогда армов и в помине не было. Я то лично говорю конкретно о серии PIC24 и уверяю - вполне достойный контроллер. Да есть определенные недостатки, но есть и достоинства. И в том числе I2c там тоже мощный модуль с кучей настроек и прерываний. Другое дело, там несколько иной подход к работе с периферией. Например, меня просто "убивает" у STM32F100 объединение в один вектор прерывания несколько разнородных источников, таких как разные таймеры. Думал, от такого объединения давно отказались, а нет... Ну это тоже нетрагично. АРМ - тоже достойный контроллер, у него есть свои преимущества.
Так что нет никакого особого видения. Есть просто привычка, выработанный рефлекс поведения. Иногда не срабатывает, приходится перестраиваться.
Последний раз редактировалось TAutomatic; 01.02.2013 в 12:49.
|
|
|
|
01.02.2013, 12:52
|
|
Почётный гражданин KAZUS.RU
Регистрация: 08.06.2008
Сообщений: 1,394
Сказал спасибо: 4
Сказали Спасибо 183 раз(а) в 167 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Да векторов прерываний много. Контроллер прерываний обеспечивает разные приоритеты прерываний - эт иногда помогает что б более приоритетное прерывание рвало обработку прерывания мелочей.
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 01:46.
|
|