Опять 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 должна быть строчка что-то типа
так?
Хуже
Хуже
это то же самое :)
Почитайте в Песочнице тему про переполнение millis() - вы неправильно работаете с временными интервалами. К micros() это относится даже в большей мере
Это трещалка и при переполнении просто очередной такт станет короче.
Это трещалка и при переполнении просто очередной такт станет короче.
не оправдывайтесь.
Привыкните всегда работать со счетчиками правильно - и в нужный момент не ошибетесь. Изменить код, чтобы он не сбивался при переполнении - дело пары секунд.