loox » 28 янв 2017, 00:56
Korbofos
CVAvr:
Доступ в EEPROM, проиводится путем использования глобальных переменных с ключевым словом eeprom.
В Вашем случае удобнее использовать указатель, который будет храниться в SRAM
пример:
eeprom int data; // целая переменная, которая храниться в eeprom
void main(void)
{
int as; // целое , будет храниться в SRAM
int eeprom *pointToEeprom; // объявление указателя eeprom, сам указатель будет храниться в SRAM
data = 53; // пример прямой записи значения в eeprom
// пример, косвенная запись того же значения с использованием указателя
pointToEeprom =&data;
*pointToEeprom = 98;
as = data; //пример, непосредственное чтение из eeprom
as = *pointToEeprom; // пример, чтение с использованием указателя
}
За сим все. Спасибо loox
Добавлено спустя 2 часа 51 минуту 48 секунд:
Dr.Unk
коллега
При передаче данных между двумя устройствами, необходимо точно спроектировать протокол передачи данных:
<data><data1>,<data2>,......<признак окончания посылки>
data - byte 1 байт
data1 - int 2 байта
data2 - byte 1 байт
.....
/n - признак окончания строки
Варианты: длина посылки фиксированная, тогда при приеме можно не контролировать признак откончания строки, как в Вашем случае, и вообще его не передавать
длина строки переменная, тогда при ПРИЕМЕ необходимо проверять каждый принятый байт на признак окончания посылки.
ОЧЕНЬ ВАЖНО При передаче посылки между устройствами передаются байты. Прием данных возможен только в буфер byte или char. Обработка данных, в Вашем случае, должна начаться только после приема всей пачки данных.
Теперь о Вашей программе:
Вам будет удобнее использовать функцию приема SerialEvent, посмотрите примеры Communication - SerialEvent
С помощью этой функции вы легко организуете протокол приема данных, как при фиксированной длине , так и при ожидании признака окончания пачки данных.
При приеме используйте буфер byte (непонятно почему у Вас char)
int будет передан двумя байтами - сначала, по моему старший разряд первым,потом младший (извини не помню, проверь при тесте)
тогда int = BYTEn*256+BYTEn+1
Применяемая вами функция:
sscanf(buffer, "%[^','],%[^','],%s", &strX, &strY, &key);
работает с char а вы переслали int в виде 2-х byte в шеснадцатеричном виде.
Можно еще один Вариант - в передатчике вместо строки Serial.print(X) - напишите Serial.print(X,DEC) , тогда будете перtдавать char(ы)
Если, что то непонятно аписал, переспросите
Спасибо loox