Страница 1 из 1
Bascom AVR непосредственное обращение к вутренней EEPROM
Добавлено: Пт дек 02, 2011 10:26:25
Reloader
Доброго времени суток, уважаемые Коты!!!
вопрос такой :
мне необходимо обращаться непосредственно к ячейке собственной EEPROM МК. для чтения и записи.
перелопатил весь хелп Баскома, но нашел только возможность обращения через переменную. сей способ не подходит так как при создании переменной (массива) резервируются ячейки и в случае заполнения 10 значений из 100 - 90% ячеек остаются зарезервированы и пусты

((
мне же нужно более оптимально работать с EEPROM.
Сильно не пинайте - на Баском недавно перешел...
Re: Bascom AVR непосредственное обращение к вутренней EEPROM
Добавлено: Пт дек 02, 2011 14:21:24
Reloader
Уважаемые Коты, Неужели никто незнает?
или может быть я как-то непонятно написал?....
Re: Bascom AVR непосредственное обращение к вутренней EEPROM
Добавлено: Пт дек 02, 2011 15:27:57
BCluster
А указателей нет в этом чуде?) Или через асм?)
Re: Bascom AVR непосредственное обращение к вутренней EEPROM
Добавлено: Пт дек 02, 2011 15:38:47
Reloader
Асмом вообще не владею, к своему стыду...
по поводу указателей...
Это для моего проекта.
Задача такова :
(примерно)
в 1-ю ячейку памяти пишем длинну массива (например 100)
Соответственно опрашиваем ячейки с 2 по 101.
дальше 2-й массив
102-я ячейка - длинна массива (например 10)
следовательно мессив должен занимать ячейки с 103 по 113
трабла в том, что размерность массивов может быть абсолютно разная.
При использовании встроенной в Баском системы хранения переменных в EEPROM происходит такая весч :
при задании массива длинной в 100 - резервируется 100 ячеек.
то есть если я создам такую переменную, и запишу туда 20 значений, то все равно будет зарезервировано 100 ячеек.
проект предполагается варганить на Меге8. При таком формировании массивов - просто расточительство памяти...
покопавшист в Гугле цельный день

все больше прихожу к выводу плюнуть на сие и прикрутить по SPI что-нить вроде AT26DF081A-SU с 1 мегабайтом памяти и иметь возможность записи колометровых массивов на все случаи жизни...
(только вот с SPI я ещё не работал пока....)
Re: Bascom AVR непосредственное обращение к вутренней EEPROM
Добавлено: Пт дек 02, 2011 15:47:14
Moto_v3x
Как вариант, если конечно они достучаться до EEPROM, то это ADR, ADR2, POKE, PEEK, INP, OUT.
Re: Bascom AVR непосредственное обращение к вутренней EEPROM
Добавлено: Пт дек 02, 2011 15:54:00
Reloader
если конечно они достучаться до EEPROM
использовать вместо внутренней EEPROM
Re: Bascom AVR непосредственное обращение к вутренней EEPROM
Добавлено: Пт дек 02, 2011 16:10:42
BCluster
Ну я немного не понимаю... Вы не знаете какой у вас будет размер массива? Максимальный размер всех переменных которые надо хранить в еепром превышает его размер?
Re: Bascom AVR непосредственное обращение к вутренней EEPROM
Добавлено: Пт дек 02, 2011 16:23:57
Reloader
Ну я немного не понимаю
именно не влезает

например мне нужно использовать 3 массива. размер каждого - разный. но максимальный размер одного (любого) массива будет равен 200
Если использовать стандартный способ хранения переменных мне нужно объявить 3 массива с максимальным количеством в 200 значений
Ну а например мне нужно
S1(100)
S2(200)
S3(50)
итого 350 байт
в следующем моменте может быть так :
S1(200)
S2(200)
S3(100)
итого 500 байт
И все прекрасно

