Форум обсуждения систем  

Вернуться   Форум обсуждения систем "Умный дом", проектов Ардуино, OpenWRT и других DIY устройств > Форум умного дома > Сделай сам

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
Старый 14.10.2014, 23:23   #131
Admin
Administrator
 
Аватар для Admin
 
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,618
Вес репутации: 9823
Admin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant future
По умолчанию Re: Ускоряем работу Arduino

Адрес 11 для Long будет занимать адреса 44,45,46,47 для значений типа byte
то есть умножайте на 4 и получите адресное поле однобайтников
У разных тапов разная адресация
Для обьединения разных типов данных в одно адресное поле используют структуры
Admin вне форума   Ответить с цитированием
Старый 14.10.2014, 23:36   #132
bwn
Junior Member
 
Регистрация: 14.10.2014
Сообщений: 7
Вес репутации: 0
bwn is an unknown quantity at this point
По умолчанию Re: Ускоряем работу Arduino

Спасибо, но вопрос почему забивает все адресное поле?
Если есть возможность, попробуйте этот скетч:

#include <CyberLib.h>

int i;


void setup()
{
Serial.begin(9600);


for (i=0; i<1024; i++)
{
WriteEEPROM_Byte(i,255);
Serial.print(i,DEC);
Serial.print(" ");
Serial.println(ReadEEPROM_Byte(i),HEX);
}

if (ReadEEPROM_Word(0)<400) {WriteEEPROM_Word(0, 510);} //Значение клавиши Set
if (ReadEEPROM_Word(2)<400) {WriteEEPROM_Word(2, 825);} //Значение клавиши UP
if (ReadEEPROM_Word(4)<400) {WriteEEPROM_Word(4, 690);} //Значение клавиши DOWN
if (ReadEEPROM_Byte(8)<1||ReadEEPROM_Byte(8 )>20) {WriteEEPROM_Byte(8, 5);} //Время освещения по умолчанию
if (ReadEEPROM_Byte(9)<8||ReadEEPROM_Byte(9 )>20) {WriteEEPROM_Byte(9, 10);} //Температура по умолчанию
if (ReadEEPROM_Byte(10)<30||ReadEEPROM_Byte (10)>80) {WriteEEPROM_Byte(10, 40);} //Влажность по умолчанию
if (ReadEEPROM_Long(11)<-29||ReadEEPROM_Long(11)>29) {WriteEEPROM_Long(11, 0);} //Корр. времени по умолчанию
if (ReadEEPROM_Long(15)<-5||ReadEEPROM_Long(15)>5) {WriteEEPROM_Long(15, 0);} //Корр. темп.помещения низ даллас
if (ReadEEPROM_Long(19)<-5||ReadEEPROM_Long(19)>5) {WriteEEPROM_Long(19, 0);} //Корр.темп.улица даллас
if (ReadEEPROM_Long(23)<-5||ReadEEPROM_Long(23)>5) {WriteEEPROM_Long(23, 0);} //Корр.темп.помещение DHT
if (ReadEEPROM_Long(27)<-15||ReadEEPROM_Long(27)>15) {WriteEEPROM_Long(27, 0);} //Корр.влажности DHT

WriteEEPROM_Byte(40, 28);
WriteEEPROM_Byte(41, 29);
WriteEEPROM_Byte(42, 30);
WriteEEPROM_Byte(43, 31);
WriteEEPROM_Byte(44, 32);
WriteEEPROM_Byte(45, 33);
WriteEEPROM_Byte(46, 34);
WriteEEPROM_Byte(47, 35);


}
void loop()

{
for (i=0; i<1024; i++)
{
if (ReadEEPROM_Byte(i)!=255)
{
Serial.print(i,DEC);
Serial.print(" ");
Serial.println(ReadEEPROM_Byte(i),DEC);
delay(200);
}

}
}
bwn вне форума   Ответить с цитированием
Старый 15.10.2014, 01:43   #133
Admin
Administrator
 
Аватар для Admin
 
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,618
Вес репутации: 9823
Admin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant future
По умолчанию Re: Ускоряем работу Arduino

Пока нет возможности проверить
Завтра проверю
А Вы знаете как должны храниться в памяти 64,32,16 битные данные?
Admin вне форума   Ответить с цитированием
Старый 15.10.2014, 09:24   #134
bwn
Junior Member
 
Регистрация: 14.10.2014
Сообщений: 7
Вес репутации: 0
bwn is an unknown quantity at this point
По умолчанию Re: Ускоряем работу Arduino

Добрый день.
Упростил скетч:

#include <CyberLib.h>

int i;


