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

 
 
3 страниц V  < 1 2 3  
Reply to this topicStart new topic
> STM32F7XX аналог bit-banding
klen
сообщение Dec 30 2016, 15:24
Сообщение #31


бессмертным стать можно тремя способами
*****

Группа: Свой
Сообщений: 1 405
Регистрация: 9-05-06
Из: Москва
Пользователь №: 16 912



интересненько почитал... а то как то вяло на электрониксе последние пол года
по существу думаю Вы оба правы! но каждый про свое.
механизмы прерываний реализованные в железе и ОСность вещи перпендикулярные.
на armv4 считаю что создть невозможно вложенные прерывания абсалютно надежно, вот их там и не любят. в armv7 это решили пофиксить но тоже не без придури, поэтому получилось полено папы Карло.
я традиционно из stm32 "ПЛИСину" выжимаю поэтому мне ближе механизмы заложенные в armv7 так как более детерминированая сисием получается.
ну и с наступающим всех!!!
желаю всем в НГ менее глючного кода и более быстрого железа.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Dec 30 2016, 15:58
Сообщение #32


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(klen @ Dec 30 2016, 17:24) *
по существу думаю Вы оба правы! но каждый про свое.
механизмы прерываний реализованные в железе и ОСность вещи перпендикулярные.

Не совсем понимаю про перпендикулярность. Говорил только, что навороты воложенных прерываний с их приортиетами не надо смешивать с тем, что предоставляет операционная система. То есть при наличии операционной системы нужны более, чем веские основания для использования вложенных прерываний.
Цитата
на armv4 считаю что создть невозможно вложенные прерывания абсалютно надежно, вот их там и не любят.

Слово "абсолютно" не понимаю. Но вложенные сам для маленькой маленькой штучки на LPC2101 в свое время делал руками. Без проблем. Как и еще на доброй полудюжине контроллеров и PC.
Какие вообще могут быть проблемы со вложенными прерываниями на той же v4, если они делаются софтово БЕЗ какой либо аппаратной поддержки.
Другое дело, то де-факто у самого контролера есть какие то глюки sad.gif. Вот здесь спустя много лет наступил https://electronix.ru/forum/index.php?showt...t&p=1374580. Залатал. Но причину так и не понял.
Цитата
в armv7 это решили пофиксить но тоже не без придури, поэтому получилось полено папы Карло.

Получился некий законченный универсальный вариант. Вполне тщательно продуманный. Но как любой универсальный не без недостатоков и избыточности.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
AVI-crak
сообщение Dec 30 2016, 18:51
Сообщение #33


Частый гость
**

Группа: Участник
Сообщений: 182
Регистрация: 16-10-15
Пользователь №: 88 894



Цитата(zltigo @ Dec 30 2016, 21:58) *
Вот здесь спустя много лет наступил https://electronix.ru/forum/index.php?showt...t&p=1374580. Залатал. Но причину так и не понял.

Это и есть проблема атомарности в чистом виде. Вам необходимо настроить регионы mpu, включить сквозную запись в адресном пространстве регистров управления мк. Собственно это должна быть самая первая операция на мк имеющим собственный кеш.

Далее, неважно насколько крута ось - важно что физические устройства должны иметь разный приоритет. Например банальный spi: при равных приоритетах на Rx и Tx - получим стабильный глюк. Причём приоритеты на тот-же spi имеются и в каналах dma и на само конечное прерывание.
Разные приоритеты обработки для включённой периферии. Например sd карта может и подождать звуковой кодек.

Цитата(jcxz @ Dec 30 2016, 19:03) *
Может приведёте здесь Ваш переключатель задач для classic ARM? Чтобы не быть голословным.


Для cortex m7 переключатель получается жирным, необходимо сохранять много регистров. А точнее на 16 штук больше чем cortex m4.
Ничего сложного: сохранить в стек r4-r11, и математику s16-s31, сохранить адрес стека в структуру задачи, остальное автоматически сохраняется в текущем стеке задачи. Восстанавливать так-же.
Стеки под задачи разные, стек под прерывания один единственный.
https://bitbucket.org/AVI-crak/rtos-cortex-m3-gcc/src
Go to the top of the page
 
+Quote Post
zltigo
сообщение Dec 30 2016, 20:52
Сообщение #34


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(AVI-crak @ Dec 30 2016, 20:51) *
Это и есть проблема атомарности в чистом виде. Вам необходимо настроить регионы mpu, включить сквозную запись в адресном пространстве регистров управления мк.
....

Вы бредите sad.gif. Советую для начала ознакомится с контроллером. Для начала нет у него кэшей. Совсем.
Цитата
Например банальный spi: при равных приоритетах на Rx и Tx - получим стабильный глюк.

Ни банальный ни какой другой SPI не имеет никаких отдельных прерываний Rx/Tx по определению.
Цитата
неважно насколько крута ось - важно что физические устройства должны иметь разный приоритет

