реклама на сайте
подробности

 
 
33 страниц V  « < 7 8 9 10 11 > »   
Closed TopicStart new topic
> STM32 – вопросы – проблемы - решения.
ReAl
сообщение Apr 10 2011, 17:20
Сообщение #121


Нечётный пользователь.
******

Группа: Свой
Сообщений: 2 033
Регистрация: 26-05-05
Из: Бровари, Україна
Пользователь №: 5 417



Ну я всё гонял на F103-ем и на 72 МГц. Но не думаю, что тут предвыборка что-то сильно накосячила, команды-то все короткие (много влазит в буфер) и многие не однотактовые.
Чтобы уйти от циклов/вызовов/возвратов, делал линейный код с разным количеством повторов операций и стартовой отмашкой на другую ножку. Причм этой байды тоже несколько повтров ставил подряд -- все давали одинаковые импульсы. Точнее, как-то вдруг вылезли разные, так заметил, что одна и та же комбинация с if(on) BSRR = mask; else BRR = mask; компилируется по разному в разных местах.
И так чтобы ну совсем -- там не NOP стоял, а MVNS, почему-то именно его вставил :-)
Но и удлиннение работы STR в bit-band по сравению с простым доступом к региону, и удлиннение импульса на число_MVNS_между_STR_минус_1 тактов (т.е. отсутствие удлиннения при одном) поворялись уверенно.
Надо эту тему где-то себе на видное место положить, сейчас не до того, чтобы повторять замеры.
Если кто напомнит в конце апреля в личку, буду благодарен :-)


--------------------
Ну, я пошёл… Если что – звоните…
Go to the top of the page
 
+Quote Post
ViKo
сообщение Apr 10 2011, 20:11
Сообщение #122


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Добавлю еще, что инвертировать бит везде, кроме рабочих регистров процессора ARM или Cortex - это не атомарная операция. Независимо от способа, "напрямую" или через bit-band. Потому, что сначала этот бит нужно прочитать, в виде целого слова, или как отдельный бит через bit-band alias. Нужно выполнить те самые неоднократно показанные три команды. Но после чтения может случиться что угодно до того, как измененный бит будет записан обратно.

Атомарными
будут только сброс или установка бита через bit-band. Потому, что это одна команда. А чтение-модификация-запись слова, содержащего нужный бит, делается аппаратно.
Также атомарными будут команды сброса или установки порта ввода-вывода через BSRR и BRR. Потому что в этом случае не происходит чтение-модификация-запись.

Цитата(ReAl @ Apr 10 2011, 20:20) *
Но не думаю, что тут предвыборка что-то сильно накосячила, команды-то все короткие (много влазит в буфер) и многие не однотактовые.

Не так уж и много. Если команда 4-байтовая, вот она половину одного регистра и забрала. Т.е., всего в два регистра влазит от 4-х до 8-ми команд. Вот последний показанный мой код влезет в два регистра. А как остальное, не знаю.
Go to the top of the page
 
+Quote Post
ReAl
сообщение Apr 10 2011, 22:58
Сообщение #123


Нечётный пользователь.
******

Группа: Свой
Сообщений: 2 033
Регистрация: 26-05-05
Из: Бровари, Україна
Пользователь №: 5 417



Под атомарностью имелось ввиду отсутствие интерференции с работой в других местх с другими битами того же слова.
В этом смысле *ADDR ^= MASK с основным адресом не атомарен. Если будет прерывание, модифицирующее другую ногуэтого же порта - кака.
А с *ADDR_ALIAS = ~*ADDR_ALIAS такой проблемы не будет.
В этом же смысле атомарно и if ( ODR & mask ) BRR = mask; else BSRR = mask; и BSRR = (ODR & mask) ? mask << 16 : mask;

______
Чё ж так спать хочется... Ещё и двух ночи нет...


--------------------
Ну, я пошёл… Если что – звоните…
Go to the top of the page
 
+Quote Post
ViKo
сообщение Apr 11 2011, 06:41
Сообщение #124


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



В результате, для инвертирования бита через бит-бэнд,
по сравнению с обычным xor регистра ODR:
- Настоящей атомарности нет,
- Размер кода такой же,
- Время выполнения такое же.

Go to the top of the page
 
+Quote Post
ReAl
сообщение Apr 11 2011, 06:52
Сообщение #125


Нечётный пользователь.
******

Группа: Свой
Сообщений: 2 033
Регистрация: 26-05-05
Из: Бровари, Україна
Пользователь №: 5 417



В результате, если к разным битам одного и того же порта идут инвертирования ножки из основного кода и из прерывания, то для xor с ODR в основном потоке надо добавить запрещающую/восстанавливающую прерывания обёртку. И в размер кода, и в его время.

Для инвертирования через bit-band не нужно, несмотря на «ненастоящую» атомарность.
У ODR ^= и такой нет.

