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

 
 
> 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

Сообщений в этой теме
- 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
|- - AVI-crak   Цитата(jcxz @ Dec 28 2016, 16:48) А зачем...   Dec 28 2016, 16:02
|- - jcxz   Цитата(AVI-crak @ Dec 28 2016, 19:02...   Dec 29 2016, 12:23
||- - zltigo   Цитата(jcxz @ Dec 29 2016, 14:23) Странно...   Dec 29 2016, 12:30
||- - jcxz   Цитата(zltigo @ Dec 29 2016, 15:30) Мне н...   Dec 29 2016, 13:10
|||- - 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 Текстовая версия Сейчас: 22nd August 2025 - 12:26
Рейтинг@Mail.ru


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