Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту

Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей...

 
Опции темы
Непрочитано 08.12.2010, 11:45  
code-by
Прописка
 
Регистрация: 04.08.2006
Сообщений: 181
Сказал спасибо: 1
Сказали Спасибо 31 раз(а) в 31 сообщении(ях)
code-by на пути к лучшему
По умолчанию Как сделать битовый массив в codevision

прошу помочь организовать битовый массив в codevision.
если делать на bool, то на каждый элемент массива выделяется 8 битов (т.е. также как и char). хотелось бы 16 элементов массива поместить в 16 бит

если такое не реализуемое, то что быстрее: обращение к любому элементу массива char [16] или 16 раз сделать сдвиг для определения бита в int (‹‹)?

можно ли сделать битовый массив-стек и работать через указатели?

спасибо
Реклама:
code-by вне форума  
Непрочитано 08.12.2010, 12:55  
MisterDi
Почётный гражданин KAZUS.RU
 
Аватар для MisterDi
 
Регистрация: 13.02.2008
Адрес: Днепр. Украина
Сообщений: 3,294
Сказал спасибо: 442
Сказали Спасибо 1,048 раз(а) в 706 сообщении(ях)
MisterDi на пути к лучшему
По умолчанию Re: как сделать битовый массив в codevision

Для определения значения бита проще использовать логическое И по маске:
0х1 - bit0
0x2 - bit1
0x4 - bit2
0x8 - bit3
0x10 - bit4
0x20 - bit5
0x40 - bit6
0x80 - bit7

И многие компиляторы так делают.
__________________
misterdi<@>i.ua
MisterDi вне форума  
Непрочитано 08.12.2010, 14:18  
code-by
Прописка
 
Регистрация: 04.08.2006
Сообщений: 181
Сказал спасибо: 1
Сказали Спасибо 31 раз(а) в 31 сообщении(ях)
code-by на пути к лучшему
По умолчанию Re: Как сделать битовый массив в codevision

а если у меня будет long? 32 маски хранить в памяти? да еще обращатся к ним по имени, а не по индексу
code-by вне форума  
Непрочитано 08.12.2010, 14:30  
realid
Супер-модератор
 
Аватар для realid
 
Регистрация: 15.10.2007
Сообщений: 3,530
Сказал спасибо: 172
Сказали Спасибо 1,560 раз(а) в 810 сообщении(ях)
realid на пути к лучшему
По умолчанию Re: Как сделать битовый массив в codevision

Сообщение от code-by Посмотреть сообщение
да еще обращатся к ним по имени, а не по индексу
Можно по индексу маску сделать if(var & (1 ‹‹ index))
realid вне форума  
Непрочитано 08.12.2010, 14:43  
code-by
Прописка
 
Регистрация: 04.08.2006
Сообщений: 181
Сказал спасибо: 1
Сказали Спасибо 31 раз(а) в 31 сообщении(ях)
code-by на пути к лучшему
По умолчанию Re: Как сделать битовый массив в codevision

Сообщение от realid Посмотреть сообщение
Можно по индексу маску сделать if(var & (1 ‹‹ index))
такой вариант уже есть... но, наверное, он работает дольше, например при обращении к 15 биту, чем прямой вызов var(15).
code-by вне форума  
Непрочитано 08.12.2010, 14:56  
realid
Супер-модератор
 
Аватар для realid
 
Регистрация: 15.10.2007
Сообщений: 3,530
Сказал спасибо: 172
Сказали Спасибо 1,560 раз(а) в 810 сообщении(ях)
realid на пути к лучшему
По умолчанию Re: Как сделать битовый массив в codevision

Сообщение от code-by Посмотреть сообщение
такой вариант уже есть... но, наверное, он работает дольше, например при обращении к 15 биту, чем прямой вызов var(15).
Нет в Си битовых массивов как вы хотите (хотелось бы 16 элементов массива поместить в 16 бит) и обращаться по индексу типа MassivBits[3] нет возможности.
realid вне форума  
Непрочитано 08.12.2010, 15:15  
picavr
Почётный гражданин KAZUS.RU
 
Аватар для picavr
 
Регистрация: 07.10.2007
Адрес: Луганск
Сообщений: 1,816
Сказал спасибо: 13
Сказали Спасибо 399 раз(а) в 214 сообщении(ях)
picavr на пути к лучшему
По умолчанию Re: Как сделать битовый массив в codevision

