![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| Ivan. |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 291 Регистрация: 2.11.2004 Репутация: 1 Всего: 2 |
Наверное это глупый вопрос и я подозреваю, что это сделать невозможно, но всеже:
Необходимо на этапе компиляции получить (и записать в константу) адрес битового поля, номер начального бита и количество бит, как это сделать? -------------------- Я могу ВСЁ, вопрос - сколько времени у меня это займет! |
|||
|
||||
| jonie |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5613 Регистрация: 21.8.2005 Где: Владимир Репутация: 15 Всего: 118 |
минимально адресуемая ячейка это байт.
-------------------- Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет... |
|||
|
||||
| Doc_d0s |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 206 Регистрация: 15.12.2004 Где: в кресле Репутация: 2 Всего: 3 |
можно по конкретнее с кусками кода...не уловил суть проблемы...
--------------------
Админ- это вождь Apache'й :) |
|||
|
||||
| Ivan. |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 291 Регистрация: 2.11.2004 Репутация: 1 Всего: 2 |
чтото типа такого, только чтоб работало. естевственно это работать не будет, а вообще возможно получить такие данные? -------------------- Я могу ВСЁ, вопрос - сколько времени у меня это займет! |
|||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 63 Всего: 196 |
Можно. Напиши класс BitFieldPointer...
|
|||
|
||||
| threef |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 375 Регистрация: 27.10.2005 Где: Запорожье Репутация: 9 Всего: 10 |
Адрес битового поля сможешь получить экспериментально. Выглядеть он будет в виде адреса байта+ смещение в байте. Смещение как раз и получишь экспериментально:разложи битовое поле на биты, заполни нолями и затем - единицами. Лучше пользуйся беззнаковыми целыми. Использовать этот адрес сможешь адрес + операция сдвига.
И нахрена это ? Ведь битовое поле для того и предназначено, чтобы не было головной боли со сдвигами... |
|||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 63 Всего: 196 |
Зачем ставить эксперименты с положением бит? Их положение в байте строго определенное - бит 7 слева, бит 0 справа.
Это сообщение отредактировал(а) bsa - 16.7.2007, 21:49 |
|||
|
||||
| threef |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 375 Регистрация: 27.10.2005 Где: Запорожье Репутация: 9 Всего: 10 |
|
|||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 63 Всего: 196 |
Есть два варианта положений байт в слове: big endian (от старшего к младшему) и little endian (от младшего к старшему). На большинстве персональных компьютеров (x86) это little endian.
|
|||
|
||||
| Ln78 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 274 Регистрация: 25.11.2006 Репутация: 13 Всего: 15 |
Ivan., я когда-то писал несколько макросов и вспомогательных классов для структур типа:
с тем, чтобы использовать их при составлении множества нужных мне параметров примерно таким образом: DATA_BIT_ARRAY("x0",ss,s0,x0); Все нужные мне параметры я вводил вручную (в тексте программы), в результате заполнялось множество std::map<std::string, TypeVariant*> Data; Ну и, собственно, были определены методы Get и Set - получения и присваивания значений. Если тебя интересует это, то я на днях подготовлю тебе файлы с макросами и примером их использования Это сообщение отредактировал(а) Ln78 - 17.7.2007, 09:46 |
|||
|
||||
| Ivan. |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 291 Регистрация: 2.11.2004 Репутация: 1 Всего: 2 |
Все это не то, мне нужно получить данные на этапе компеляции, а не во время работы программы.
Я согласен хотябы узнать только адрес начального байта битовой переменной.
-------------------- Я могу ВСЁ, вопрос - сколько времени у меня это займет! |
|||
|
||||
| Ln78 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 274 Регистрация: 25.11.2006 Репутация: 13 Всего: 15 |
Что ты понимаешь под данными? С помощью макросов как раз и получаются адрес целой переменной и маска, по которой находится то или иное битовое поле. И это всё, естественно, становится известно на этапе компиляции, я же просто заполняю исходный код такими макросами. Просто в той моей задаче эта информация использовалась, чтобы потом иметь возможность (уже в процессе выполнения задачи) получать или устанавливать нужные значения элементам структуры. Ведь и тебе эти данные нужны не просто так, ты же их потом как-то собираешься использовать? Добавлено через 4 минуты и 6 секунд Нет, я тебя обманул, вроде эти данные станут известны уже только в начале выполнения программы. Я уже точно не помню, относительно давно я этим занимался |
|||
|
||||
| bsa |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 63 Всего: 196 |
Есть у меня подозрение, что ты где-то накосячил на этапе проектирования. Нет никакого смысла получать адрес на этапе компиляции, так как на этапе компиляции ты можешь напрямую обращаться к полям структуры тем самым получая доступ к данным. Лучше объясни, зачем тебе это надо, и кто-нибудь скажет, как это правильно можно реализовать. |
||||
|
|||||
| Ivan. |
|
||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 291 Регистрация: 2.11.2004 Репутация: 1 Всего: 2 |
Первое, что я хочу уточнить: у меня процессор не X86, а микроконтроллер и по этому там особо не разгонишься. Мне нужно получить как можно больше информации еще на этапе компиляции, сформировать какую то структуру, чтобы потом быстро ее обрабатывать.
И так, задача у меня такая: Нужно построить такую иерархию, каторая позволяла бы легко строить структурированное меню (меню отображения информации, настройки параметров и т.д.). есть класс:
От этого класса потом плодятся подклассы типа TMenuVar, TMenuCombo, TMenuClock, TMenuPasword, TMenuBin, ... А вся информация чем и как эти классы должны управлять и отображать находится в структуре TMenuProp. Эта структура содержит такой вид:
Для каждого пункта меню мне нужно сформировать такую структуру и положить ее в область кода (потому что в оперативку, объемем в 4K, это все не влезет) пример:
Естевственно есть макросы по заполнению этой структуры (объединение параметров, и т.д.) Но когда вопрос встает об указании битового поля приходится брать чтото радом лежащее, говорить, что от этого адреса еще на пару байт вперед, там лежит от 4 бита на протяжении 3 бит переменная. Геморройно! Вот я и хочу написать какой нибудь макрос, каторый би раскладывал бы это все по полочкам. -------------------- Я могу ВСЁ, вопрос - сколько времени у меня это займет! |
||||||
|
|||||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 63 Всего: 196 |
Что-то я опять не понял... А почему вариант с фигурными скобками тебя не устраивает? Или битовые поля инициализировать таким образом уже нельзя?
|
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |