не работает чтение епрома в цикле
- Войдите на сайт для отправки комментариев
Ср, 10/02/2021 - 14:53
странности происходят какие то. вот код -
etemp[9] = eeprom_read_byte((uint8_t*)17); etemp[10] = eeprom_read_byte((uint8_t*)18); etemp[11] = eeprom_read_byte((uint8_t*)19); etemp[12] = eeprom_read_byte((uint8_t*)20); etemp[13] = eeprom_read_byte((uint8_t*)21); etemp[14] = eeprom_read_byte((uint8_t*)22); etemp[15] = eeprom_read_byte((uint8_t*)23); etemp[16] = eeprom_read_byte((uint8_t*)24);
он работает. но выглядит не красиво. сделал через цикл -
for( uint16_t i = 17; i < 24; i++){ etemp[i-8] = eeprom_read_byte((uint8_t*)i); }
и не работает. я совершенно не понимаю в чем дело
Как не работает? Что не так?
для начала расшифруйте/покажите код
eeprom_read_byte
или я б так попробовал
etemp[i-8] = eeprom_read_byte((uint8_t*)[i]);
странности происходят какие то. вот код -
и не работает. я совершенно не понимаю в чем дело
что-то мне подсказывает, что запись (uint8_t*)17 - это что-то с чем-то...
А почему нельзя просто etemp[i] = EEPROM.read(i+8);?
можно , но зачем тогда указатель на байт (uint8_t*) ?
можно , но зачем тогда указатель на байт (uint8_t*) ?
Если это мне вопрос, то я вообще не понимаю, что эта функция пытается творить и нафига ей такой сподвывертный аргумент
eeprom_read_byte это функция из #include <avr/eeprom.h>
надо у ТС для начала спросить что он хочет вообще сделать
надо у ТС для начала спросить что он хочет вообще сделать
Это да. Потренирую телепатические навывыки
Может так, и всего делов?
странности происходят какие то. вот код -
он работает. но выглядит не красиво. сделал через цикл -
и не работает. я совершенно не понимаю в чем дело
В чём выражается, что "не работает"? Вывешивает плакаты о забастовке или что? Может, не заполняет последний элемент etemp[16]? Так, и не должна - напишите цикл правильно.
Если что-то не то, то выкладывайте полный (но короткий!!!!) скетч с первым вариантом и со вторым и чтобы видно было что именно не работает.
надо у ТС для начала спросить что он хочет вообще сделать
Да, какая разница. Человек привёл развёрнутый код и, как ему кажется, тоже самое, но в цикле и спрашивает. Может он просто циклы изучает.
Цикл написан неправильно, верхняя граница сдвинута. Надеюсь, это то. Он же не написал что именно не работает.
Так-то ему вообще можно посоветовать писать EEPROM[i] и не выпендриваться, но он же не об этом спрашивает.
просто это на attiny13. я не думаю что полный код что-то изменит
Ну, тогда я не думаю, что Вам действительно нужна помощь.
Повторяю, Вы забыли сказать, что именно не работает и как Вы про это узнали. Я вот погадал на гуще и подумал, что у Вас последний элемент не заполняется (эта-то ошибка у Вас в любом случае есть), не угадал?
Еще погадать?
Или Вам всё-таки приподнять задницу и сделать демонстрационный код? Сразу говорю - демонстрационный - только для демонстрации проблемы! Т.е. те строки, что мы видели + печать, которая показывает в чём беда и не более. Если Вы планируете выкладывать 100500 строк, разбирайтесь в них сами.
ну вот кратчайшее для полного представления происходящего
мусором заполняется.
А что вы ожидаете найти в (uint8_t*)0 вместо мусора - номер оффшорного счёта Трампа?
вот так работает
eeprom_read_byte(i) точно не работает? Или стоит задача осуществить максимальное количество взятий адреса и разименовывания?
ну вот кратчайшее для полного представления происходящего
Простите, Вы не могли бы выдать короткий скетч, но такой. чтобы я сам мог запустить и увидеть проблему? Чего Вы мне всё огрызки суёте?
Проблема не в этих строках, что Вы мне показываете. Здесь всё нормально. давайте полный скетч.
так все заработало же.
eeprom_read_byte(i) точно не работает?
Мужики, ну с чего ей так работать? Вы посмотрите как она описана
Всё нормально у ТС, но он упорно не хочет показать нормальный скетч, всё какие-то огрызки суёт. Показал бы, давно бы всё разрулили.
так все заработало же.
То, что здесь написано - бред.
И заработать оно может лишь в одном случае - если при записи в еепром, допущен такой же бред. Тогда, да, заработает.
Если Вас устраивает бред в программе - Бог в помощь. Но с такими заморочками, вы рискуете получить охренительные и необъяснимые глюки!
Попробуйте напечатать величину &i и посмотреть из каких именно адресов Вы читаете - премного удивитесь.
Очень Вам советую таки разобраться.
так уже интересно
полный код для воспроизведения прикладывать смысла нет - вы его не воспроизведете. он под тини13
запись произвожу вот так -
полный код для воспроизведения прикладывать смысла нет
Ну, тогда мне терять на Вас время смысла нет. Извините.
Само собой. Нафика i 16-битным объявлять
Да я уже понял, залез в источник. Больше нет идей, сдаюсь.
as an example
полный бред. как это у меня работает на тини13 я не понимаю
Неужто тяжело CTRL+T нажать?
И нафига жестко к адресам еепром привязываться?
полный бред. как это у меня работает на тини13 я не понимаю
да уберите же вы апостроф в строке 29, я же Вам сказал, что это бред
Я убрал и больше не менял ничего. Всё заработало
А что у Вас там на тиньке - это э секрет большой :-(
да спасибо. я вчера провел исследования и оказалось что я ошибочно принимал что все работает. на деле оказывается что добавление моего цикла приводит к неадекватному поведению всей программы. (даже предположить не могу почему). хотя при этом программа занимает меньший объем. вообщем удалив наименее необходимую функцию (проверки crc) все заработало.
еще интересует должен ли мк корректно работать при заполнении флеш памяти на 100% или же нужно оставлять? по идее должен работать
То, что с & будет глючить, я Вам вчера писал.
Цикл у Вас написан правильно и на Уно, как видите, всё работает нормально. Ошибка где-то в другом месте. Но, коль скоро скетч у Вас секретный, разбирайтесь с ним сами.
Епром можете заполнять полностью, зачем что-то оставлять?
не епром а память программы. там где .hex хранится
вчера подразобрался с указателями и ссылками
И память программы можете заполнять до последнего байта. Зачем там что-то оставлять?
И память программы можете заполнять до последнего байта. Зачем там что-то оставлять?
а внуки куда функции будут дописывать? )))