void setup()
{
Serial.begin(9600);


for (i=0; i<1024; i++)
{
WriteEEPROM_Byte(i,255);
Serial.print(i,DEC);
Serial.print(" ");
Serial.println(ReadEEPROM_Byte(i),HEX);
}

WriteEEPROM_Byte(1, 0);
//WriteEEPROM_Word(1, 0);
//WriteEEPROM_Long(2, 0);

}
void loop()

{
for (i=0; i<1024; i++)
{
if (ReadEEPROM_Byte(i)!=255)
{
Serial.print(i,DEC);
Serial.print(" ");
Serial.println(ReadEEPROM_Byte(i),DEC);
delay(500);
}

}
}

Артефакты идут в *_Byte и *_Word с интервалом адрес+FF. В данном случае получается 0 в ячейках: 1, 257, 513, 769.
А *_Long это очень большие грабли)))
адресуется как адрес*4, тенденция +FF сохраняется и нигде про такую адресацию ни слова (добавьте в описание)
А значения я так предполагаю хранятся побайтово. Либа и подкупила, что не надо заниматься байтовой расчлененкой для 2х и 4х байтовых чисел.
bwn вне форума   Ответить с цитированием
Старый 15.10.2014, 09:44   #135
bwn
Junior Member
 
Регистрация: 14.10.2014
Сообщений: 7
Вес репутации: 0
bwn is an unknown quantity at this point
По умолчанию Re: Ускоряем работу Arduino

Вдогонку, выше FF напрямую не адресуется. Где-то здесь собака порылась)))
bwn вне форума   Ответить с цитированием
Старый 15.10.2014, 10:19   #136
bwn
Junior Member
 
Регистрация: 14.10.2014
Сообщений: 7
Вес репутации: 0
bwn is an unknown quantity at this point
По умолчанию Re: Ускоряем работу Arduino

По всем симптомам, похоже имеем однобайтовую адресацию к EEPROM. В либу лезть знаний не хватает(((.
bwn вне форума   Ответить с цитированием
Старый 15.10.2014, 10:53   #137
Admin
Administrator
 
Аватар для Admin
 
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,618
Вес репутации: 9823
Admin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant future
По умолчанию Re: Ускоряем работу Arduino

Похоже что проблема в адресации. Получается что предел адресов лежит от 0 до 255
Для Long от 0 до 63

Проблема в том что AVR-ская библиотека avr/eeprom.h использует тип uint8_t для адресации, то есть макимум 256 адресов
Возможно придется править ее и переносить полностью в CyberLib, а пока добавил в описании
Цитата:
Ограничение! адресует максимум 256 адресов для типа Byte
Для Word максимум 128
Для Long максимум 64
Admin вне форума   Ответить с цитированием
Старый 15.10.2014, 12:13   #138
bwn
Junior Member
 
Регистрация: 14.10.2014
Сообщений: 7
Вес репутации: 0
bwn is an unknown quantity at this point
По умолчанию Re: Ускоряем работу Arduino

Немного еще добавлю.
*_Word - адресное поле принимает 0-1022 (физические адреса 0-1023). По два байтика на пальцах считаем. Спасибо.
bwn вне форума   Ответить с цитированием
Старый 15.10.2014, 12:41   #139
Admin
Administrator
 
Аватар для Admin
 
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,618
Вес репутации: 9823
Admin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant future
По умолчанию Re: Ускоряем работу Arduino

Это хорошо, можно будет реализовать и Long на все адресное пространство
Сегодня подправлю
Admin вне форума   Ответить с цитированием
Старый 05.11.2014, 07:03   #140
stD
Senior Member
 
Аватар для stD
 
Регистрация: 02.04.2012
Адрес: Питер
Сообщений: 1,125
Вес репутации: 1311
stD has a brilliant futurestD has a brilliant futurestD has a brilliant futurestD has a brilliant futurestD has a brilliant futurestD has a brilliant futurestD has a brilliant futurestD has a brilliant futurestD has a brilliant futurestD has a brilliant futurestD has a brilliant future
По умолчанию Re: Ускоряем работу Arduino

Эдуард, замени "keywords.txt" на тот, что в архиве.
Будет подсвечиваться вот это:
Цитата:
uint8_t KEYWORD1
uint16_t KEYWORD1
uint32_t KEYWORD1
ReadEEPROM_Long KEYWORD1
WriteEEPROM_Long KEYWORD1
ReadEEPROM_Byte KEYWORD1
WriteEEPROM_Byte KEYWORD1
ReadEEPROM_Word KEYWORD1
WriteEEPROM_Word KEYWORD1
CyberLib KEYWORD1
И пины у меги.
Вложения
Тип файла: txt keywords.txt (7.5 Кб, 201 просмотров)
stD вне форума   Ответить с цитированием
Ответ


Здесь присутствуют: 52 (пользователей: 0 , гостей: 52)
 

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

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

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


Текущее время: 02:03. Часовой пояс GMT +3.


Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Яндекс.Метрика