Опять PROGMEM
- Войдите на сайт для отправки комментариев
Ср, 26/06/2019 - 10:51
Не работает(вместо таблицы обрабатывает мусор) скетч при попытке использовать PROGMEM для хранения массива 1800 байт(а хотелось 25 КБ).
const PROGMEM uint8_t ddd[1800] = {60, 160, 13, 57, 21, 95, 60, 66,...
uint32_t time_2 = 200;
uint32_t mks = 0;
uint8_t shag = 0;
uint32_t vrem = 0;
void setup() {
....
}
void loop() {
....
vrem = long(ddd[shag]);
mks = micros() + (time_2 * vrem);
....
}
БЕЗ PROGMEM работает и в уппрощенном варианте без переменной vrem и явного преобразования типа.
const uint8_t ddd[] = {60, 160, 13, 57, 21, 95, 60, 66,...
...
mks = micros() + (time_2 * ddd[shag]);
Подскажите пожалуйста что я делаю не так и как сделать правильно
https://www.arduino.cc/reference/en/language/variables/utilities/progmem/
Ищем:
// read back a 2-byte int
Смотрим на код ниже ремарки, сравниваем со своим.
Не работает(вместо таблицы обрабатывает мусор)
Наоборот, работает, вместо таблицы обрабатывает мусор. Как и просили
почему, кста, в массиве нельзя сразу long хранить? Почему надо массив именно uint8_t?
Спасибо, помогло, работает
Лонги память сожрут.
В 1 посте ошибка, должно быть
Спасибо, помогло, работает
если мой хрустальный шар не врет - следующей после вычисления mks должна быть строчка что-то типа
так?
Хуже
while (mks > micros()) { }Хуже
while (mks > micros()) { }это то же самое :)
Почитайте в Песочнице тему про переполнение millis() - вы неправильно работаете с временными интервалами. К micros() это относится даже в большей мере
Это трещалка и при переполнении просто очередной такт станет короче.
Это трещалка и при переполнении просто очередной такт станет короче.
не оправдывайтесь.
Привыкните всегда работать со счетчиками правильно - и в нужный момент не ошибетесь. Изменить код, чтобы он не сбивался при переполнении - дело пары секунд.