-
- Потому что нехрен лезть в ассемблер разуму, не подготовленному Паскалем :) - Cкpипaч(08.12.2022 13:39)
- вот только щас узнал что эта веселая компания "va_arg, va_copy, va_start" по разному работает если подключать stdarg.h или varargs.h - Nikolay801_(05.12.2022 12:42)
- Как вариант - много ымбеддед алгоритмов можно просимулять в софтине на ПэКэ (на си) что само по себе нормальное тоже такое упражнение. Ну и "песочницы" для отработки и тестирования. - RED_DRAGON(04.12.2022 01:36)
- Насчёт malloc() было дело. Камень PIC16F, памяти под массивы данных
и переменные не хватало для моей задумки. Одномоментно было нужно
немного памяти, но каждой функции выделить свой массив временных
данных - не хватало. Nikolay_Po(353 знак., 03.12.2022 02:17)
- проблемы с маллоками начинаются при достаточно интеснивном
использовании, при выделении памяти для структур (зачастую) разного
объема. тогда реально может возникнуть проблема (де) фрагментации и
реаллокирования памяти. что само по себе нетривиальная задача и это
обычно возникает при достаточно больших объемах памяти (пик16ф тут
не показатель совсем). нужно смотреть кто и когда использует
сколько памяти. как так "плюнул и все заработало"? значит так
свезло или нет RED_DRAGON(105 знак., 04.12.2022 01:26)
- В свое время благодаря Игорю Школе с Украины был реализован(портирован) менеджер динамической памяти на связных списках степени 2-ки. Использовал его с успехом на PIC18 с 4кРАМ. Фрагментации быть не может, но памяти может не хватить. Но нехватка решалось количеством подключаемых устройств(разные устройства требовали разного количества выделяемой памяти). Устройств одного типа можно было подключить 32 другого 28(например) и тд. Не нужно заботиться об освобождении перед abivan(169 знак., 07.12.2022 16:51)
- Я прекрасно понимал возможность проблемы с фрагментацией. И, сначала, обеспечил гарантию, что предыдущее выделение памяти будет отменено раньше, чем потребуется следующее. Так, что у меня, по сути, выделение происходило всегда при уже пустой памяти. - Nikolay_Po(07.12.2022 11:01)
- Делал объединение структур данных, которые одновременно не
использовались, даже не понимаю, в чем проблема. Все наглядно, и в
отладке удобно. - VLLV(03.12.2022 19:53)
- Я сначала детально прорабатывал сами функции "бизнес-логики", безотносительно оптимизации использования памяти. И менять доступ к данным со структуры на структуру в союзе было просто долго и с риском возникновения ошибок. Использовались и указатели, и битовые маски... Поэтому, когда выяснилось, что нескольким разным функциям не хватает памяти, решил вопрос быстро при помощи malloc()/free(). Повезло, что не требовалось хранить большие объёмы данных между вызовами. - Nikolay_Po(07.12.2022 11:04)
- Бывают случаи, когда динамическая память используется в режиме
стека: last-in first-out. Практически ещё один стек. В таком режиме
нет никакой фрагментации, и реализацию malloc/free можно сделать
очень просто. Кроме того, расход памяти легко предсказуем, то есть
нет никакой головной боли, которую обычно связывают с динамическим
выделением памяти. - SciFi(03.12.2022 11:29)
- Мой случай, практически. Взял, попользовал, удалил. Следующий! - Nikolay_Po(07.12.2022 11:05)
- так для этого и существует стек aka локальные переменные, его можно использовать. Местами встречаются реализации malloc/free через стек Nikolay801_(1 знак., 08.12.2022 10:20, ссылка)
- Это прекрасно! Дарю оптимальную реализацию менеджера памяти: SciFi(109 знак., 07.12.2022 11:09)
- Прелестно! :-)) - =AlexD=(07.12.2022 17:00)
- Что-то я про выравнивание не вспомнил... Ладно, идею вы поняли :-) - SciFi(07.12.2022 17:03)
- Я смотрел ассемблер посла malloc() и free(). Не сказать, чтобы много инструкций. Использовал готовое. - Nikolay_Po(07.12.2022 11:21)
- Прелестно! :-)) - =AlexD=(07.12.2022 17:00)
- Бывают случаи, когда динамически выделенная память никогда не
освобождается. У FREERTOS есть такой аллокатор. Помнится автор в
мейллисте писал, что сам охренел от того, насколько часто в
эмбеддинге достаточно иметь malloc без free. Типо паршивка
стартует, определяет конфигурацию, создаёт нужные структуры,
запускает нужные задачи - и все работает в таком виде до выключения
питания. - LightElf(04.12.2022 13:49)
- Ну, это частный случай стека, когда много раз сделали push, но до pop дело так и не дошло :-) - SciFi(04.12.2022 13:55)
- Мой случай, практически. Взял, попользовал, удалил. Следующий! - Nikolay_Po(07.12.2022 11:05)
- проблемы с маллоками начинаются при достаточно интеснивном
использовании, при выделении памяти для структур (зачастую) разного
объема. тогда реально может возникнуть проблема (де) фрагментации и
реаллокирования памяти. что само по себе нетривиальная задача и это
обычно возникает при достаточно больших объемах памяти (пик16ф тут
не показатель совсем). нужно смотреть кто и когда использует
сколько памяти. как так "плюнул и все заработало"? значит так
свезло или нет RED_DRAGON(105 знак., 04.12.2022 01:26)
- Поднимите руки, те кто хоть раз писал функцию с переменным
количеством аргументов. Я думаю что такие функции пишутся чиста
поржать. - IBAH(02.12.2022 16:57)
- Применял не много, но значимо, по нужде/потребности. Ключевой момент - это макросы. После понимания этого ржака должна отпасть. - RED_DRAGON(04.12.2022 01:03)
- Писал шаблонную лямбду с переменным количеством аргументов. Это считается? - VladislavS.(03.12.2022 18:53)
- Ну я писАл... и да - для "своего" printf.... - Zoro(03.12.2022 01:40)
- за несколько десятилетий я так и не придумал куда можно приспособить эту фичу, переменное число аргументов, кроме вариаций на тему свой принтф. Даже в этом случае что у ТС было бы полезней сделать не так как иранец сделал, а использовать переменное число аргументов для формирования AT запроса в стиле принтф, а строки возможных заголовков ответов передавать указателем на массив. Правда тогда придется аргументы в функции сделать в обратном порядке, сначала ответ, потом Nikolay801_(685 знак., 08.12.2022 10:00)
- +1 - 2dimka(03.12.2022 08:08)
- на поржи. abivan(6911 знак., 02.12.2022 17:13)
- Спасибо. А то все - жадины-говядины код публиковать :) - bnb62(02.12.2022 17:23)
- К посту от Zoro... ETM(194 знак., 06.12.2022 12:27)
- Спасибо. А то все - жадины-говядины код публиковать :) - bnb62(02.12.2022 17:23)
- Это была личинка Си++ внутри Сей. К счастью, сильно загадить этим сишечку не получилось :-) - SciFi(02.12.2022 17:00)
- я писал макрос статической инициализации вектора из 16 элементов... рекурсивный... - lloyd(02.12.2022 16:59)
- ссылка на гитхаб была бы интереснее: SciFi(1 знак., 02.12.2022 16:52, ссылка)
- точнее: bnb62(1 знак., 02.12.2022 17:01, ссылка)
- Я так и не нашёл где вызывается atc_command - =AlexD=(02.12.2022 17:04)
- Это либа. Причем вполне рабочая. Я неделю побаловался, уперся в непонятки, и решил писать свою... - bnb62(02.12.2022 17:09)
- Этот иранец научит вас вредным привычкам. Учитесь у более авторитетных товарищей. - SciFi(02.12.2022 17:12)
- #define gsm_command(...) atc_command(&gsm.atc, __VA_ARGS__) - SciFi(02.12.2022 17:06)
- бля... спасибо, проблевался. - =AlexD=(02.12.2022 17:11)
- Это либа. Причем вполне рабочая. Я неделю побаловался, уперся в непонятки, и решил писать свою... - bnb62(02.12.2022 17:09)
- Я так и не нашёл где вызывается atc_command - =AlexD=(02.12.2022 17:04)
- что это, зачем и как пользоваться - яснее не стало. - =AlexD=(02.12.2022 16:57)
- разработчик явно из жабаскрипта пришел, ТАК писать на Си надо уметь - lloyd(02.12.2022 16:56)
- точнее: bnb62(1 знак., 02.12.2022 17:01, ссылка)
- Совершенно не могу понять, почему atc->searchCmd[] не
заполняется в вызывающей функции? Зачем такой изврат с переменным
количеством аргументов? - =AlexD=(02.12.2022 16:48)
- Рациональных объяснений этому нет. Nikolay801_(2266 знак., 05.12.2022 12:15)
- Да, блин, тупо заранее создаются статические массивы и передаются
уже готовые списки. - =AlexD=(05.12.2022 12:35)
- еще переменное количество параметров осложняет компиллеру задачу контроля типа параметров при вызове. Я когда переписывал сделал ошибку, вместо Nikolay801_(266 знак., 05.12.2022 12:54, ссылка)
- Да, блин, тупо заранее создаются статические массивы и передаются
уже готовые списки. - =AlexD=(05.12.2022 12:35)
- Так автор изобрел универсальный метод для всего спектра команд с
разным набором параметров. "Макросы va_arg(), va_start() и va_end() используются совместно
для того, чтобы осуществить передачу функции переменного числа
параметров." - bnb62(02.12.2022 16:58)
- в с это можно изобразить через составные литералы, в плюсах такое
не сработает Nikolay801_(1 знак., 05.12.2022 12:37, ссылка)
- Ух ты, не знал. Спасибо - symbions(05.12.2022 14:50)
- кстати это фокус работает со структурами Nikolay801_(766 знак., 06.12.2022 11:57)
- Эм... почему? В С++ нельзя объявить структуру с инициализацией? - Dingo(06.12.2022 13:11)
- резко понадобится конструктор - Nikolay801_(06.12.2022 13:30)
- Эм... почему? В С++ нельзя объявить структуру с инициализацией? - Dingo(06.12.2022 13:11)
- кстати это фокус работает со структурами Nikolay801_(766 знак., 06.12.2022 11:57)
- Ух ты, не знал. Спасибо - symbions(05.12.2022 14:50)
- Команда - это просто строка. Её парсят и выполняют команды. Для разбивки на лексемы есть множество других методов, чем вот это. - =AlexD=(02.12.2022 17:02)
- Так себе метод. Ну его нафиг. - SciFi(02.12.2022 17:01)
- Для универсального метода просто делают колбек - lloyd(02.12.2022 16:59)
- в с это можно изобразить через составные литералы, в плюсах такое
не сработает Nikolay801_(1 знак., 05.12.2022 12:37, ссылка)
- Выпендрёж. Подозреваю, что ТС нужен printf и scanf. Парсить команды ATC не рокет саенс, надо думать. - SciFi(02.12.2022 16:57)
- Рациональных объяснений этому нет. Nikolay801_(2266 знак., 05.12.2022 12:15)
- Господа, это победа, копировать строки в блокирующем коде (Всмысле
зачем это вообще делать?) - lloyd(02.12.2022 16:39)
- Автор иранец. Летает же ) - bnb62(02.12.2022 16:42)
- у камней на которых это исполняется полно мегагерц и килобайт, оно это сожрет без последствий. - Nikolay801_(05.12.2022 12:18)
- MISRA-C вертится в гробу со скоростью центрифуги - lloyd(02.12.2022 16:43)
- Автор иранец. Летает же ) - bnb62(02.12.2022 16:42)