Или не иметь. Как надо, так и делается. Это Вы с кем спорите? Кто-то утверждал, что все прерывания должны быть одного приоритета?


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
jcxz
сообщение Dec 31 2016, 11:23
Сообщение #35


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(AVI-crak @ Dec 30 2016, 21:51) *
Для cortex m7 переключатель получается жирным, необходимо сохранять много регистров. А точнее на 16 штук больше чем cortex m4.

Что за дополнительные регистры? В FPU? Ну так их сохранение опционально - я в своём порту под uCOS при переключении задач сохраняю S0-S31,FPSCR только для задач, использующих FPU. Большинство задач FPU не использует и для них размер сохраняемого контекст можно уменьшить.
И регистры S0-S31 были и в M4.
Вы ничего не напутали? rolleyes.gif
Go to the top of the page
 
+Quote Post
Obam
сообщение Jan 9 2017, 09:50
Сообщение #36


Знающий
****

Группа: Участник
Сообщений: 756
Регистрация: 14-11-14
Пользователь №: 83 663



"The code designed for other Cortex®-M processors is compatible with Cortex®-M7 as long as it does not rely on bit-banding." - STM32F7 Series Cortex®-M7 processor programming manual. DocID028474 Rev 2.

Аминь… wink.gif


--------------------
Пролетарий умственного труда.
Go to the top of the page
 
+Quote Post
amiller
сообщение Jan 9 2017, 10:52
Сообщение #37


Частый гость
**

Группа: Участник
Сообщений: 176
Регистрация: 20-02-14
Из: Томск
Пользователь №: 80 612



В процессе переезда с bit-banding сделал несколько макросов, может кому будет интересно:
CODE
#define setw_amask(x,y) {while(__STREXW(__LDREXW(&x) | (y), &x));__CLREX();}
#define clrw_amask(x,y) {while(__STREXW(__LDREXW(&x) & ((int32u)~((int32u)y)), &x));__CLREX();}
#define seth_amask(x,y) {while(__STREXH(__LDREXH(&x) | (y), &x));__CLREX();}
#define clrh_amask(x,y) {while(__STREXH(__LDREXH(&x) & ((int32u)~((int32u)y)), &x));__CLREX();}
#define setb_amask(x,y) {while(__STREXB(__LDREXB(&x) | (y), &x));__CLREX();}
#define clrb_amask(x,y) {while(__STREXB(__LDREXB(&x) & ((int32u)~((int32u)y)), &x));__CLREX();}

Примеры применения:
CODE
seth_amask(flag, 0x10);
clrh_amask(flag, 0x20);

Вроде бы под IAR компилируется достаточно лаконично.
Go to the top of the page
 
+Quote Post
scifi
сообщение Jan 9 2017, 11:38
Сообщение #38


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Цитата(amiller @ Jan 9 2017, 13:52) *
В процессе переезда с bit-banding сделал несколько макросов, может кому будет интересно:

Пишут же, что CLREX тут не нужен.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Jan 9 2017, 12:17
Сообщение #39


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(amiller @ Jan 9 2017, 12:52) *
В процессе переезда с bit-banding сделал несколько макросов...

CLREX тут лишние, поскольку STREX сбрасывает флаг доступа.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
KnightIgor
сообщение Jan 9 2017, 13:23
Сообщение #40


Знающий
****

Группа: Участник
Сообщений: 643
Регистрация: 29-05-09
Из: Германия
Пользователь №: 49 725



Цитата(AVI-crak @ Dec 28 2016, 18:02) *
В реальности это очистка регистра адреса, который используется для мониторинга атомарного адреса. Прикол в том что когда __LDREXW и __STREXW применяется в прерывании, и перебивается другим прерыванием ровно между командами - при возврате получается глюк.

Я тоже много думал и пытался найти подробнее, как работает LDREX/STREX пара, предполагая, что там какие-то адреса мониторятся. Все гораздо... тупее. Никаких адресов. Если между LDREX и STREX произошло хоть какое прерывание, считается, что оно МОГЛО что-то изменить в атомарной переменной, даже если обработчики ни сном, ни духом и нигде пальчиками не лазили, и операция экслюзивности отвергается. Так, на всякий случай. Я не подпишусь, как там с DMA, который может влезть на атомарную переменную. Не нашел упоминания по поводу (может, плохо искал), но по логике предполагаю, что если между LDREX и STREX хоть какое-то телодвижение со стороны DMA было, эффект будет аналогичный прерыванию. В этой связи есть у меня подозрение, что LDREX/STREX внутри прерывания может действительно приводить к странным эффектам.

P.S. Касаемо bit-banding, а точнее - его нужности, то дискуссия в ее нынешнем состоянии есть просто излишня. Здесь нужно принимать явление феноменологически: коль ARM такое замутил, то в этом был и есть глубинный смысл и польза. Не нравится - не ешь.

