doleynikov
New member
Привет. Я играюсь: пытаюсь запустить BASIC на ESP8266. Проект ESP8266BASIC меня не устраивает - я хочу сделать самодостаточную конструкцию типа ретроминикомпьютера, а его можно и к умному дому приспособить.
Успешно запускаются эмулятор C64 комодор и tiny basic (MySketchbook/ttbasic_ESP8266 at master · doleynikov/MySketchbook · GitHub). Нашел один интересный проект: GitHub - robinhedwards/ArduinoBASIC: A BASIC interpreter & environment for the Arduino . На Arduino Nano работает отлично! полноценный BASIC практически, пробую перенести на ESP8266 - облом! Я убрал вообще работу с клавиатурой и дисплеем, а также работу с PROGMEM. Валится на работе с указателями. Ексепшен вот какой: Exception 9: LoadStoreAlignmentCause: Load or store to an unaligned address
как раз, идет токенизация ввода и заполнение, например , описания переменных, или заполнение программы в виде токенов.
Я не понимаю работу с указателями, к сожалению. Ну, то есть в теории - спедставляю себе, что это, а вот когда вижу
или
, как тот слон из мультика - теряю волю.
Помогите разобраться с этим выравниванием!
Успешно запускаются эмулятор C64 комодор и tiny basic (MySketchbook/ttbasic_ESP8266 at master · doleynikov/MySketchbook · GitHub). Нашел один интересный проект: GitHub - robinhedwards/ArduinoBASIC: A BASIC interpreter & environment for the Arduino . На Arduino Nano работает отлично! полноценный BASIC практически, пробую перенести на ESP8266 - облом! Я убрал вообще работу с клавиатурой и дисплеем, а также работу с PROGMEM. Валится на работе с указателями. Ексепшен вот какой: Exception 9: LoadStoreAlignmentCause: Load or store to an unaligned address
как раз, идет токенизация ввода и заполнение, например , описания переменных, или заполнение программы в виде токенов.
Я не понимаю работу с указателями, к сожалению. Ну, то есть в теории - спедставляю себе, что это, а вот когда вижу
Код:
unsigned char *p = &mem[sysVARSTART];
*(uint16_t *)p = bytesNeeded;
p += 2;
*p++ = VAR_TYPE_NUM;
strcpy((char*)p, name);
p += nameLen + 1;
*(float *)p = val;
Код:
*tokenOut++ = TOKEN_INTEGER;
*(long*)tokenOut = (long)val;
tokenOut += sizeof(long);
Помогите разобраться с этим выравниванием!