#1 2026-03-19 10:49:12

Z1M
Учасник
Зареєстрований: 2024-03-20
Повідомлень: 14

глюк пам'яті

добрий день

стикнувся з такою проблемою. в процесі відладки перевіряв роботу розрахунків, задаючі вручну різні значення змінним. в тих формулах що я перевіряв було ділення, і звичайно інколи відбувалося ділення на нуль, виводились великі значення. я для цього і експерементував щоб виключити такі моменти.

і в якийсь час помітив що деякі показники почали відображати якісь рандомні значення. я спробував відкатати на стару прошивку але глюк не зникав. методом тика я перепробував видаляти частину коду але проблема тільки з одного місця переміщалась в інше.

склалося таке враження що частина коду (чи якісь данні) записались в память і не стираються при прошивкі коду поновому і після сапису загрузчика. і при зміні коду (видаленні чи при добавлянні строк) здається відбувається зміщення. глюк проявляється поіншому і в інших місцях.
проблема зникла тільки після заміни чіпа. хоча код той самий. старий чіп теж вроді робочий.

чи можна якось стерти все як це було з заводу? бо боюсь що при подібних тестах ситуація може повторитися. і взагалі що це може бути, щоб не наступати на тіж граблі? чи я просто якось пошкодив чіп?

Остання редакція Z1M (2026-03-19 10:51:39)

Неактивний

#2 2026-03-19 12:13:06

dimich
Учасник
Зареєстрований: 2023-12-01
Повідомлень: 791

Re: глюк пам'яті

Про яке залізо йде мова? Який мікроконтролер, плата?

Z1M пише:

в тих формулах що я перевіряв було ділення, і звичайно інколи відбувалося ділення на нуль, виводились великі значення.

Якою мовою написана програма де відбувалось ділення на нуль? В C та C++ ділення на нуль - undefined behavior, може відбутись що завгодно. Щоб "пошкодити чіп" - дуже малоймовірно, але теоретично можливо.

Z1M пише:

деякі показники почали відображати якісь рандомні значення.

Відображати на чому?

Z1M пише:

і при зміні коду (видаленні чи при добавлянні строк) здається відбувається зміщення.

Що саме і в чому "зміщується"? Ви зчитували вміст флеш-памʼяті, порівнювали його з тим що записували?

Z1M пише:

чи можна якось стерти все як це було з заводу?

На більшості платформ - можна, якщо тільки флеш-памʼять не деградувала незворотньо.

Z1M пише:

і взагалі що це може бути, щоб не наступати на тіж граблі?

Ну, для відповіді на це питання потрібно знати, що саме і на чому ви робили.

Неактивний

#3 2026-03-19 12:38:10

Z1M
Учасник
Зареєстрований: 2024-03-20
Повідомлень: 14

Re: глюк пам'яті

атмега8. пишу в ардуино ІДЄ. своя плата. заміряє температуру, струм, напругу. данні записуются в масив. відправка по блютуз на телефон. захотів добавити розрахук опору підключеного нвантаження. прості математичні операції, серед яких є ділення. вручну присвоював перемінним вольтаж і ампераж і дивився чи правильно рахує. звісно інколи вискакували числа по 4 мільярди скоріш за все із за ділення на нуль і я все це виправляв, встановлюючі обмеження щоб розрахунок відбувався тільки якщо змінні більше нуля. і в якийсь момент помітив що значення температури стало від'ємним. став виправляти формули, показники взагалі стали рандомними, потім проявились інші глюки, кожна зміна коду і новий глюк. наприклад вмикався вентилятор чи зумер, відправка в серіал порт становилась не кожну секунду, а 10 раз в секунду, інколи відправка взагалі припинялась. схоже на запис данних за межами масиву. але повторна перепрошивка не допомагала. довго шукав причину и вирішив замінити чіп. і проблема зникла. але єксперементів з розрахунками я на ньому не робив. може із цікавості спробую повторити все те саме щоб зрозуміти, чи це якісь данні записались десь в памяті і не стираються і впливають на код, чи просто співпало і вийшов зладу чип. таке тарпилось вперше

Остання редакція Z1M (2026-03-19 12:40:29)

Неактивний

#4 2026-03-19 12:46:20

Z1M
Учасник
Зареєстрований: 2024-03-20
Повідомлень: 14

Re: глюк пам'яті