Сообщение отредактировал KnightIgor - Jan 9 2017, 13:30
Go to the top of the page
 
+Quote Post
zltigo
сообщение Jan 9 2017, 13:34
Сообщение #41


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(KnightIgor @ Jan 9 2017, 15:23) *
В этой связи есть у меня подозрение, что LDREX/STREX внутри прерывания может действительно приводить к странным эффектам.

И каким образом лишний сброс флага эксклюзивности развеивает Ваши подозрения?


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
scifi
сообщение Jan 9 2017, 13:47
Сообщение #42


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Цитата(KnightIgor @ Jan 9 2017, 16:23) *
Я тоже много думал и пытался найти подробнее, как работает LDREX/STREX пара, предполагая, что там какие-то адреса мониторятся.

А что там думать? Всё же написано:
Цитата
The Cortex-M3 includes an exclusive access monitor, that tags the fact that the processor has executed a Load-Exclusive instruction. If the processor is part of a multiprocessor system, the system also globally tags the memory locations addressed by exclusive accesses by each processor.
The processor removes its exclusive access tag if:
- It executes a CLREX instruction.
- It executes a Store-Exclusive instruction, regardless of whether the write succeeds.
- An exception occurs. This means the processor can resolve semaphore conflicts between different threads.
Go to the top of the page
 
+Quote Post
KnightIgor
сообщение Jan 9 2017, 14:46
Сообщение #43


Знающий
****

Группа: Участник
Сообщений: 643
Регистрация: 29-05-09
Из: Германия
Пользователь №: 49 725



Цитата(zltigo @ Jan 9 2017, 15:34) *
И каким образом лишний сброс флага эксклюзивности развеивает Ваши подозрения?

Никак. Я высказал предположение. Ход со сбросом - не моя идея, а другого автора здесь.

Цитата(scifi @ Jan 9 2017, 15:47) *
А что там думать? Всё же написано:

Очень хорошо написано. Кратко. А кто спорит? Но мне в свое время недоставало в документации некой преамбулы, фразы о концепции, идее LDREX|STREX с точки зрения всей системы в процессоре. Вроде "если ход исполнения между LDREX и STREX будет прерыван, будем рассматривать такое ответвление как риск потерять целостность операции, потому, независимо от того, действительно ли изменилась атомарная переменная в результате прерывания или осталась нетронутой, атомарная операция отклоняется". Вроде того.

Кстати, ни слова про DMA, как я на сей момент и предполагал. То есть, надо чисто организационными методами предотвратить какие-либо доступы со стороны DMA в память семафоров. Иначе - защиты от дурака нет.

Сообщение отредактировал KnightIgor - Jan 9 2017, 14:48
Go to the top of the page
 
+Quote Post
scifi
сообщение Jan 9 2017, 14:56
Сообщение #44


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Цитата(KnightIgor @ Jan 9 2017, 17:46) *
Но мне в свое время недоставало в документации некой преамбулы, фразы о концепции, идее LDREX|STREX с точки зрения всей системы в процессоре.

Мне тоже. Но тут ничего нового. У них там всё так написано - сухо и кратко. Видимо, не хотят отбирать хлеб у всяких писателей талмудов "кортекс-м3 за 10 простых уроков"...

Цитата(KnightIgor @ Jan 9 2017, 17:46) *
Кстати, ни слова про DMA, как я на сей момент и предполагал. То есть, надо чисто организационными методами предотвратить какие-либо доступы со стороны DMA в память семафоров. Иначе - защиты от дурака нет.

Мне это кажется естественным. Дан простой инструмент, позволяющий реализовать исключительный доступ. А если у вас переполнение стека или кто-то подсунул DMA левые адреса - пеняйте на себя. Тот же MPU не везде присутствует.
Go to the top of the page
 
+Quote Post
jcxz
сообщение Jan 9 2017, 16:05
Сообщение #45


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(KnightIgor @ Jan 9 2017, 17:46) *
Кстати, ни слова про DMA, как я на сей момент и предполагал. То есть, надо чисто организационными методами предотвратить какие-либо доступы со стороны DMA в память семафоров. Иначе - защиты от дурака нет.

А нафиг оно нужно??? Кому взбредёт в голову работать с переменными эксклюзивного доступа через DMA (либо другим bus master нежели CPU)???
Единственный момент: исходя из выдержки, приведённой scifi, не очень понятно как оно работает в много процессорных системах.
Предполагаю, что возможно так: когда в каком-то из CPU возникает условие "removes its exclusive access tag", то он на внешний вывод выдаёт некий сигнал, по-которому этот флаг сбрасывается во всех остальных CPU.
Go to the top of the page
 
+Quote Post

3 страниц V  < 1 2 3
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 14th August 2025 - 10:53
Рейтинг@Mail.ru


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