Однако Баском попытается зарезервировать 3Х200 = 600 байт (а в меге8 только 512)
Если же была бы возможность прямого обращения к ячейкам я мог бы создать эти же самые 3 массива распределяя адреса доступа к ячейкам и формируя длины массивов таким образом, что они при любом раскладе впишутся в память.
Re: Bascom AVR непосредственное обращение к вутренней EEPROM
Добавлено: Пт дек 02, 2011 16:36:50
BCluster
Сделайте один массив на всю область памяти, сделайте переменные которые будут хранить смещения. Фактически это и будет непосредственный доступ в память. Я не знаю как там у вас в бейсике, но на си можно было бы сделать указатели которые бы указывали на свои области памяти и "при изменении размеров массивов" (ибо в реале оно не совсем так) можно было бы смещать и указатели.
Re: Bascom AVR непосредственное обращение к вутренней EEPROM
Добавлено: Пт дек 02, 2011 16:46:17
Reloader
Согласен, как вариант такое можно устроить, но я все больше склоняюсь к внешней памяти, причем к флэш...
Это развяжет руки в полной мере. Объемы могут намного превысить необходимые в среднем размеры массивов, а в особо критичном случае позволят не заморачиваться по поводу размерности какого-то одного массива....
Единственной проблемой в моем случае является организация обращения к памяти по SPI, в чем абсолютно нет опыта...
надеюсь мудрые Коты или Гугел мне что-нить толковое посоветуют...
Re: Bascom AVR непосредственное обращение к вутренней EEPROM
Добавлено: Пт дек 02, 2011 17:04:03
BCluster
Ну если есть потребность в большем объеме то конечно да. Наверняка для баскома есть либы для работы с флеш.
А ваще на си пишите )
Re: Bascom AVR непосредственное обращение к вутренней EEPROM
Добавлено: Сб дек 03, 2011 14:28:24
Мурик
Reloader писал(а):перелопатил весь хелп Баскома, но нашел только возможность обращения через переменную
Как-же вы хелп лопатили что не заметили пары операторов с явно недвусмысленным именем
READEEPROM и
WRITEEEPROM?
Re: Bascom AVR непосредственное обращение к вутренней EEPROM
Добавлено: Сб дек 03, 2011 17:31:19
Reloader
Уважаемый
Мурик, я не оставил данные операторы без внимания, но при их использовании нет прямого обращения к ячейке, а только через массив Data. я потратил несколько часов пытаясь решить проблему используя данные операторы. Использовал и встроенный отладчик и Proteus, и тесты на железе. Но, увы, грамотное заполнение EEPROM происходит только при начальном компилировании а именно :
Код: Выделить всё
$eeprom
Label1:
Data 1 , 2 , 3 , 4 , 5
Label2:
Data 10 , 20 , 30 , 40 , 50
$data
Если же в последствии происходит попытка изменить размерность массива и заполнить его в цикле - изменяется только 1-е значение массива.
И опять же :
Данные операторы не предоставляют возможности прямого обращения по адресу ячейки
Re: Bascom AVR непосредственное обращение к вутренней EEPROM
Добавлено: Сб июл 21, 2012 09:38:38
Shahabbas
Всем привет .
Приподниму старую тему - может кому пригодится .
Считывание и запись EEPROM с прямым доступам к нужным ячейкам :
Считывание памяти при запуске программы можно производить сразу после объявления переменных , например :
Код: Выделить всё
$regfile = "m32def.dat"
$crystal = 16000000
$hwstack = 64
$swstack = 16
$framesize = 64
'Объявление переменных
Dim Signal As Byte 'переменная переключения формы сигнала
Dim Freq As Long 'переменная частоты
Dim Ste_p As Long 'переменная шага изменения частоты
'Считываются данные с EEPROM
Readeeprom Signal , 0 'в переменную Signal из 0 ячейки
Readeeprom Freq , 10 'в переменную Freq из 10 ячейки
Readeeprom Ste_p , 20 'в переменную Ste_p из 20 ячейки
'---далее продолжение своей программы---
Запись в память можно производить так-же с прямым доступом к ячейкам в нужном месте программы , например :
Код: Выделить всё
'---подпрограмма записи данных в память---
Writeeeprom Signal , 0 'Запись в ячейку 0 переменной Signal
Writeeeprom Freq , 10 'Запись в ячейку 10 переменной Freq
Writeeeprom Ste_p , 20 'Запись в ячейку 20 переменной Ste_p сигнала
'---далее продолжение своей программы---
Re: Bascom AVR непосредственное обращение к вутренней EEPROM
Добавлено: Вт июл 24, 2012 21:52:37
aleksandr-zh
а чем была сложность?
всё есть в справке, куча примеров в сети...