а вот так;
Код:
//массив масок битов в FLASH. для обращения к битам по переменой
__flash unsigned int mask_bit_int[16] {0x0001,0x0002,0x0004,0x0008,0x0010, ..итд }

unsigned int masiv_bit_int //массив битов в RAM
unsigned char nomer_bita_int //указатель в массиве битов

//сброс бита
masiv_bit_int=masiv_bit_int & !mask_bit_int[nomer_bita_int]

//установка бита
masiv_bit_int=masiv_bit_int | mask_bit_int[nomer_bita_int]

//проверка бита
if ((masiv_bit_int & mask_bit_int[nomer_bita_int])›0)
__________________
"picavr(ГАВ)мыло.ру" USB_Analyzer, Digital_Storage_Oscilloscope "picavr.kr1.ru" заказы в Китай компонентов/изготовление: плат/ЖКИ/мембраных клавиатур/имп трансформаторов

Последний раз редактировалось picavr; 08.12.2010 в 16:34.
picavr вне форума  
Непрочитано 08.12.2010, 15:22  
realid
Супер-модератор
 
Аватар для realid
 
Регистрация: 15.10.2007
Сообщений: 3,530
Сказал спасибо: 172
Сказали Спасибо 1,560 раз(а) в 810 сообщении(ях)
realid на пути к лучшему
По умолчанию Re: Как сделать битовый массив в codevision

Сообщение от picavr Посмотреть сообщение
а вот так;
if ((masiv_bit_int | mask_bit_int[nomer_bita_int])›0)
всегда будет больше 0.

Нужно if ((masiv_bit_int & mask_bit_int[nomer_bita_int])›0)
realid вне форума  
Непрочитано 08.12.2010, 15:54  
code-by
Прописка
 
Регистрация: 04.08.2006
Сообщений: 181
Сказал спасибо: 1
Сказали Спасибо 31 раз(а) в 31 сообщении(ях)
code-by на пути к лучшему
По умолчанию Re: Как сделать битовый массив в codevision

Сообщение от picavr Посмотреть сообщение
а вот так;
Код:
//массив масок битов
__flash unsigned int mask_bit_int[16] {0x01,0x02,0x04,0x08,0x10, ..итд }
смысл? int[16] займет памяти больше char[16]...
code-by вне форума  
Непрочитано 08.12.2010, 16:25  
picavr
Почётный гражданин KAZUS.RU
 
Аватар для picavr
 
Регистрация: 07.10.2007
Адрес: Луганск
Сообщений: 1,816
Сказал спасибо: 13
Сказали Спасибо 399 раз(а) в 214 сообщении(ях)
picavr на пути к лучшему
По умолчанию Re: Как сделать битовый массив в codevision

Сообщение от realid Посмотреть сообщение
Нужно if ((masiv_bit_int & mask_bit_int[nomer_bita_int])›0)
спасибо, исправил... ошибка копи-паст ))) забыл отредактить

Сообщение от code-by Посмотреть сообщение
смысл? int[16] займет памяти больше char[16]...
Уважаемый... тут вы не вьехали...masк_bit_int = это массив маск битов во FLASH, а не сам массив битов в RAM. Он будет ОДИН и тот же, для всех массивов битов в РАМе, сколько бы их не организовали.
А размер каждого битового массива masiv_bit_int, в RAMе будет занимать один INT=2 байта=16 бит.. и адресоваться он будет по номеру в переменой nomer_bita_int. Что и требовалось автору.
А дополнительные 32 байт во FLASH это мелочи.

А размер, смотрите что меньше скомпилит ваш компилятор. Сдвиг в цикле или обращение через массив масок.
__________________
"picavr(ГАВ)мыло.ру" USB_Analyzer, Digital_Storage_Oscilloscope "picavr.kr1.ru" заказы в Китай компонентов/изготовление: плат/ЖКИ/мембраных клавиатур/имп трансформаторов

Последний раз редактировалось picavr; 08.12.2010 в 16:37.
picavr вне форума  
 

Закладки

Метки
codevision, бит, массив
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как понизить ТВ частоты???? retro-person Автоматика и аппаратура связи 5 02.08.2010 16:42
Сравнение массивов .Как лучше сделать? Zemlyanov Микроконтроллеры, АЦП, память и т.д 4 04.03.2010 11:48
[Решено] Третье Послание Человечеству lelkanet Отвлекитесь, эмбеддеры! 201 06.01.2010 00:33
Как сделать силовой выпрямитель Zorg1 Источники питания и свет 5 05.11.2009 23:26


Часовой пояс GMT +4, время: 10:52.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot