Перейти к содержанию

Организовать Разметку Памяти 24сххх На Си Для Avr


l-e-o-n-a-r-d-o

Рекомендуемые сообщения

замысловатая ситуация у меня получилась.

сложновато было даже правильно назвать тему, вобщем обьясню суть проблеммы.

Поцепил я к меге 128 память 24С512, и научился ею управлять вот такими функциями:

void at24c512_write(unsigned char chip,unsigned int address, unsigned char count, unsigned char *buffer)

{

unsigned char a,b;

a=(chip<<1)|0b10100000;

i2c_start();

i2c_write(a);

i2c_write(address >> 8);

i2c_write(address);

for (b=0;b<count;b++){ i2c_write(*buffer); buffer++;}

i2c_stop();

delay_ms(10);

}

void at24c512_read(unsigned char chip,unsigned int address, unsigned char count, unsigned char *buffer)

{

unsigned char a,b;

a=(chip<<1)|0b10100000;

i2c_start();

i2c_write(a);

i2c_write(address >> 8);

i2c_write(address);

i2c_start();

i2c_write((chip<<1)|0b10100001);

for (b=0;b<count;b++) { *buffer=i2c_read(1); buffer++;}

i2c_stop();

}

ну да.. записывает, читает норм.

Только вот теперь озадачился я вот таким вопросом: допустим необходимо создать двух, трех или более -мерный массив данных в этой памяти. Была бы это внутренняя память контроллера, выглядело бы это например так eeprom unsigned char buffer[8]; (кодевижн) получили одномерный массив из 8 элементов. ну а тут как это сделать то? что имеем: имеем 65536 адресов, в каждом из которых содержится по 8 ячеек памяти по одному байту. (24С512), мы можем записать в каждую ячейку что нужно непосредственно обратившись к ней. Ну а как тогда создать массив? чтобы он имел такой вид тип ИМЯ[размер], причем желательно иметь возможность дополнять этот массив, тоесть динамически его увиличивать. Как это сделать??? тем более двух- трех мерный? как это делает компилка? тут же скорее всего так же нужно подходить.. :unsure: вобщем вопрос в том, каким образом сделать общение с ней так же как это делает кодевижн или ему подобные, тоесть хочется

написать нечто подобное:

memory char i;

memory buf[5];

и тп..

как это сделать??? :blink:

чем шире кругозор, тем тупее угол обозрения

Ссылка на комментарий
Поделиться на другие сайты

  • 1 месяц спустя...

Реклама: ООО ТД Промэлектроника, ИНН: 6659197470, Тел: 8 (800) 1000-321

Давайте сразу оговоримся, что я предложу компромиссное решение, написанное в лоб. К томуже не конкретную реализацию, а чисто гипотетическую вещь. Вы достаточно грамотный человек и поймете идею.

И так у нас задача разместить в памяти двух мерные массивы (как вариант).

Решение

Разделить память на две области. Первая будет хранить описание массива вторая сами массивы.

Значит, нам понадобиться следующие функции.

Создание массива

Запись в массив

Чтение из массива

Память разделим следующим образом. Таблица размещения находиться в старших адресах и растет к младшим.

Структура будет следующий первые две ячейки первый адрес размещения массива третья и четвертая ячейка конечный адрес размещения массива (хотя можно хранить и длину) Сами массивы находятся в младших адресах и растут навстречу таблицы размещения.

Теперь функции для работы

Создание массива

createAree(размер1,размер2)

Перещет в физические адреса думаю для Вас не проблема. Критерий конца таблицы четыре ячейки с кодам FF. При каждом создании ищем конец и добавляем из расчета информации о предыдущем массиве.

Запись в массив

setData(номер массива в таблице,

адрес1,адрес2,значение)

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

Чтение из массива

Значение getData(номер массива в таблице,

адрес1,адрес2)

Преобразование в физический адрес, как и при записи

Всё.

Вот самый, наверное, простой и не замысловатый вариант.

На основе его можно попробовать сделать конкретную реализацию и немного даже усложнить.

Или придумать что то своё.

Изменено пользователем rtfcnf

Это сообщение поставляется "как есть", без каких либо гарантий. Автор сообщения не несёт какой либо ответственности

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

Ссылка на комментарий
Поделиться на другие сайты

20% скидка на весь каталог электронных компонентов в ТМ Электроникс!

Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!

Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!

Перейти на страницу акции

Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849

Выбираем схему BMS для корректной работы литий-железофосфатных (LiFePO4) аккумуляторов

 Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ, также как и для других, очень важен контроль процесса заряда и разряда, а специализированных микросхем для этого вида аккумуляторов не так много. Инженеры КОМПЭЛ подготовили список имеющихся микросхем и возможных решений от разных производителей. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

rtfcnf

спасибо, идею понял, так и сделаю. :rolleyes:

ikarab

дело в том что плата уже изготовлена (хоть микруха и на панельке, и разводка соответственнно и все остальное) , а скорость мне тут большая и не нужна впринципе, да и емкость тоже. Ну и кроме того, микруха уже куплена и стоит на плате :) полёт нормальный )

чем шире кругозор, тем тупее угол обозрения

Ссылка на комментарий
Поделиться на другие сайты

А как на счет преобразование массива массивов в указатель, а потом от 0 до sizeof читать и записывать в память. Так будет универсальнее, мне так кажется.

Ссылка на комментарий
Поделиться на другие сайты

А как на счет преобразование массива массивов в указатель, а потом от 0 до sizeof читать и записывать в память. Так будет универсальнее, мне так кажется.

Указатель все равно надо как то привязывать к памяти находящийся не в ОЗУ, а на внешнем по отношению к контролеру накопителю. Поэтому пародия на FAT более приемлема

Это сообщение поставляется "как есть", без каких либо гарантий. Автор сообщения не несёт какой либо ответственности

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

Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...