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

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

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

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

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

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

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

 
Опции темы
Непрочитано 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.RU
 
Регистрация: 10.01.2007
Сообщений: 3,412
Сказал спасибо: 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, время: 01:11.


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