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

 
 
> STM32F7XX аналог bit-banding
amiller
сообщение Dec 26 2016, 10:11
Сообщение #1


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

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



В последние годы пришлось достаточно много писать для STM32F1XX и STM32F4XX.
Везде активно пользовался механизмом bit-banding для доступа к битовым переменным.
Сейчас заказал отладку с STM32F746ZG.
Читаю документацию и вижу, что там никаких упоминаний про bit-banding при работе с оперативной памятью...
Ткните носом, что на замену? Может появились неделимые операции "чтение-модификация-запись"?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
AVI-crak
сообщение Dec 28 2016, 02:11
Сообщение #2


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

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



Цитата(amiller @ Dec 26 2016, 16:11) *
Читаю документацию и вижу, что там никаких упоминаний про bit-banding при работе с оперативной памятью...
Может появились неделимые операции "чтение-модификация-запись"?

Атомарные операции не терялись. Вот только выглядят они как громадный костыль.

Применимы к флагам которых безумно много, или как вариант - обязаны занимать минимальное место (не всегда правило).
В общем у меня получатся так: глобальная структура с флагами ( ingl ) - цель, собрать в кучу мелкие имена флагов, строго 32б, ну и модификация с помощью стандартных команд __LDREXW и __STREXW.
Поместил функции f_ask_с и f_ask_d в разные задачи, они там в цикле просто меняют свой флаг. Смысла в функции нет, потому как я не придумал способ передать указатель члена структуры (оно ниже физического адреса). Возможно можно перечислениями сделать, но как потом не запутаться - не знаю.

Словом, если кто предложит решение - буду рад.

CODE
typedef union
{
struct
{
uint32_t stop:5;
uint32_t start:1;
uint32_t a:1;
uint32_t b:1;
uint32_t c:1;
uint32_t d:2;
uint32_t e:1;
uint32_t f:1;
uint32_t g:1;
uint32_t h:1;
uint32_t i:1;
uint32_t j:1;
uint32_t k:1;
uint32_t l:1;
uint32_t m:1;
uint32_t n:1;
uint32_t o:1;
uint32_t p:1;
uint32_t q:1;
uint32_t r:1;
uint32_t s:1;
uint32_t t:1;
uint32_t u:1;
uint32_t v:1;
uint32_t w:1;
uint32_t x:1;
uint32_t y:1;
uint32_t z:1;
} Flags;
uint32_t Flagi;
} Flag_Type;

Flag_Type ingl;


static void f_ask_c (void);
void f_ask_c (void)
{
Flag_Type tmp;
do
{
tmp.Flagi = __LDREXW(&ingl.Flagi);
tmp.Flags.c ^= 1;
}while ( __STREXW(tmp.Flagi, &ingl.Flagi));
__CLREX();
}

static void f_ask_d (void);
void f_ask_d (void)
{
Flag_Type tmp;
do
{
tmp.Flagi = __LDREXW(&ingl.Flagi);
tmp.Flags.d ^= 1;
}while ( __STREXW(tmp.Flagi, &ingl.Flagi));
__CLREX();
}


Сообщение отредактировал AVI-crak - Dec 28 2016, 02:19
Go to the top of the page
 
+Quote Post
jcxz
сообщение Dec 28 2016, 10:48
Сообщение #3


Гуру
******

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



Цитата(AVI-crak @ Dec 28 2016, 05:11) *
Словом, если кто предложит решение - буду рад.

А зачем Вы у себя использовали CLREX?

Цитата(amiller @ Dec 28 2016, 06:15) *
Просто не считаю, что предложенный Вами механизм, - это полная альтернатива бит-бандинга.
Поэтому жаль, что битбандинг не входит в состав архитектуры Cortex М в обязательном порядке.

