3-х мерный массив.

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
PacMan
Первый раз сказал Мяу!
Сообщения: 32
Зарегистрирован: Ср апр 15, 2009 21:08:43

3-х мерный массив.

Сообщение PacMan »

День добрый такой вопрос.
мне надо хранить в микроконтроллере AtTiny2313 массив 3-х мерный.
подскажите, как мне его хранить, компилятор ругается.
я делаю это так
extern int mas[5][5][5]
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Сообщение ARV »

extern - это значит внешний. то есть где-то еще ваш массив должен быть определен, а в этом месте вы лишь сообщаете, что он существует. вы его поределили в том, другом месте?
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
PacMan
Первый раз сказал Мяу!
Сообщения: 32
Зарегистрирован: Ср апр 15, 2009 21:08:43

Сообщение PacMan »

Вообщем проблема в чем? в том что мне не хватает памяти. как мне решить проблему?
(задача, хранить бинарный 3-х мерный массив)

ришений уйму.


например
1.
переводить int в десятичную систему.
То есть в одном int можно хранить(в моем случае удобно) 5
2.
Хранить массив не в int а в char. Но памяти опять не хватает
Но можно в строке . На сколько я знаю char * поддерживает до 255 символов. Для моей задачи етого более чем.

Вот только я не уверен что все так просто думаю что есть более простые методы
SII
Вымогатель припоя
Сообщения: 635
Зарегистрирован: Пт янв 30, 2009 14:50:35
Откуда: Солнечногорск

Сообщение SII »

PacMan писал(а):переводить int в десятичную систему.
То есть в одном int можно хранить(в моем случае удобно) 5


А по-русски? Причём здесь десятичная система и какое отношение к int имеет значение 5? В памяти всё в любом случае всё хранится в двоичном виде.

PacMan писал(а):На сколько я знаю char * поддерживает до 255 символов.


char * -- это указатель на символ, и ничего более. Он никак не может поддерживать "до 255" или до чего ещё угодно символов -- он просто содержит некий адрес памяти, по которому лежит какой-нибудь символ. А ограничением в этой задаче, похоже, является объём ОЗУ контроллера, а значит, надо думать, как хранить данные компактнее.
PacMan
Первый раз сказал Мяу!
Сообщения: 32
Зарегистрирован: Ср апр 15, 2009 21:08:43

Сообщение PacMan »

вообщем про int)))
мне надо хранить массив int mas[5][5][5]
предлагаю взять массив int mas[5][5]
перевести mas[i][j] в двоичный вид, получится что то типа(пусть mas[i][j] равен 31) 11111 тоесть я избавляюсь от одного "[]" понятно?)))


про char, я имел ввиду char s[25];
или char *s;
s = new char[];
)))
PacMan
Первый раз сказал Мяу!
Сообщения: 32
Зарегистрирован: Ср апр 15, 2009 21:08:43

Сообщение PacMan »

можно же unsigned int mas[5][5][5]
unsigned int = 2 байт => 250 байт?
PacMan
Первый раз сказал Мяу!
Сообщения: 32
Зарегистрирован: Ср апр 15, 2009 21:08:43

Сообщение PacMan »

можете подсказать как в CvAvr перевести из 10-й в 2-ю систему?
Аватара пользователя
Synergetik
Встал на лапы
Сообщения: 117
Зарегистрирован: Чт фев 28, 2008 23:54:35
Откуда: Воскресенск, МО
Контактная информация:

Re: 3-х мерный массив.

Сообщение Synergetik »

PacMan писал(а):мне надо хранить в микроконтроллере AtTiny2313 массив 3-х мерный.
подскажите, как мне его хранить

Да в чём проблема? Если нужно хранить трёхмерный массив двоичных одноразрядных чисел и чётко фиксированы элементы массива, объявите двухмерный массив char mass[5][5], в char'е 8 битов - используйте первые 5 посредством маски. Перерасхода памяти почти не будет. Если третья размерность больше 8, используйте int и т. д. Вот и всё.
Последний раз редактировалось Synergetik Сб сен 26, 2009 21:01:19, всего редактировалось 1 раз.
PacMan
Первый раз сказал Мяу!
Сообщения: 32
Зарегистрирован: Ср апр 15, 2009 21:08:43

Сообщение PacMan »

что значит посредством маски?)))
PacMan
Первый раз сказал Мяу!
Сообщения: 32
Зарегистрирован: Ср апр 15, 2009 21:08:43

Сообщение PacMan »

а как обратится к 1 биту 2 ..... ?
Аватара пользователя
Synergetik
Встал на лапы
Сообщения: 117
Зарегистрирован: Чт фев 28, 2008 23:54:35
Откуда: Воскресенск, МО
Контактная информация:

Сообщение Synergetik »

PacMan писал(а):что значит посредством маски?)))

