|
1 / 1 / 1
Регистрация: 21.01.2015
Сообщений: 39
|
||||||
Утечка памяти Arduino Due26.06.2024, 18:11. Показов 1026. Ответов 7
Всем привет. Решил попросить помощи, ибо один уже не справляюсь.
Предыстория. Был написан скетч для Arduino Due, собственно, файловый менеджер (ILI9486, KBD 4x5, SD Card, FatFS), визуально похожий на FAR Manager. Реализован не весь менеджер, а только визуал, возможность ходить по директориям и просмотр текстовых файлов. В качестве файлового хранилища используется SD карта. Всё бы ничего, отрисовать всё вполне получилось, список файлов есть, всё работает так, как задумано, НО. После выхода из функции память до конца не очищается, происходит утечка. Никак не могу её отловить. С чего я взял, что это именно утечка памяти. Как о ней узнал - всё просто, берется массив 65к, в него записываются данные АЦП и эти данные пишутся на SD карту, если произвести запись сразу после включения контроллера - всё хорошо, если же сначала прочитать какой-нибудь файл из файлового менеджера, то после выхода с менеджера запись уже не происходит, контроллер виснет, отладчик говорит о входе в HardFaultHandler. Там на самом деле исходная программа чуть сложнее, я могу показать только ту часть, которую делал я, отсюда говорю только о ней, но если пройтись по исходной программе, то контроллер после выхода из читалки может зависнуть в случайном месте при условии, что массив заполнен. Так была определена утечка памяти. Суть вопроса. Не могу понять, что делать дальше, размер массива, к сожалению, уменьшить нельзя, не хватает именно ОЗУ и внешнюю не поставить, нужно переразводить плату для этого. Что тут можно придумать? Исходно задача была рабочей, но на неё подзабили ввиду таких вот сложностей, а мне стало интересно, вот и взялся за неё, однако один я не справляюсь. Если убрать массив, то всё работает, но без него это просто не нужно... Да, сменить плату - крайний вариант, поскольку MB разведена именно под Arduino Due. Ядро Arduino так же убирать нельзя, тут кроме меня никто не работал с at91 без ядра Arduino, по сути своей, выпиливать можно только в читалке. Думал, я дурак и делаю что-то не так, посмотрел, у остальных, с похожими задачами, реализация алгоритмически ровно такая же, разница именно в том, что в интернетах у людей ОЗУ свободна, а у меня - забита на 80-90% (массив + алгоритм, к которому массив применяется + дисплей + клавиатура + FatFS).
Вход осуществляется из функции recurse(), она вызывается однократно из любого места программы. Далее происходит заполнение массивов файлов и папок и их последующее объединение в один отсортированный массив. Далее, экран подготавливается (очистка, задание цветов, отрисовка базового интерфейса) и на него выводится список файлов и папок при помощи функции printPage(page). Сначала идут папки, затем файлы. Перемещение по ним осуществляется с клавиатуры, код её реализации не представлен, но там всё стандартно, прерывание и вперёд. Если список файлов и папок больше, чем помещается на одном экране, создается вторая страница, где находится продолжение списка. Если пользователь нажал ввод, осуществляется проверка - папка это или файл. Если файл, проверяется его размер (функция printFile), если он меньше 840 байт (один экран, постраничную отрисовку пока вырезал), то файл выводится, если больше - происходит выход из функции и повторная отрисовка меню. String director - это строка, в которой хранится путь к директории, путь к файлу не сохраняется нигде, кроме первоначально заполненного массива, отсюда достаточно выйти из главной функции отрисовки (printDirectory()) и зайти в неё снова. Некоторые комментарии и почему всё так плохо. Код, который приведён выше, является сугубо отладочным, все безусловные переходы и странные, неиспользуемые функции служат исключительно отладчику (vMicro + J-Link) и впоследствии, если это всё же заработает, код будет серьёзно переписан но, т.к. на данный момент непонятно, что происходит, код в таком виде. Сам по себе код абсолютно рабочий, но, как я уже писал выше, при выходе из recurse() память не очищается полностью (исключая глобальные переменные, опять же, отладка, они раньше были локальными, глюк не в них). Заранее благодарю за помощь! ![]()
0
|
||||||
| 26.06.2024, 18:11 | |
|
Ответы с готовыми решениями:
7
Ищу библиотеки под ATMel Studio 6.2 (Arduino Due) Добавить немного RAM в AVR SAM3X 32-bit (Arduino Due) Arduino Due и PCA9685 |
|
754 / 351 / 90
Регистрация: 07.01.2023
Сообщений: 1,451
|
|
| 30.06.2024, 21:09 | |
|
0
|
|
|
1 / 1 / 1
Регистрация: 21.01.2015
Сообщений: 39
|
|
| 01.07.2024, 16:13 [ТС] | |
|
Хм, думал, само должно очищаться, но и не в этом дело - раньше очистка стояла (видно по закомментированному куску), толку 0 без палочки.
0
|
|
|
16 / 18 / 2
Регистрация: 02.03.2024
Сообщений: 510
|
|||||||
| 05.07.2024, 16:29 | |||||||
|
это какой-то программно аппаратный комплекс для отлладки ардуино существует? у течки можно сэмулировать так
если ошибка другая, значит не утечка, или обработчик ошибок такой
0
|
|||||||
|
1 / 1 / 1
Регистрация: 21.01.2015
Сообщений: 39
|
||
| 12.07.2024, 10:44 [ТС] | ||
|
pup_kin,
0
|
||
|
754 / 351 / 90
Регистрация: 07.01.2023
Сообщений: 1,451
|
||
| 13.07.2024, 13:48 | ||
|
0
|
||
|
1 / 1 / 1
Регистрация: 21.01.2015
Сообщений: 39
|
|
| 14.07.2024, 18:11 [ТС] | |
|
Тема акрыта.
0
|
|
|
Модератор
8978 / 6744 / 921
Регистрация: 14.02.2011
Сообщений: 23,852
|
|||
| 14.07.2024, 19:21 | |||
|
Открыта? или Закрыта? Напоминаю Вам правила, в частности п 2.3
0
|
|||
| 14.07.2024, 19:21 | |
|
Помогаю со студенческими работами здесь
8
Atmel Studio и arduino due Arduino due+modbus+rs485 Прошить мк SAM3X8E от Arduino DUE Чем прошить Arduino DUE ? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
||||
|
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта
Симптом:
После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
|
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
|
Новый ноутбук
volvo 07.12.2025
Всем привет.
По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне:
Ryzen 5 7533HS
64 Gb DDR5
1Tb NVMe
16" Full HD Display
Win11 Pro
|
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
|
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
|
|
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов
На странице:
https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/
нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
|
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов.
. . .
|
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
|
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
|
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут.
В век Веб все очень привыкли к дизайну Single-Page-Application .
Быстренько разберем подход "на фреймах".
Мы делаем одну. . .
|