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

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

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

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

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

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

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

 
Опции темы

Таблица адресов для внеш. памяти

Непрочитано 25.06.2013, 09:54  
asket76
Частый гость
 
Регистрация: 06.08.2009
Сообщений: 13
Сказал спасибо: 25
Сказали Спасибо 1 раз в 1 сообщении
asket76 на пути к лучшему
По умолчанию Re: Таблица адресов для внеш. памяти

Saadov, я занимался программированием системы безопасности, тоже как и Вы использовал FRAM, но для хранения информации о пользователях, их там до 500 штук. Так вот использовал структуру типа struct, размер которого вычисляется исходя из макс.кол-ва юзеров и объема FRAM/EEPROM, каждая структура имеет собственный ID, по которому можно вычислить адрес структуры в памяти. При удалении пользователя, ячейка под эту структуру освобождается, туда пишется информация о новом пользователе при его добавлении. Для ускорения доступа было бы целесообразно завести упорядоченную таблицу ID ‹-› адрес FRAM.
Реклама:
asket76 вне форума  
Сказали "Спасибо" asket76
Saadov (25.06.2013)
Непрочитано 25.06.2013, 16:03  
tempora
Почётный гражданин KAZUS.RUN
 
Регистрация: 10.01.2007
Сообщений: 3,411
Сказал спасибо: 65
Сказали Спасибо 664 раз(а) в 443 сообщении(ях)
tempora на пути к лучшему
По умолчанию Re: Таблица адресов для внеш. памяти

Сообщение от Saadov Посмотреть сообщение
N_Sensrs (15 - это кол-во байт в памяти отведенных на 1 датчик?
Нет, это количество датчиков в строке таблицы (или в одной зоне, в Ваших терминах). Если размер одного элемента данных принять за K, то в первой строке смещения пятнадцати элементов матрицы (относительно начального адреса матрицы) будут:

0*K, 1*K, 2*K, 3*K, 4*K, ... 13*K, 14*K,

смещения адресов элементов во второй строке окажутся на размер одной строки (15*K) дальше:
(15 + 0)*K, (15 + 1)*K, (15 + 2)*K, (15 + 3)*K, (15 + 4)*K, ... (15 + 13)*K, (15 + 14)*K,

в третьей:
(15*2 + 0)*K, (15*2 + 1)*K, (15*2 + 2)*K, (15*2 + 3)*K, (15*2 + 4)*K, ... (15*2 + 13)*K, (15*2 + 14)*K,

и, наконец, в последней:
(15*14 + 0)*K, (15*14 + 1)*K, (15*14 + 2)*K, (15*14 + 3)*K, (15*14 + 4)*K, ... (15*14 + 13)*K, (15*14 + 14)*K

То есть, в общем виде, формула смещения адреса для i-го элемента j-ой строки:
‹число элементов в строке›*‹номер строки - 1›*‹размер в байтах одного элемента› +
‹номер элемента в строке - 1›*‹размер в байтах одного элемента›
или, после сокращения:
(‹число элементов в строке›*‹номер строки - 1› + ‹номер элемента в строке - 1›)*‹размер в байтах одного элемента›
Если изобразить это в Си-коде, то следует помнить, что элементы массивов нумеруются уже с нуля, то есть эти "минус единицы" (‹...›-1) не нужны:
Код:
#define N_Zones      15
#define N_Sensrs     15

uint8   uiZone,     // номер зоны
        uiSens;     // номер датчика
SensorDataType      sdValue;

        for (uiZone = 0; uiZone ‹ N_Zones; ++uiZone)
            for (uiSens = 0; uiSens ‹ N_Sensrs; ++uiSens)
            {
                sdValue = ReadSensor(uiZone,uiSens);

                address = base_addr + ( (uiZone)*N_Sensrs + uiSens )*sizeof( SensorDataType );

                SpiMemWrite(sdValue, address);
            }
______________________
Сообщение от asket76 Посмотреть сообщение
завести упорядоченную таблицу ID ‹-› адрес FRAM.
Здесь другая ситуация - нет "пользователей" с меняющимися ID, есть матрица из 15 зон с 15-ю датчиками в каждой. Проще сразу вычислять адрес, чем сканировать таблицу в поисках совпадения.
__________________
There's always more than one way to skin a cat.

Последний раз редактировалось tempora; 25.06.2013 в 16:10.
tempora вне форума  
Сказали "Спасибо" tempora
Saadov (25.06.2013)
 
Опции темы

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

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

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

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Апгрейд и комплектующие для ноутбуков mikesmith Барахолка электронных компонентов 28 17.05.2023 23:25
2012г - конец или начало? ve_de Отвлекитесь, эмбеддеры! 89 31.10.2008 16:05
Краткий обзор методов помехоустойчивого программирования для Don_Ambrosio Микроконтроллеры, АЦП, память и т.д 0 09.04.2008 01:17
из DVD в DVD-player реально? Altalimir Микроконтроллеры, АЦП, память и т.д 14 17.09.2007 21:21
[Решено] Сборник перлов любителей кабельщины mikesmith Отвлекитесь, эмбеддеры! 135 14.08.2007 15:49


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


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.