Маска реализуется операцией поразрядного И.
Пусть имеется массив char mass[rows][cols];. Чтение из элемента mass[x][y][z], если не ошибаюсь: t=mass[x][y]&(1<<z); Индексы x, y, z начинаются с нуля.

Запись сейчас не могу сообразить. В крайнем случае ручками или условным оператором if.
PacMan
Первый раз сказал Мяу!
Сообщения: 32
Зарегистрирован: Ср апр 15, 2009 21:08:43

Сообщение PacMan »

спасибо за помощь.
у меня еще один вопрос. как теперь из 2 -> 10 систему перевести
тоесть мне надо записать в эту 3-ю координуту))

я понимаю это должно быть так
mass[i][j]=n;
где n запись ( пусть 11111 ) в 10 - й форме
Аватара пользователя
Synergetik
Встал на лапы
Сообщения: 117
Зарегистрирован: Чт фев 28, 2008 23:54:35
Откуда: Воскресенск, МО
Контактная информация:

Сообщение Synergetik »

PacMan писал(а):спасибо за помощь.
у меня еще один вопрос. как теперь из 2 -> 10 систему перевести
Я знаю только единственный способ перевода из одной системы счисления в другую. Для 2->10 пусть имеется число b01101. Нужно подсчитать сумму 1*2^0+0*2^1+1*2^2+1*2^3+0*2^4 в десятичной системе счисления. Аналогично можно производить расчёт в обратном направлении (10->2), вот только считать в двоичной системе счисления мы пока не научились.

PacMan писал(а):я понимаю это должно быть так
mass[i][j]=n;
где n запись ( пусть 11111 ) в 10 - й форме

Что-то сомневаюсь в целесообразности этого. Огласите задачу полностью.
Аватара пользователя
__Alexander
Потрогал лапой паяльник
Сообщения: 335
Зарегистрирован: Вт сен 11, 2007 10:27:08
Откуда: Киев

Сообщение __Alexander »

Не совсем понятно что есть перевод из 2 в 10 в Си.

Вот например:

x = 0x02; // это число 2 в шестнадцатеричной системе
x = 0b00000010 ; // это число 2 в двоичной системе
x = 2; // это число 2 десятичной системе

в чем проблема то?


----------
Аватара пользователя
andrey_artemov
Встал на лапы
Сообщения: 136
Зарегистрирован: Сб авг 15, 2009 21:26:50
Откуда: Пенза
Контактная информация:

Сообщение andrey_artemov »

Я думаю автору нужно вывести результат в двоичном виде....
Иначе, просто виндовый калькулятор рулит :)
Аватара пользователя
andrey_artemov
Встал на лапы
Сообщения: 136
Зарегистрирован: Сб авг 15, 2009 21:26:50
Откуда: Пенза
Контактная информация:

Сообщение andrey_artemov »

__Alexander писал(а):Не совсем понятно что есть перевод из 2 в 10 в Си.

Вот например:

x = 0x02; // это число 2 в шестнадцатеричной системе
x = 0b00000010 ; // это число 2 в двоичной системе
x = 2; // это число 2 десятичной системе

в чем проблема то?


----------


Забыли в восмеричной
х= 02; это число 2 в восмеричной системе исчесления
kalobyte
Друг Кота
Сообщения: 13796
Зарегистрирован: Чт сен 20, 2007 14:08:00

Сообщение kalobyte »

твой 3х мерный массив занимает 250 байт в озу, а у тини всего 256 байт и компилятор тебе не даст собрать

описывай полностью задачу, а не куски вопросов
тем более в том компиляторе есть библиотека конвертации из систем
Шурики
Вымогатель припоя
Сообщения: 506
Зарегистрирован: Пн авг 31, 2009 22:10:50
Откуда: СК

Сообщение Шурики »

массив битов 5х5х5 элементов. если считать 5 битовых элементов влазят в 1 байт, получаем 5х5х1 байт. На итого 25 байт - все лезет.
Аватара пользователя
Synergetik
Встал на лапы
Сообщения: 117
Зарегистрирован: Чт фев 28, 2008 23:54:35
Откуда: Воскресенск, МО
Контактная информация:

Сообщение Synergetik »

Шурики писал(а):массив битов 5х5х5 элементов. если считать 5 битовых элементов влазят в 1 байт, получаем 5х5х1 байт. На итого 25 байт - все лезет.
Да и 125 не только в falsh, но и в ОЗУ влезет
Аватара пользователя
coder
Открыл глаза
Сообщения: 57
Зарегистрирован: Вт фев 06, 2007 14:09:10
Откуда: Россия.Пермь
Контактная информация:

Сообщение coder »

Чтобы записать 1 в x,y,z делаем
mass[x][y] = mass[x][y]|(1<<z);

А чтобы записать туда 0
mass[x][y] = mass[x][y]&!(1<<z);

p.s. Надеюсь с синтаксисом не напутал...
Закрыто

Вернуться в «Микроконтроллеры и ПЛИС»