Я понимаю, что использование Cpl() само по себе будет редким, а уж чтобы и в прерывании, и в основном коде, так и ещё реже. Но это не мешает подумать по возможных последствих (и положить на весы способы их обхода). Так как чем круче джип, тем дальше идти за трактором чем менее вероятен баг, тем дольше его искать при возникновении.


--------------------
Ну, я пошёл… Если что – звоните…
Go to the top of the page
 
+Quote Post
ViKo
сообщение Apr 11 2011, 07:19
Сообщение #126


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Цитата(ReAl @ Apr 11 2011, 09:52) *
В результате, если к разным битам одного и того же порта идут инвертирования ножки из основного кода и из прерывания, то для xor с ODR в основном потоке надо добавить запрещающую/восстанавливающую прерывания обёртку. И в размер кода, и в его время.
Для инвертирования через bit-band не нужно, несмотря на «ненастоящую» атомарность.
У ODR ^= и такой нет.

С этим согласен.
Есть еще команды исключительного доступа. С ними пока серьезно не разбирался. Думаю, они помогли бы в описанном случае.
Ну, и те самые регистры - сбросить бит порта, установить бит порта. С истинной атомарностью. И голова не болит.
Go to the top of the page
 
+Quote Post
uvreg
сообщение Apr 11 2011, 09:35
Сообщение #127


Участник
*

Группа: Участник
Сообщений: 15
Регистрация: 6-02-11
Пользователь №: 62 740



Помогите с бутлоадером STM32F105.
Бутлоадер очень странно себя ведет. Судя по описанию протокола, для входа в режим команд нужно сбросить проц и подать на USART1 0x7F, после чего он должен ответить байтом 0x79. Однако, у меня сразу после сброса процессор выдает в порт 0x00 примерно три раза в секунду и на подачу 0x7F не реагирует. Flash loader demonstrator (v2.2.0) не опознает его, то есть получая эти ноли пишет, что чип не опознан и все.
Я взял терминалку, поставил выдачу 0x7F в цикле и сделал сброс процессора, после этого он вошел в режим команд бутлоадера. Далее, подавая команды вручную получаю нормальные ответы, но ведь вручную программу не зальешь.
Errata говорит, что в чипах с датой выпуска до 937 bootloader вообще не работает; у меня как раз 937 - должно работать. Как видно он и работает, но более чем странно.
Было предположение, что выбирается другая периферия для бутлоадера (есть еще USB, CAN и USART2), в даташите, сказано, что нельзя оставлять неподключенными соответствующие ноги. У меня неподключены. Посадил указанные ноги на землю, ничего не поменялось.
Кто зашивал по USART? Программировать по USB, JTAG или SWD возможности нет.
Go to the top of the page
 
+Quote Post
dac
сообщение Apr 12 2011, 05:38
Сообщение #128


Знающий
****

Группа: Свой
Сообщений: 600
Регистрация: 27-05-05
Пользователь №: 5 482



кто-нибудь знает, как в Keil симулировать STM32F107RC? со 103 проблем нет. для 107 вылетает ошибка
*** error 65: access violation at 0x0000000C : no 'read' permission.
пробовал через MAP добавить доступ к этому диапазону адресов, но это бесполезно - он пытается исполнять программу с нулевого адреса, вместо 0x8000000. а в нуле соответственно программы нету.
при всех тех же настройках проекта и исходниках, проект скомпилированный для 103 нормально дебажится в симуляторе.

PS эмуляция через ST-Link работает нормально.
Go to the top of the page
 
+Quote Post
akimych
сообщение Apr 14 2011, 01:57
Сообщение #129


Участник
*

Группа: Участник
Сообщений: 72
Регистрация: 7-01-11
Пользователь №: 62 073



Цитата
кто-нибудь знает, как в Keil симулировать STM32F107RC? со 103 проблем нет. для 107 вылетает ошибка

Потому что симулятор кейла не умеет симулировать 107ой, а 103ий умеет. Для 107го только симулятор ядра.
Можно выбарть 103ий в настройках и симулировать, как 103ий.
Go to the top of the page
 
+Quote Post
ISK2010
сообщение Apr 14 2011, 09:57
Сообщение #130


Местный
***

Группа: Участник
Сообщений: 205
Регистрация: 21-09-10
Из: г.Зеленоград
Пользователь №: 59 631



У кого-нибудь пробивалась нога NRST? А у меня походу пробилась. Всего-то сменил батарейку) Напряжение батарейки измерялось ацп на 15ой ножке МК, а NRST - 14я. Сменил батарейку - не запускается. Пытаюсь конектится - без толку. Оказывается, что нога NRST в нуле теперь всегда. на выключенном девайсе там меж ногой и землей ~300 Ом. Т.е. внутри полевичек, который подтягивает к земле ногу, пробился(((. А перепаивать так не хотелось... Короче насильно резистором 10 Ом подтянул NRST к +3В. И, вуаля, все заработало. Только там теперь ток аж 15мА течет, и при отладке никакой ULINK или JLINK не сможет прорезетить МК, остается вручную помогать.

Но вот думаю, может не пробил, а кто-то в МК формирует резет. Но тогда ведь должны были быть импульсы и при выключении уж явно больше 300 Ом?

Go to the top of the page
 
+Quote Post
Aaron
сообщение Apr 14 2011, 10:34
Сообщение #131


Местный
***

Группа: Свой
Сообщений: 243
Регистрация: 5-10-06
Из: Зеленоград
Пользователь №: 21 007



Собираемся переходить на stm32f107 дружно, - будем покупать отладочные платы stm3210c-eval, а к ним ещё и программаторы-отладчики.
Прокомментируйте, пожалуйста, вопросы:
- с помощью st-link можно отлаживать мк только в keil, iar, плюс Ride и ST toolset (набор от STM). В eclipse можно только прошивать (используя консольную утилиту для st-link)?
- есть ли у openocd уже поддержка st-link? быстрый поиск говорит, что вопрос поднимался, но решения пока нет.
- если стоит задача обучения работе с мк с нуля (студенты и выпускники) - то какую среду разработки им лучше советовать (в контексте работы с данными контроллерами)?
- имеет смысл брать не узкоспециализированные st-link, а mt-link? преимущество mt-link только в его универсальности? Или st-link'и дают какие-то вкусные плюшки?
- на сайте Терраэлектроники продаются их собственные TE-ARM-LINK - "устройство является функциональным аналогом J-LINK (Segger, IAR)". они дешевле, чем mt-link. кто-нибудь с ними уже работал? думаю, может их закупить вместо mt-link (я так понимаю, ночинка-то у них идентичная wink.gif ).
Go to the top of the page
 
+Quote Post
ViKo
сообщение Apr 14 2011, 10:35
Сообщение #132


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Цитата(ISK2010 @ Apr 14 2011, 12:57) *
Короче насильно резистором 10 Ом подтянул NRST к +3В. И, вуаля, все заработало. Только там теперь ток аж 15мА течет, и при отладке никакой ULINK или JLINK не сможет прорезетить МК, остается вручную помогать.

А вы 100 Ом прицепите вместо 10.
Go to the top of the page
 
+Quote Post
ISK2010
сообщение Apr 14 2011, 10:54
Сообщение #133


Местный
***

Группа: Участник
Сообщений: 205
Регистрация: 21-09-10
Из: г.Зеленоград
Пользователь №: 59 631



Цитата(ViKo @ Apr 14 2011, 14:35) *
А вы 100 Ом прицепите вместо 10.

Спасибо! Я уж думал поставить туда 120 Ом и дополнительно пару транзисторов, дабы не нагружать ULINKа 30мАмперами. Но прочивал ваше сообщение, и поставил просто 120 Ом))) Работает все как у новенького)

Вот только теперь вопрос. Какой максимальный втекающий ток по reset у ULINK?

И еще. Вы с таким уже сталкивались?


Go to the top of the page
 
+Quote Post
prm
сообщение Apr 14 2011, 11:42
Сообщение #134


Участник
*

Группа: Участник
Сообщений: 43
Регистрация: 4-04-07
Пользователь №: 26 760



Цитата(Aaron @ Apr 14 2011, 15:34) *
- есть ли у openocd уже поддержка st-link? быстрый поиск говорит, что вопрос поднимался, но решения пока нет.


Есть проект http://www.versaloon.com, почитав его форум можно найти информацию, как и чем перепрошить ST-Link, чтобы появилась поддержка openocd. Сам не делал, но судя по форуму, у людей все получилось.
Go to the top of the page
 
+Quote Post
ISK2010
сообщение Apr 14 2011, 11:53
Сообщение #135


Местный
***

Группа: Участник
Сообщений: 205
Регистрация: 21-09-10
Из: г.Зеленоград
Пользователь №: 59 631



Плата STM3210C. Почему на ней не разряжается батарейка при выключенном питании?!? Я повторил схемку, у меня разряжается. И так должно быть, ведь там на gpio в МК диоды стоят, а через диод и измерительный резистор 10кОм батарейка замыкается на Vdd. Итог - 250мкА. Ну никак не могу понять, почему на доске STM3210C нет этого тока.

P.S. Не повторил бы бездумно схему, не разрядилась бы батарейка, не стал бы её менять, не убил бы статикой ногу NRST... (см.выше)

Go to the top of the page
 
+Quote Post

33 страниц V  « < 7 8 9 10 11 > » 
Closed TopicStart new topic
6 чел. читают эту тему (гостей: 6, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 24th July 2025 - 16:34
Рейтинг@Mail.ru


Страница сгенерированна за 0.01483 секунд с 7
ELECTRONIX ©2004-2016