l-e-o-n-a-r-d-o Опубликовано 24 января, 2009 Поделиться Опубликовано 24 января, 2009 замысловатая ситуация у меня получилась. сложновато было даже правильно назвать тему, вобщем обьясню суть проблеммы. Поцепил я к меге 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), мы можем записать в каждую ячейку что нужно непосредственно обратившись к ней. Ну а как тогда создать массив? чтобы он имел такой вид тип ИМЯ[размер], причем желательно иметь возможность дополнять этот массив, тоесть динамически его увиличивать. Как это сделать??? тем более двух- трех мерный? как это делает компилка? тут же скорее всего так же нужно подходить.. вобщем вопрос в том, каким образом сделать общение с ней так же как это делает кодевижн или ему подобные, тоесть хочется написать нечто подобное: memory char i; memory buf[5]; и тп.. как это сделать??? 0 чем шире кругозор, тем тупее угол обозрения Ссылка на комментарий Поделиться на другие сайты Поделиться
rtfcnf Опубликовано 16 марта, 2009 Поделиться Опубликовано 16 марта, 2009 (изменено) Давайте сразу оговоримся, что я предложу компромиссное решение, написанное в лоб. К томуже не конкретную реализацию, а чисто гипотетическую вещь. Вы достаточно грамотный человек и поймете идею. И так у нас задача разместить в памяти двух мерные массивы (как вариант). Решение Разделить память на две области. Первая будет хранить описание массива вторая сами массивы. Значит, нам понадобиться следующие функции. Создание массива Запись в массив Чтение из массива Память разделим следующим образом. Таблица размещения находиться в старших адресах и растет к младшим. Структура будет следующий первые две ячейки первый адрес размещения массива третья и четвертая ячейка конечный адрес размещения массива (хотя можно хранить и длину) Сами массивы находятся в младших адресах и растут навстречу таблицы размещения. Теперь функции для работы Создание массива createAree(размер1,размер2) Перещет в физические адреса думаю для Вас не проблема. Критерий конца таблицы четыре ячейки с кодам FF. При каждом создании ищем конец и добавляем из расчета информации о предыдущем массиве. Запись в массив setData(номер массива в таблице, адрес1,адрес2,значение) Находим в таблице, где лежит массив и не сложным преобразованием получаем адрес ячейки куда писать.. Чтение из массива Значение getData(номер массива в таблице, адрес1,адрес2) Преобразование в физический адрес, как и при записи Всё. Вот самый, наверное, простой и не замысловатый вариант. На основе его можно попробовать сделать конкретную реализацию и немного даже усложнить. Или придумать что то своё. Изменено 16 марта, 2009 пользователем rtfcnf 0 Это сообщение поставляется "как есть", без каких либо гарантий. Автор сообщения не несёт какой либо ответственности за материальный, либо моральный ущерб причиненный данным сообщением напрямую или косвенно. Ссылка на комментарий Поделиться на другие сайты Поделиться
20% скидка на весь каталог электронных компонентов в ТМ Электроникс!Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!Перейти на страницу акции Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849
ikarab Опубликовано 16 марта, 2009 Поделиться Опубликовано 16 марта, 2009 Может вам посмотреть на AT45 дата флэш ? При той же цене емкость в сотни раз больше и скорость за счет буфера гораздо выше. 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Выбираем схему BMS для корректной работы литий-железофосфатных (LiFePO4) аккумуляторов Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ, также как и для других, очень важен контроль процесса заряда и разряда, а специализированных микросхем для этого вида аккумуляторов не так много. Инженеры КОМПЭЛ подготовили список имеющихся микросхем и возможных решений от разных производителей. Подробнее>> Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161
l-e-o-n-a-r-d-o Опубликовано 16 марта, 2009 Автор Поделиться Опубликовано 16 марта, 2009 rtfcnf спасибо, идею понял, так и сделаю. ikarab дело в том что плата уже изготовлена (хоть микруха и на панельке, и разводка соответственнно и все остальное) , а скорость мне тут большая и не нужна впринципе, да и емкость тоже. Ну и кроме того, микруха уже куплена и стоит на плате полёт нормальный ) 0 чем шире кругозор, тем тупее угол обозрения Ссылка на комментарий Поделиться на другие сайты Поделиться
ss85 Опубликовано 16 марта, 2009 Поделиться Опубликовано 16 марта, 2009 А как на счет преобразование массива массивов в указатель, а потом от 0 до sizeof читать и записывать в память. Так будет универсальнее, мне так кажется. 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
rtfcnf Опубликовано 17 марта, 2009 Поделиться Опубликовано 17 марта, 2009 А как на счет преобразование массива массивов в указатель, а потом от 0 до sizeof читать и записывать в память. Так будет универсальнее, мне так кажется. Указатель все равно надо как то привязывать к памяти находящийся не в ОЗУ, а на внешнем по отношению к контролеру накопителю. Поэтому пародия на FAT более приемлема 0 Это сообщение поставляется "как есть", без каких либо гарантий. Автор сообщения не несёт какой либо ответственности за материальный, либо моральный ущерб причиненный данным сообщением напрямую или косвенно. Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.