під зміщенням я маю на увазі що коли добавляю чи видаляю частину кода, змінюється глюк. таке враження що після прошивки залишилися якісь данні які не стерлися і так як код змінив розмір то ті данні впливають на іншу частину коду, що проявляється іншими глюками

Остання редакція Z1M (2026-03-19 12:48:20)

Неактивний

#5 2026-03-19 13:26:57

dimich
Учасник
Зареєстрований: 2023-12-01
Повідомлень: 791

Re: глюк пам'яті

Z1M пише:

вручну присвоював перемінним вольтаж і ампераж і дивився чи правильно рахує.

Присвоювали прямо в тексті програми? Ви ж розумієте, що при діленні на відому під час компіляції константу і при діленні на отримане під час виконання значення результуючий код і поведінка можуть бути зовсім різними? Практичного сенсу в такому тестуванні немає.

Z1M пише:

схоже на запис данних за межами масиву.

Так може у вас і відбувається запис за межі масиву? Це також undefined behavior.
Показуйте код.

Увімкніть в IDE відображення попереджень при компіляції та аплоаді: "Show verbose output during: ✓ compile ✓ upload"
Також увімкніть "Compiler warnings: All".

Z1M пише:

але повторна перепрошивка не допомагала.

Якщо в самій програмі баг, то повторна перепрошивка нічим не допоможе.

Z1M пише:

чи це якісь данні записались десь в памяті і не стираються і впливають на код, чи просто співпало і вийшов зладу чип.

В IDE увімкнено " ✓ Verify code after upload"? Якщо ні, то теж увімкніть.

При появі незрозумілих глюків корисно підключитись програматором, зчитати флешку та фʼюзи, і проаналізувати їх вміст.

Іноді при залипанні бітів у non-volatile памʼяті допомагає повний chip erase з наступним перезаписом бутлоадера і фʼюзів. Але якщо біти вже почали залипати, то з великою ймовірністю це буде продовжуватись і надалі.

Остання редакція dimich (2026-03-19 13:36:18)

Неактивний

#6 2026-03-19 13:49:54

Z1M
Учасник
Зареєстрований: 2024-03-20
Повідомлень: 14

Re: глюк пам'яті

якщо це баг програми, то і на новому чіпі мало повторитись.
а враження що щось відбулося і не виправляється. бо на новому чіпі де цього не відбувалося, глюків немає, а код той самий

Неактивний

#7 2026-03-19 13:55:36

Z1M
Учасник
Зареєстрований: 2024-03-20
Повідомлень: 14

Re: глюк пам'яті

вручну я вказував не всі змінні, що присутні в розрахунках. інші були реальними. сенс в цьому думаю є. так як на практиці всі варіанти тієї чи іншої змінної не так легко отримати

Остання редакція Z1M (2026-03-19 13:57:32)

Неактивний

#8 2026-03-19 14:09:06

Kino
Учасник
Зареєстрований: 2019-02-28
Повідомлень: 113

Re: глюк пам'яті

Сам по себе чип avr довольно таки тугой, ни разу не слышал чтобы была битая флеш или озу (если конечно не питали завышенным напряжением). Где-то вы у себя перемудрили.
Или не проходит стирание чипа, т.к. на новом вся память забита 0xFF  и любая прошивка заливается без проблем.

Неактивний

#9 2026-03-19 14:12:56

Z1M
Учасник
Зареєстрований: 2024-03-20
Повідомлень: 14

Re: глюк пам'яті

за підсказки в налаштуваннях  дякую, перепровірю

Неактивний

#10 2026-03-19 15:15:20

dimich
Учасник
Зареєстрований: 2023-12-01
Повідомлень: 791

Re: глюк пам'яті

Z1M пише:

вручну я вказував не всі змінні, що присутні в розрахунках. інші були реальними.

Якщо у вас, наприклад, було щось типу

float v = readVoltage();
float i = readCurrent();
float r = v / i;

і ви замінили на

float v = readVoltage();
float i = 0.0001;
float r = v / i;

то це може бути зовсім різний код із різною поведінкою при одних і тих же значеннях v та i.

Щоб реалізувати ділення без потенційного UB потрібно знати, які там типи операндів, граничні значення, в яких одиницях величини і т.д.

Взагалі, логіку та обчислення, якщо вони не зовсім елементарні, потрібно відлагоджувати окремо, а не прямо в програмі на залізі.

Kino пише:

Сам по себе чип avr довольно таки тугой, ни разу не слышал чтобы была битая флеш или озу

