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

 
 
4 страниц V  < 1 2 3 4 >  
Reply to this topicStart new topic
> реализация булевых переменных в bit-band, кто до чего дошел
Golikov A.
сообщение Oct 21 2015, 08:20
Сообщение #16


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



Цитата
Блин! прочитайте про bit-banding.

чего читать то? Я не понимаю зачем возня и почему нельзя писать напрямую через адрес, ну типа вот так (*((volatile unsigned long *) 0x43D00000)) ?

пробил дефайнами нужные биты и сиди ими щелкай, чего я не учитываю?
Go to the top of the page
 
+Quote Post
scifi
сообщение Oct 21 2015, 08:23
Сообщение #17


Гуру
******

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



Цитата(Golikov A. @ Oct 21 2015, 11:20) *
пробил дефайнами нужные биты и сиди ими щелкай, чего я не учитываю?

Всё-таки приятнее, когда память выделяется автоматически и всё такое.
Но всё равно семантика типа bool не соблюдается, приходится приписывать какое-то волшебное слово. Короче, получается непереносимый код. Даже в том же Cortex-M0 нет никакого bit banding.
Так что фтопку 1111493779.gif
Go to the top of the page
 
+Quote Post
zltigo
сообщение Oct 21 2015, 08:31
Сообщение #18


Гуру
******

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



QUOTE (scifi @ Oct 21 2015, 10:30) *
Какой ужас. Зачем идти на все эти извращения? Чтобы сэкономить несколько байтов?

Я использую "это" для обеспечения атомарности доступа к флагам. Великолепный механизм позволяющий кроме обеспечения атомарности еще и количество тактов сократить.
А вот без этого получается реальный ужас c запретами-восстановлениями прерываний для обеспечения атомарного доступа.



--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Oct 21 2015, 08:33
Сообщение #19


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



ПЛАКАТЬ ХОЧЕТСЯsm.gif...
нафига памяти то выделятся? Вы же когда в периферию обращаетесь вы же не делаете выделения памяти, а запись в регистры идет тоже просто по адресам, зачем тут чего то выделять?

кстати тут недавно было что обращение через битбанд к регистрам только записи, типа флагов прерываний вызывает проблемы, так как битбанд всегда читает, изменяет, пишет, а это приводит к неопределенным результатам с регистрами только записи...
Go to the top of the page
 
+Quote Post
zltigo
сообщение Oct 21 2015, 08:36
Сообщение #20


Гуру
******

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



QUOTE (Golikov A. @ Oct 21 2015, 11:20) *
пробил дефайнами нужные биты и сиди ими щелкай, чего я не учитываю?

1) Атомарности операции.
2) Затрат времени исполение дополнительной кучи команд.

Учитесь думать самостоятельно.






--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
_Pasha
сообщение Oct 21 2015, 08:41
Сообщение #21


;
******

Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509



Цитата(Golikov A. @ Oct 21 2015, 11:33) *
ПЛАКАТЬ ХОЧЕТСЯsm.gif...
нафига памяти то выделятся? Вы же когда в периферию обращаетесь вы же не делаете выделения памяти, а запись в регистры идет тоже просто по адресам, зачем тут чего то выделять?

Товарищ не понимааает (с)
Если у Вас есть возможность заводить static bool в разных модулях, то это гораздо интереснее чем вручную и глобально их определять.
Насчет BSRR - история давняя, типа масляного масла получается, неудивительно что там конфликты возникают.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Oct 21 2015, 08:43
Сообщение #22


Гуру
******

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



QUOTE (Golikov A. @ Oct 21 2015, 11:33) *
ПЛАКАТЬ ХОЧЕТСЯsm.gif...
нафига памяти то выделятся? Вы же когда в периферию обращаетесь вы же не делаете выделения памяти, а запись в регистры идет тоже просто по адресам, зачем тут чего то выделять?

Слезами делу не поможешь. Так что наморщите ум и подумайте.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
scifi
сообщение Oct 21 2015, 08:47
Сообщение #23


Гуру
******

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



Опять 25 laughing.gif
Пришёл хамоватый тролль zltigo, а Голиков никак не может перестать его кормить.
Осталось откинуться в кресле и достать попкорн biggrin.gif
Go to the top of the page
 