Как предположение: возможно бит-бандинг убрали из-за того, что он не работает в многопроцессорных системах?
По крайней мере про механизм LDREX/STREX в мануале заявлено, что он нормально работает и в многопроцессорных системах.
А я думаю, что цель развития МК в дальнейшем - по несколько ядер в одном чипе. Некоторые вендоры это уже осознали.
Так что может и не зря сейчас переходите. Потом когда выйдет новый МК с несколькими ядрами, окажется что Ваш код с бит-бандингом весь надо переписывать, а если напишете на LDREX/STREX - он и там окажется рабочим wink.gif
Go to the top of the page
 
+Quote Post
AVI-crak
сообщение Dec 28 2016, 16:02
Сообщение #4


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

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



Цитата(jcxz @ Dec 28 2016, 16:48) *
А зачем Вы у себя использовали CLREX?

Там написано что это снятие блокировки, но мне кажется это корявый перевод гугла.
В реальности это очистка регистра адреса, который используется для мониторинга атомарного адреса. Прикол в том что когда __LDREXW и __STREXW применяется в прерывании, и перебивается другим прерыванием ровно между командами - при возврате получается глюк.
Поймал пару раз, теперь просто ставлю CLREX.
В майне любое прерывание работает как CLREX, команда короткая и простая, к тому-же с явным указанием перезагрузки операторов "memory". Этот барьер запрещает GCC размазывать функцию по всему коду, как он это любит делать.

----------------
Есть мысли? как в функцию передать адрес члена битовой структуры???
Гугол молчит на эту тему, наверное это особо_извращённая методика программирования, возможная исключительно под грибами (запрещёнными Законодательством Российской Федерации). Грибы есть, мыслей нет.
Go to the top of the page
 
+Quote Post
jcxz
сообщение Dec 29 2016, 12:23
Сообщение #5


Гуру
******

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



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

Странно.... Надо будет проверить на своём МК как нить.
Думал, что любого вложенного прерывания достаточно для очистки признака эксклюзивности.......
Go to the top of the page
 
+Quote Post
zltigo
сообщение Dec 29 2016, 12:30
Сообщение #6


Гуру
******

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



Цитата(jcxz @ Dec 29 2016, 14:23) *
Странно.... Надо будет проверить на своём МК как нить.
Думал, что любого вложенного прерывания достаточно для очистки признака эксклюзивности.......

Мне не очень интересно, поскольку вложенных прерываний для сколь-нибудь серьезных контроллеров, в том числе уже и мелких корексов, не использую принципиально. И для обработчиков прерываний использую макросы установки флагов без атомарных оберток.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
jcxz
сообщение Dec 29 2016, 13:10
Сообщение #7


Гуру
******

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



Цитата(zltigo @ Dec 29 2016, 15:30) *
Мне не очень интересно, поскольку вложенных прерываний для сколь-нибудь серьезных контроллеров, в том числе уже и мелких корексов, не использую принципиально. И для обработчиков прерываний использую макросы установки флагов без атомарных оберток.