Буває, особливо якщо чіп з аліекспреса smile

Спостерігав дещо схожі симптоми (з флешки читається не те що записане) на якомусь із attiny після спроби покрокового виконання в avr-gdb через debugWire. Там gdb перезаписує флеш для кожного брекпоінта, так що не дивно. Вилікувалось за допомогою chip erase. Але це не схоже на випадок у автора.

Остання редакція dimich (2026-03-19 15:18:24)

Неактивний

#11 2026-03-19 15:26:09

Kino
Учасник
Зареєстрований: 2019-02-28
Повідомлень: 113

Re: глюк пам'яті

dimich пише:

Буває, особливо якщо чіп з аліекспреса smile

А, ну это да. Можно и в подвалах подола чипы изготавливать.

dimich пише:

Спостерігав дещо схожі симптоми (з флешки читається не те що записане) на якомусь із attiny після спроби покрокового виконання в avr-gdb через debugWire. Там gdb перезаписує флеш для кожного брекпоінта, так що не дивно. Вилікувалось за допомогою chip erase. Але це не схоже на випадок у автора.

Ну такого не делал, учитывая что стирание идет страницами, то хрен знает как этот брейкпоинт расчитывается.
А вот оставить в цикле запись в эпром на пару минут, тем самым превысив кол-во записей (~100000) это запросто.

Остання редакція Kino (2026-03-19 15:26:29)

Неактивний

#12 2026-03-19 17:16:37

Z1M
Учасник
Зареєстрований: 2024-03-20
Повідомлень: 14

Re: глюк пам'яті

чіп не з аліка. беру на космодромі або вороні. в эпром пишеться все нормально. а от з флеш щось не зрозуміле

Неактивний

#13 2026-03-19 17:38:10

dimich
Учасник
Зареєстрований: 2023-12-01
Повідомлень: 791

Re: глюк пам'яті

Z1M пише:

а от з флеш щось не зрозуміле

Зітріть флешку, зчитайте її. Якщо там не 8 кілобайт FF'ок, то хана флешці. Якщо після стирання все ок, запишіть 8 кілобайт нулів, зчитайте знову. Якщо зчитуються не всі нулі, то теж хана.
Хоча якщо комірки "розхитані", то буває зразу читається нормально, а через тиждень чи місяць уже сиплеться.

Неактивний

#14 2026-03-19 22:46:07

Z1M
Учасник
Зареєстрований: 2024-03-20
Повідомлень: 14

Re: глюк пам'яті

Поставив всі галочки і ось така помилка. Без цих галочок просто прошивало. На новому чіпі такого немає

Warning: flash verification mismatch
  device 0x09 != input 0x01 at addr 0x0513 (error)
  device 0xe8 != input 0xe0 at addr 0x0e93 (error)
  device 0xc8 != input 0xc0 at addr 0x1693 (error)
  device 0xf8 != input 0xf0 at addr 0x1753 (error)
  device 0x9d != input 0x95 at addr 0x1ad3 (error)
Error: flash verification mismatch

Avrdude done.  Thank you.
Не удалось программирование: ошибка при загрузке: exit status 1

Остання редакція Z1M (Вчора 10:02:35)

Неактивний

#15 2026-03-19 23:53:12

dimich
Учасник
Зареєстрований: 2023-12-01
Повідомлень: 791

Re: глюк пам'яті

Флеш посипалась, усьо.
Воно-то може полежати і після стирання ще почати програмуватись, але я б на це не розраховував і цьому чіпу не довіряв.

Неактивний

#16 Вчора 00:15:33

Kino
Учасник
Зареєстрований: 2019-02-28
Повідомлень: 113

Re: глюк пам'яті

причем младший нибл, интересненько.

Неактивний

#17 Вчора 00:52:17

dimich
Учасник
Зареєстрований: 2023-12-01
Повідомлень: 791

Re: глюк пам'яті

Kino пише:

причем младший нибл, интересненько.

А саме 3-й біт, 0x08.

Неактивний

#18 Вчора 01:25:03

Kino
Учасник
Зареєстрований: 2019-02-28
Повідомлень: 113

Re: глюк пам'яті

dimich пише:
Kino пише:

причем младший нибл, интересненько.

А саме 3-й біт, 0x08.

Именно.

Неактивний

Швидке повідомлення

Введіть повідомлення і натисніть Надіслати

Підвал форуму