Как обнулить озу Arduino
- Войдите на сайт для отправки комментариев
Пт, 22/07/2016 - 12:22
Доброго времени суток.
Возникла пролбема
есть код
unsigned int irSignal[67]; // выделяем память под массив целых memset(irSignal, 0, sizeof(unsigned int) * 67); //обнуляем массив unsigned char index = 0; while (dataFile.available()) { // Проверяем что файл не пустой unsigned char ch = dataFile.read(); if ((ch >= '0') && (ch <= '9')) { irSignal[index] *= 10; irSignal[index] += ch - '0'; } else if (ch == ',') { index++; } if (index >= 67) break; } irsend.sendRaw(irSignal, 67, 38);
В котором происходит загрузка в буффер кода кнопки пульта после чего идет отправка.
Все срабатывает на ура но проблема в том, что буфер не очищается после отправки.
выглядит это так
freeMemory()=698 свободно паняти при загрузке программы
freeMemory()=667
freeMemory()=636
freeMemory()=605
freeMemory()=574
freeMemory()=543
freeMemory()=512
freeMemory()=481
freeMemory()=450
freeMemory()=419
freeMemory()=388
freeMemory()=357
freeMemory()=326
freeMemory()=295
freeMemory()=264 после 15 команды висяк ардуинки из за нехватки памяти.
как очистить memset без хардресета.
Как полный бред выглядит то, чем вы занимаетесь. Очистить memset ? Вообще-то это имя функции. Вы знаете, как очистить имя функции "без хардресета" ? Очистить от чего? От дурной репутации? От чего-то еще очистить имя будет проблематично.
memset, он, конечно, быстро пачкается и нуждается в периодической чистке (как и мозги тех, кто его использует), только Вам никто не поможет, пока Вы не выложите нормальный полный код который собственно и напечатал то, что Вы там привели про память. А если код секретен, то придётся Вам как-то жить с грязным memset'ом :(
От злых духов очистить!
Возможно я некорректно выразился, суть в том, что значения из файла собранные в массив нужно очистить из памяти после отправки. Так как значения накапливаються при каждой отправке пока не израсходуют память ардуино. После чего дуня бонально зависает.
Бред или не бред это судить думаю не вам!
Я не программист а вольный самоучка, знаете как делать очистку, помогите. Нет тогда нет смысла флудить.
Секрета в коде нет
пришло в терминал к примеру циферка 1
открываеться вайл 1 считывается значение в memset(irSignal)
как полностью считалось отправляеться через irsend.sendRaw
вопрос как после отправки с памяти все выкинуть лишнее
Бред или не бред это судить думаю не вам!
Родное сердце!
Ты правда думаешь, что после такого заявления тебе кто-нибудь поможет?
----------------------
Представленный код - полный бред, написанный мудаком. И судить об этом, например я, могу потому, что имею нужную квалификацию. А мудак, который код писал, такой квалификации - не имеет. Зато гонора дохера.
И советы по исправлению кода обычно получают вежливые люди. Понимающие, что их мнение и уровень знаний, а так же мысли и мечты - нихера тут никого не интересуют.
-----------------------------------------------------------------------------
Писать надо так: "Память выделять не умею, программирование на "С" не учил и в нем нихера не понимаю, очень хочу научиться, объясните почему утекает память?"
Гонора и у [5] хватает, хоть я с ним и более согласен :)
Но даже если memset и отрабатывает правильно, далее начинается и правда х**ня:
Уважаемый wdrakula.
"Бред или не бред это судить думаю не вам!" относиться исключительно к уважаемому a5021.
Не люблю когда люди с ходу обсирать начинают не разобравшись в теме вопроса.
Если вы приняли это на свой счет. Прошу прощения. Адресованно исключительно a5021.
По поводу кода неприятно, когда кто то брызжет ядом. Данный код написан не мной, как вы правильно подметили я программирование на "С" не учил и в нем нихера не понимаю, очень хочу научиться.
Не так давно озаботился написанием кода, просил помощи, результаты пичальны. К счастью на другом ресурсе откликнулся человек и написал данный код. Все заработало сразу.
На радостях устройство собрано. И в процессе тестирования выяснилось что идет переполнение памяти. с чем собственно я и пытаюсь разобраться. И по этому прошу помощи. Человек который помог с кодом в первый раз не насвязи.
Оскорбить людей на данном форуме я искренне не хотел.
Просто обидно когда труд тех, кто отозвался откровенно оскорблют.
Замечу, что отзываеться не так много людей.
Уважаемые форумчане.
Приношу свои искренние извенения если, кто то принял пост #3 за оскорбление.
Я ни вкоем случае не хотел, кого бы то нибыло оскорбить. И пост относиться исключительно к негвативно выразившемуся a5021.
Я человек культурный. По крайней мере очень на это надеюсь.
Просто обидно когда труд тех, кто отозвался откровенно оскорблют.
если результатом твоего труда является дерьмо, то кому обижаться на сей факт? - включай голову, труженник.
Ок.
Тогда, без обидок, приведи полный скетч.
Ты в цикле по 31 байт теряешь. Это близко не имеет отношения к 67 целым. Нужно видеть весь код целиком.
Труд не мой! По этому и обидно. буть это мой код я с радость принял бы критику. Отозвался 1 человек в прошлый раз он и помог. Хороший код или нет мне судить сложно. Я новичек и с си знаком исключитель в общих чертах. С буффером, массивом и памятью никогда не работал.
AngelLeo
в том коде, что приведен, утечки памяти нет
Суть всей программы, что при получении в терминале номера, открываеться документ текстовый с карты sd с этим номером, из файла считывается Raw кнопки в виде (4600,4400, 650,1600, 650,1600, 650,1600, 600,500, 650,450, 650,500, 650,450, 650,500, 600,1600, 650,1600, 650,1600, 650,450, 650,500, 650,450, 650,500, 600,500, 650,500, 600,1600, 650,500, 600,500, 650,500, 600,500, 650,450, 650,500, 600,1650, 600,500, 650,1600, 600,1650, 600,1600, 650,1600, 650,1600, 650,1600, 6504600,4400, 650,1600, 650,1600, 650,1600, 600,500, 650,450, 650,500, 650,450, 650,500, 600,1600, 650,1600, 650,1600, 650,450, 650,500, 650,450, 650,500, 600,500, 650,500, 600,1600, 650,500, 600,500, 650,500, 600,500, 650,450, 650,500, 600,1650, 600,500, 650,1600, 600,1650, 600,1600, 650,1600, 650,1600, 650,1600, 650) после чего этот Raw отправляеться через irSend.sendRaw.
Суть окровенно универсальный пульт, а не примеры как в сети на пару кнопок. Задача именно управлять десятком устройств с 1 куба в котором стоит вся начинка. сотни кнопок. Прописать все в ардуино нет возможности. Не хватает памяти.
dataFile.close() отсутствует что ли ? Не есть хорошо.
В том и беда, что я понять не могу, что происходит. При отправке каждой команды с памяти минус 31 байт после 15 команд ардуинка виснет.
Уважаемый Araris ОГРОМНОЕ СПАСИБО.
Вы правы. Проблема именно в том что файлы остаються открытыми.
Добавил dataFile.close(); после отправки и все заработало. Память освобождаеться после отправки.
ОГРОМНОЕ СПАСИБО. Что подметили мою невнимательность. Мне и в голову непришло, что из за открытых файлов утекает память.
Всем спасибо все заработало, как и задумывалось
после отправки все с памяти чистится. и память остается неизменна. Отправил все 67 команд которые уже забиты и все сработали идеально.
Бросил пульт куб под стол. И все работает. Каналы все переключает. По bluetooth тоже все идеально срабатывает разве, что с задержкой в пару секунд. от Аккумуляторов 18650 полет нормальный. Осталось приделать голосовое управление)))
Всем, кто откликнулся Огромное спасибо.
За недоразумение с оскорблением еще раз прошу прощения у всех форумчан.
По поводу плохого кода, сказать плохо не могу все работает отлично. Не судите строго.
Еще и место осталось прикрутить Wi-fi и модуль 433 мгц для управления светом, чайником и т.д.
Может кому пригодится. В связке arduino nano, SD адаптер, Bluetooth, 4 ir диода. 2 старых аккумуляторов 18650 от бука через DC преобразователь хватате на 2 суток в среднем.
Секрета в коде нет
пришло в терминал к примеру циферка 1
открываеться вайл 1 считывается значение в memset(irSignal)
как полностью считалось отправляеться через irsend.sendRaw
вопрос как после отправки с памяти все выкинуть лишнее
Вы читали, что я Вам написал? Нужен полный код, Вы понимаете смысл слова "полный"?
Дело в том, что чистить memset сам по себе бестолку - сначала нужно почистить void и digitalRead или убедиться, что с ними всё в порядке. А как это сделать, если Вы только куски кода даёте?
Ещё раз повторяю, без полного кода Вам не поможет никто.
Огромное спасибо! Уже помогли. Проблема найдена и решена. Проблема была в том, что не закрывался dataFile после чтения. В открытом состоянии они накапливались и переполняли память дуни. Проблема оказалась не в memset. К несчастью в меру с воей не опытности, до меня недоходило, что открытый файл забирает память и при открытии нового файла старый не закрывается. Весь код программы приведен в #13 посте. программа малюсенькая.
Я ни вкоем случае не хотел, кого бы то нибыло оскорбить. И пост относиться исключительно к негвативно выразившемуся a5021.
Т.е. вы будете упорствовать в том, что ваше желание "очистить memset" не является бредом, а всякие некультурные человеки пытались вам нагрубить без всякой на то причины?
Уважаемый a5021 возможно просто не стоит незнакомым людям (Учитывая возможность возростной разници в плоть до поколений), с учетом, что на форуме не все программисты (в противном случае смысл задавать вопросы, зная ответ) с ходу грубить. В плане бред и т.д.
Если вы знаете больше, чем ваш аппонент ато похвально.
Я ранее не работал с массивами, буферами и т.п. и мне это в новинку. Когда я ранее просил помощи, откликнулся один человек, и помог с кодом. (Замечу, что все работает идеально как часы. Даже несмотря на негативные отзывы.)
Не смотря на негатив окружающих, что код плохой, и вообще все фигня. Других вариантов никто не показал. А голословное оскорбление чужого труда это просто некрасиво.
По поводу memset. Согласен прошу меня извенить в связи с моей неграмотностью и некорректной формулировкой. (Хотя я считаю, что можно указать на недостатки знаний другого человека в более лояльной форме не прибегая к оскорблению.)
Я ошибочно пологал, что все считанное содержимое храниться в memset и из за ошибки освобождения памяти вызывает переполнение озу с последующим зависанием. К счастью прблема решена и оказалась бональной моей невнимательностью, и скудным знанием языка программирования. Код оказался абсолютно рабочим. (Как показала ночь эксперементов, все работает (даже лучше чем ожидалось)).
P.S. Если я правдо сильно вас оскорбил своим ответом в посте #3. Прошу меня извенить. Ответил с горяча, неподумав. Цели оскорбить вас или иных участников форума я неимел.