|
STM32F7XX аналог bit-banding |
|
|
|
 |
Ответов
|
Dec 28 2016, 02:11
|
Частый гость
 
Группа: Участник
Сообщений: 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
|
|
|
|
|
Dec 28 2016, 10:48
|
Гуру
     
Группа: Свой
Сообщений: 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 - он и там окажется рабочим
|
|
|
|
|
Dec 28 2016, 16:02
|
Частый гость
 
Группа: Участник
Сообщений: 182
Регистрация: 16-10-15
Пользователь №: 88 894

|
Цитата(jcxz @ Dec 28 2016, 16:48)  А зачем Вы у себя использовали CLREX? Там написано что это снятие блокировки, но мне кажется это корявый перевод гугла. В реальности это очистка регистра адреса, который используется для мониторинга атомарного адреса. Прикол в том что когда __LDREXW и __STREXW применяется в прерывании, и перебивается другим прерыванием ровно между командами - при возврате получается глюк. Поймал пару раз, теперь просто ставлю CLREX. В майне любое прерывание работает как CLREX, команда короткая и простая, к тому-же с явным указанием перезагрузки операторов "memory". Этот барьер запрещает GCC размазывать функцию по всему коду, как он это любит делать. ---------------- Есть мысли? как в функцию передать адрес члена битовой структуры??? Гугол молчит на эту тему, наверное это особо_извращённая методика программирования, возможная исключительно под грибами (запрещёнными Законодательством Российской Федерации). Грибы есть, мыслей нет.
|
|
|
|
|
Dec 29 2016, 18:17
|
Частый гость
 
Группа: Участник
Сообщений: 182
Регистрация: 16-10-15
Пользователь №: 88 894

|
Цитата(zltigo @ Dec 29 2016, 18:30)  Мне не очень интересно, поскольку вложенных прерываний для сколь-нибудь серьезных контроллеров, в том числе уже и мелких корексов, не использую принципиально. Вы серьёзно? Просто это как купить билет на самолёт, и отправится в путь пешком. Вложенные прерывания получаются автоматически, при назначении им разных приоритетов. Второе, обработка флагов регистров прерываний - это эксклюзивная, никому больше не нужная операция. Если прерывание перебивает другое на обработке флагов - ничего страшного не случится, адреса флагов не пересекаются. И не стоит забывать про call функции, которые в последнее время пихают куда попало, даже в обработчики прерываний. Посему, если есть возможность выстрелить себе в ногу - такой человек найдётся. Потом придётся искать глюк, который срабатывает синхронно с магнитными бурями на Марсе. Обработка глобальных флагов в прерывании должна завершаться CLREX, всё по той-же причине.
|
|
|
|
|
Dec 29 2016, 20:52
|

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

|
Цитата(AVI-crak @ Dec 29 2016, 20:17)  Вы серьёзно? Да. Цитата Просто это как купить билет на самолёт, и отправится в путь пешком. Нет, это как имея костыли ими НЕ пользоваться. Костыли в виде вложенности не нужны по причине использования функциональной операционной системы. Я же писал об этом. Цитата Вложенные прерывания получаются автоматически, при назначении им разных приоритетов. Большая, но ненужная мне радость. На самом деле контроллер прерываний МЛАДШИХ кортексов это именно костыль. У старших, как и у "старых" армов, контролеры прерываний без этих костылей. Причина проста - явно предполагалось перетаскивать под крыло младших кортексов программистов с восьмибитовиков с их де-факто стилем писательства с стиле "суперцикл". Для такого подхода к делу наличие наворотов контролера в сторону навороченных вложенных прерываний, есть несомненное благо. Цитата Посему, если есть возможность выстрелить себе в ногу - такой человек найдётся. Посему для начала не надо плодить без надобности решения для стрельбы в ногу.
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
Сообщений в этой теме
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     jcxz Цитата(zltigo @ Dec 29 2016, 15:30) Мне н... Dec 29 2016, 13:10      zltigo Цитата(jcxz @ Dec 29 2016, 15:10) Так что... Dec 29 2016, 13:31       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
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|