+Quote Post
_Pasha
сообщение Oct 21 2015, 09:02
Сообщение #24


;
******

Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509



Цитата(scifi @ Oct 21 2015, 11:47) *
достать попкорн biggrin.gif

если десяток строчек в скрипте линкера вызывает столько воплей, то я, пожалуй, випью biggrin.gif
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Oct 21 2015, 09:05
Сообщение #25


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



Цитата
Если у Вас есть возможность заводить static bool в разных модулях

Ну то есть я правильно понял, это просто для создания переменных через которые писать аля удобнее, чем через прямой указатель...

Цитата
Слезами делу не поможешь. Так что наморщите ум и подумайте.

Цитата
Учитесь думать самостоятельно.

Есть подозрения среднеуважаемый zltigo что вы испытываете некие комплексы, связанные с вашим уровнем интеллекта, и потому по поводу и без пытаетесь словами всем объяснить что вы умнее%)....
Однако как показала практика с понималкой у вас не очень, потому я вам разжую:
я предлагал дефайном пробить область в битбанде, чтобы как бы непонятному адресу поставить в соответствие понятное название бита, и задефайнить прямо макрос, чтобы писать по его имени прямо в эту область. Как делают с регистрами периферии. Теперь поняли?
Go to the top of the page
 
+Quote Post
zltigo
сообщение Oct 21 2015, 09:24
Сообщение #26


Гуру
******

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



QUOTE (Golikov A. @ Oct 21 2015, 12:05) *
Теперь поняли?

Понял что Вы так и не поняли причины "нафига памяти то выделятся? ", продолжаете нести пургу про переферийные адреса и поучать как писать define. Область RAM это в отличие фиксированных адресов периферии, распределяемая компилятором и линкером память.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Oct 21 2015, 09:30
Сообщение #27


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



Эта область плавающая?
то есть в одном контроллере в разных программах при одной конфигурации проца, может при обращении по адресу 0x43D00000 происходить запись в разные биты? Или не происходит вообще?
Go to the top of the page
 
+Quote Post
_Pasha
сообщение Oct 21 2015, 09:47
Сообщение #28


;
******

Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509



Цитата(AVI-crak @ Oct 16 2015, 19:05) *
Код
typedef uint32_t __attribute__((section(".bitmap"))) bit;


Вы уверенны что смена названия типа переменной лучше макроса? У меня GCC матерится на смену типа.

Здравствуйте.
Еще не добрался до проекта.
Но обязательно проверю и сообщу.
Go to the top of the page
 
+Quote Post
AVI-crak
сообщение Oct 21 2015, 09:57
Сообщение #29


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

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



И всё-же прочитайте доку на Bit-band.

Для работы через макрос необходимо сначала выделить немножко простой памяти под обычную 32b переменную, из которой потом макрос будет брать по одному биту под имя. Это муторно и неудобно, в какой-то момент можно совершить ошибку со свободным битом, и сношаться с отладчиком долгое время. Макрос нормально работает с физикой, у которой реальный адрес. Но когда флаги создаются в простой памяти в разных местах - следить уже сложно.
Я предлагаю переложить всю работу по поиску нужного куска памяти - на линкер, это его первичная обязанность.

Кстати, у меня проект на 18 постоянных и 200 с копейкой подгружаемых потоков, на каждую нитку по 8 флагов минимум. Я-б рехнулся с выделением памяти под флаги. А так, я даже не задумываюсь - где они хранятся.

Есно для проекта уровня "поморгать светодиодом" - использование моего способа чисто академическое.
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Oct 21 2015, 10:02
Сообщение #30


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



Цитата(Golikov A. @ Oct 21 2015, 14:30) *
то есть в одном контроллере в разных программах при одной конфигурации проца, может при обращении по адресу 0x43D00000 происходить запись в разные биты?

Речь идёт о том, что при объявлении бит-банд переменной по адресу 0x43D00000 нужно как-то указать линкеру, что область ОЗУ, с которой мы работаем бит-бандом при обращении по адресу 0x43D00000, занята.


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post

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

 


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


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