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

 
 
4 страниц V  « < 2 3 4  
Reply to this topicStart new topic
> реализация булевых переменных в bit-band, кто до чего дошел
copov
сообщение Oct 22 2015, 08:33
Сообщение #46


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

Группа: Свой
Сообщений: 118
Регистрация: 2-03-05
Из: Санкт-Петербург
Пользователь №: 3 012



А чего читать. Bit-band для обращения по битам в отдельной области SRAM или в области периферийный регистров и не совпадают по адресам при обращении к ним по словам.

А понял в чем вопрос, просто и в голову не приходило, что биты могут понадобиться не для обращения к периферии.
Зарезервировать в обычной SRAM по разному в разных средах. В Keil можно так:
volatile uint32_t Var_for_bit __attribute__((at(0x20000000)));
Go to the top of the page
 
+Quote Post
_Pasha
сообщение Oct 22 2015, 08:36
Сообщение #47


;
******

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



biggrin.gif они еще и читать не умеют
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Oct 22 2015, 08:47
Сообщение #48


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(copov @ Oct 22 2015, 11:33) *
Зарезервировать в обычной SRAM по разному в разных средах. В Keil можно так:
volatile uint32_t Var_for_bit __attribute__((at(0x20000000)));
Это точно резервирование?

После этого точно нельзя сделать вот так? :
volatile uint32_t Var_for_bit1 __attribute__((at(0x20000000)));
volatile uint32_t Var_for_bit2 __attribute__((at(0x20000001)));
volatile uint32_t Var_for_bit3 __attribute__((at(0x20000000)));



--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
zltigo
сообщение Oct 22 2015, 09:00
Сообщение #49


Гуру
******

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



QUOTE (copov @ Oct 22 2015, 10:05) *
Область bit-band и так лежит вне области ОЗУ для данных...

Разумеется это абсолютно не так. Посему, все что Вы написали далее не верно. Читайте документацию или хотя-бы то, что здесь разжевывали ( безрезультатно sad.gif, как вижу ) Голикову и Вам.

QUOTE (copov @ Oct 22 2015, 11:33) *
просто и в голову не приходило, что биты могут понадобиться не для обращения к периферии.

Биты, как и байты и вообще любые структры, используюся для всего чего нужно. При этом при работе с битами чрезе bit-band получаем два ВАЖНЕЙШИХ
эффекта:
1) Атомарность операци;
2) Выигрыш по скорости.
Об этом уже тоже здесь писалось sad.gif


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
copov
сообщение Oct 22 2015, 10:59
Сообщение #50


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

Группа: Свой
Сообщений: 118
Регистрация: 2-03-05
Из: Санкт-Петербург
Пользователь №: 3 012



Цитата(Сергей Борщ @ Oct 22 2015, 11:47) *
Это точно резервирование?

После этого точно нельзя сделать вот так? :
volatile uint32_t Var_for_bit1 __attribute__((at(0x20000000)));
volatile uint32_t Var_for_bit2 __attribute__((at(0x20000001)));
volatile uint32_t Var_for_bit3 __attribute__((at(0x20000000)));

Нельзя переменные uint32_t должны располагаться по адресам кратным 4
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Oct 22 2015, 11:18
Сообщение #51


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(copov @ Oct 22 2015, 13:59) *
Нельзя переменные uint32_t должны располагаться по адресам кратным 4
Да, про это я не подумал, но вопрос был о другом. Пусть будет так:

volatile uint32_t Var_for_bit1 __attribute__((at(0x20000000)));
volatile uint32_t Var_for_bit2 __attribute__((at(0x20000004)));
volatile uint32_t Var_for_bit3 __attribute__((at(0x20000000)));


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
jcxz
сообщение Oct 22 2015, 11:47
Сообщение #52


Гуру
******

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



Цитата(copov @ Oct 22 2015, 13:05) *
Область bit-band и так лежит вне области ОЗУ для данных, поэтому для нее ничего не надо специально резервировать, если обращаться туда по абсолютным адресам. С какого компоновщик будет туда размещать переменные.
Обидели Голикова, чуть ли не единственно грамотного человека в этой ветке и радуются.

Golikov A то хоть поздно, но всё-же прозрел, а Вы так и блуждаете в темноте....
Go to the top of the page
 
+Quote Post
copov
сообщение Oct 22 2015, 13:32
Сообщение #53


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

Группа: Свой
Сообщений: 118
Регистрация: 2-03-05
Из: Санкт-Петербург
Пользователь №: 3 012



Цитата(Сергей Борщ @ Oct 22 2015, 14:18) *
Да, про это я не подумал, но вопрос был о другом. Пусть будет так:

volatile uint32_t Var_for_bit1 __attribute__((at(0x20000000)));
volatile uint32_t Var_for_bit2 __attribute__((at(0x20000004)));
volatile uint32_t Var_for_bit3 __attribute__((at(0x20000000)));

volatile uint32_t Var_for_bit1 __attribute__((at(0x20001000)));
volatile uint32_t Var_for_bit2 __attribute__((at(0x20001004)));
volatile uint32_t Var_for_bit3 __attribute__((at(0x20001000)));
В Keil комплилятор ругается, что переменная Var_for_bit3 должна начинаться с 0x20001008 адреса. Что не удивительно - это прямая обязанность нормального компилятора (может быть только по-другому ругаться будет в другой среде разработки).
Go to the top of the page
 
+Quote Post

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

 


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


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