При модификации битовых флагов в ISR даже вложенных редко требуется дополнительное обеспечение атомарности, так как как правило только один ISR работает с данной конкретной флаговой переменной.
А если нужно более одного ISR для одной флаговой переменной, я просто располагаю эти ISR на одном уровне приоритета.
А Вы просто используете частный случай этого - все прерывания на одном приоритете.
Так что можете не бояться вложенности wink.gif
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- amiller   STM32F7XX аналог bit-banding   Dec 26 2016, 10:11
- - jcxz   Цитата(amiller @ Dec 26 2016, 13:11) Чита...   Dec 26 2016, 21:34
|- - amiller   Цитата(jcxz @ Dec 27 2016, 01:34) Механиз...   Dec 27 2016, 03:05
|- - jcxz   Цитата(amiller @ Dec 27 2016, 06:05) Это ...   Dec 27 2016, 09:45
||- - amiller   Цитата(jcxz @ Dec 27 2016, 13:45) Вы дума...   Dec 27 2016, 12:57
||- - zltigo   Цитата(amiller @ Dec 27 2016, 14:57) Есть...   Dec 27 2016, 13:25
|||- - amiller   Цитата(zltigo @ Dec 27 2016, 17:25) При э...   Dec 27 2016, 14:06
||- - jcxz   Цитата(amiller @ Dec 27 2016, 15:57) Позв...   Dec 27 2016, 14:58
||- - amiller   Цитата(jcxz @ Dec 27 2016, 18:58) Блин......   Dec 28 2016, 03:15
|- - zltigo   Цитата(amiller @ Dec 27 2016, 05:05) А в ...   Dec 27 2016, 12:45
- - SSerge   Идея bit-banding в том, что он делается не процесс...   Dec 27 2016, 07:19
|- - SasaVitebsk   Цитата(SSerge @ Dec 27 2016, 10:19) Ну и ...   Dec 27 2016, 11:56
|- - _Pasha   Цитата(SasaVitebsk @ Dec 27 2016, 14:56) ...   Dec 27 2016, 12:37
- - SasaVitebsk   На AVR это делал. А теперь вообще так не делаю. Ка...   Dec 27 2016, 19:39
|- - jcxz   Цитата(SasaVitebsk @ Dec 27 2016, 22:39) ...   Dec 27 2016, 22:04
|||- - zltigo   Цитата(jcxz @ Dec 29 2016, 15:10) Так что...   Dec 29 2016, 13:31
||- - AVI-crak   Цитата(zltigo @ Dec 29 2016, 18:30) Мне н...   Dec 29 2016, 18:17
||- - zltigo   Цитата(AVI-crak @ Dec 29 2016, 20:17...   Dec 29 2016, 20:52
||- - jcxz   Цитата(zltigo @ Dec 29 2016, 23:52) Нет, ...   Dec 30 2016, 08:23
||- - zltigo   Цитата(jcxz @ Dec 30 2016, 10:23) Костыли...   Dec 30 2016, 08:51
||- - jcxz   Цитата(zltigo @ Dec 30 2016, 11:51) То, ч...   Dec 30 2016, 13:03
||- - zltigo   Цитата(jcxz @ Dec 30 2016, 15:03) Может п...   Dec 30 2016, 13:50
||- - klen   интересненько почитал... а то как то вяло на элект...   Dec 30 2016, 15:24
||- - zltigo   Цитата(klen @ Dec 30 2016, 17:24) по суще...   Dec 30 2016, 15:58
||- - AVI-crak   Цитата(zltigo @ Dec 30 2016, 21:58) Вот з...   Dec 30 2016, 18:51
||- - zltigo   Цитата(AVI-crak @ Dec 30 2016, 20:51...   Dec 30 2016, 20:52
||- - jcxz   Цитата(AVI-crak @ Dec 30 2016, 21:51...   Dec 31 2016, 11:23
|- - KnightIgor   Цитата(AVI-crak @ Dec 28 2016, 18:02...   Jan 9 2017, 13:23
|- - zltigo   Цитата(KnightIgor @ Jan 9 2017, 15:23) В ...   Jan 9 2017, 13:34
||- - KnightIgor   Цитата(zltigo @ Jan 9 2017, 15:34) И каки...   Jan 9 2017, 14:46
||- - scifi   Цитата(KnightIgor @ Jan 9 2017, 17:46) Но...   Jan 9 2017, 14:56
||- - jcxz   Цитата(KnightIgor @ Jan 9 2017, 17:46) Кс...   Jan 9 2017, 16:05
|- - scifi   Цитата(KnightIgor @ Jan 9 2017, 16:23) Я ...   Jan 9 2017, 13:47
- - Сергей Борщ   Лично я использовал bit-band для доступа к отдельн...   Dec 28 2016, 11:25
|- - jcxz   Цитата(Сергей Борщ @ Dec 28 2016, 14:25) ...   Dec 28 2016, 12:05
- - Obam   "The code designed for other Cortex®-M proces...   Jan 9 2017, 09:50
- - amiller   В процессе переезда с bit-banding сделал несколько...   Jan 9 2017, 10:52
- - scifi   Цитата(amiller @ Jan 9 2017, 13:52) В про...   Jan 9 2017, 11:38
- - zltigo   Цитата(amiller @ Jan 9 2017, 12:52) В про...   Jan 9 2017, 12:17


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

 


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


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