Проблема не пойму в чем, при записывании в ЕЕМЕМ 32-ух битных данных, они косячатся и при выгрузке уже дичь какаято.
И вот какой лог получается:
r_D1 = 4294903760 //должен быть 2000
r_D2 = 131072100 // 100
rD1_per = 10
curr_pos _get= 7936 //8000
workMode = 0
cnt1 = 1677721605 //5
cnt2 = 4278190087 //7
stepZero = 0
stepLuft = 0
stepLuft_Down = 1
stepLuft_Up = 1
В какую сторону искать решение ?
типы данных проверил чтоб совпадали в ЕЕМЕМ и в функциях.Даже дело и не в этом, простое число записывается косо.
---------------------------------------
Плата Arduino Nano китайская. Прошивается только процессор: Atmega328P( OldBootloader )
Еще опыт провёл - оставил только большие цифры писать в память , и вот :
r_D1 = 167774160
r_D2 = 131072100
curr_pos _get= 1677729600
cnt1 = 4278190085
cnt2 = 7
Ай ниид хэлп
C++:
#include <EEPROM.h>
#include <Arduino.h>
//******* EEPROM******
uint16_t EEMEM r_D1;
uint16_t EEMEM r_D2;
uint16_t EEMEM p_Set;
byte EEMEM w_Mode;
boolean EEMEM stepZero_eemem;
uint8_t EEMEM stepLuft_eemem;
boolean EEMEM stepLuft_Down_eemem;
boolean EEMEM stepLuft_Up_eemem;
uint32_t EEMEM vol_D1;//счетчики
uint32_t EEMEM vol_D2;
long EEMEM step_M; // позиция шаговика, AccelStepper.h , для функции *.setCurrenpPosition(long position)
//int32_t EEMEM step_M; // шаг мотора. текущая позиция
#define INIT_ADDR 1023 // номер резервной ячейки
#define INIT_KEY 50 // ключ первого запуска. 0-254, на выбор
byte workMode=0;
uint8_t stepLuft =0;
boolean stepLuft_Up=true;
boolean stepLuft_Down=true;
//------------------------------------------
void setup() {
Serial.begin(9600);
if (EEPROM.read(INIT_ADDR) != INIT_KEY) { // первый запуск
EEPROM.write(INIT_ADDR, INIT_KEY); // записали ключ
WriteNewBackup(); //пишем "нулевые" настройки
BackupRead(); //читаем их куда надо
}else{
BackupRead();
}
}
//----------------------------------------
void WriteNewBackup(){
EEPROM.put((int)&r_D1, 2000);
EEPROM.put((int)&r_D2, 100);
EEPROM.put((int)&p_Set, 10);
EEPROM.put((int)&step_M, 8000);
EEPROM.put((int)&w_Mode, 0);
EEPROM.put((int)&vol_D1, 5);
EEPROM.put((int)&vol_D2, 7);
EEPROM.put((int)&stepZero_eemem,false);
EEPROM.put((int)&stepLuft_eemem,0);
EEPROM.put((int)&stepLuft_Down_eemem,true);
EEPROM.put((int)&stepLuft_Up_eemem,true);
}
//-----------------------------------------------------------
void BackupRead(){
uint32_t tmp;
EEPROM.get((int)&r_D1, tmp);
Serial.print(F("r_D1 = ")); Serial.println(tmp);
EEPROM.get((int)&r_D2, tmp);
Serial.print(F("r_D2 = ")); Serial.println(tmp);
uint16_t pSet_tmp=0;
EEPROM.get((int)&p_Set, pSet_tmp);
Serial.print(F("rD1_per = ")); Serial.println(pSet_tmp);
long step_tmp=0;
EEPROM.get((int)&step_M, step_tmp);
Serial.print(F("curr_pos _get= ")); Serial.println(step_tmp);
//stepper2.setCurrentPosition(step_tmp);
// Serial.print(F("curr_pos_stepper = ")); Serial.println(stepper2.currentPosition());
EEPROM.get((int)&w_Mode, workMode);
Serial.print(F("workMode = ")); Serial.println(workMode);
EEPROM.get((int)&vol_D1, tmp);
Serial.print(F("cnt1 = ")); Serial.println(tmp);
EEPROM.get((int)&vol_D2, tmp);
Serial.print(F("cnt2 = ")); Serial.println(tmp);
boolean tmp_b;
EEPROM.get((int)&stepZero_eemem, tmp_b);
Serial.print(F("stepZero = ")); Serial.println(tmp_b);
EEPROM.get((int)&stepLuft_eemem, stepLuft);
Serial.print(F("stepLuft = ")); Serial.println(stepLuft);
EEPROM.get((int)&stepLuft_Down_eemem, stepLuft_Down);
Serial.print(F("stepLuft_Down = ")); Serial.println(stepLuft_Down);
EEPROM.get((int)&stepLuft_Up_eemem, stepLuft_Up);
Serial.print(F("stepLuft_Up = ")); Serial.println(stepLuft_Up);
}
//-------------------------------------------------------------
void loop(){
delay(2000);
WriteNewBackup();
BackupRead();
}
r_D1 = 4294903760 //должен быть 2000
r_D2 = 131072100 // 100
rD1_per = 10
curr_pos _get= 7936 //8000
workMode = 0
cnt1 = 1677721605 //5
cnt2 = 4278190087 //7
stepZero = 0
stepLuft = 0
stepLuft_Down = 1
stepLuft_Up = 1
В какую сторону искать решение ?
типы данных проверил чтоб совпадали в ЕЕМЕМ и в функциях.Даже дело и не в этом, простое число записывается косо.
---------------------------------------
Плата Arduino Nano китайская. Прошивается только процессор: Atmega328P( OldBootloader )
Еще опыт провёл - оставил только большие цифры писать в память , и вот :
r_D1 = 167774160
r_D2 = 131072100
curr_pos _get= 1677729600
cnt1 = 4278190085
cnt2 = 7
Ай ниид хэлп