Ассемблерная вставка в FLProg
- fefar51702
- Сержант
- Сообщения: 248
- Зарегистрирован: 26 июн 2022, 07:35
- Имя: Валера
- Благодарил (а): 1 раз
- Поблагодарили: 5 раз
Re: Ассемблерная вставка в FLProg
А разве ин и оут нельзя было упрятать в один блок ?
И насколько он стал скоростнее в плане количества цыклов в сек это более интересно
Конечно это совсем нечестное сравнение у Сергея блок построен на стандартных медленных функциях чтения и записи
Можно попробовать поставить переменные который будет состояние пинов и тогда луп закрутится быстрее Ну эта тема только будет работать если пины вялоизменяющиеся сигналы имеют Зато скорее всего на разных МК заработает
Ну а можно переделать всё на регистры.
Кстати вы меня натолкнули на мысль надо будет толкнуть её для всей программы
Кстати у вас оперативная память в вашем блоке стало больше чем в штатном а вся затея как раз таки идёт как снизить потребление оперативы в написании кода
И насколько он стал скоростнее в плане количества цыклов в сек это более интересно
Конечно это совсем нечестное сравнение у Сергея блок построен на стандартных медленных функциях чтения и записи
Можно попробовать поставить переменные который будет состояние пинов и тогда луп закрутится быстрее Ну эта тема только будет работать если пины вялоизменяющиеся сигналы имеют Зато скорее всего на разных МК заработает
Ну а можно переделать всё на регистры.
Кстати вы меня натолкнули на мысль надо будет толкнуть её для всей программы
Кстати у вас оперативная память в вашем блоке стало больше чем в штатном а вся затея как раз таки идёт как снизить потребление оперативы в написании кода
- dstrufanov
- Сержант
- Сообщения: 195
- Зарегистрирован: 07 янв 2024, 12:43
- Имя: Дмитрий
- Благодарил (а): 23 раза
- Поблагодарили: 35 раз
Re: Ассемблерная вставка в FLProg
Сообщение удалено
Последний раз редактировалось dstrufanov 13 июн 2025, 22:58, всего редактировалось 2 раза.
- dstrufanov
- Сержант
- Сообщения: 195
- Зарегистрирован: 07 янв 2024, 12:43
- Имя: Дмитрий
- Благодарил (а): 23 раза
- Поблагодарили: 35 раз
Re: Ассемблерная вставка в FLProg
Сообщение удалено
Последний раз редактировалось dstrufanov 13 июн 2025, 22:58, всего редактировалось 1 раз.
- fefar51702
- Сержант
- Сообщения: 248
- Зарегистрирован: 26 июн 2022, 07:35
- Имя: Валера
- Благодарил (а): 1 раз
- Поблагодарили: 5 раз
Re: Ассемблерная вставка в FLProg
Нет это ошибочное мнение много раз тоже так натыкался в своей уверенности А потом когда подключал там было совершенно другое и при том что вплоть до невозможного
Нужно взять пин поставить его в начале кода и перевести в режим регистра поставить на нём единицу и в конце кода перевести его в ноль и померить это анализатором сигнала но лучше конечно померить осциллографом например мой анализатор даст погрешность плюс-минус 42 нс по-моему а осциллограф даст У меня погрешность плюс-минус 5 наносекунд к этому импульсу и через него вычислить частоту
Но по мне это лишь замер исполнения кода что тоже неправильно если мы говорим про цикличность то мы должны увидеть от начала до начала кода как это происходит то есть в теории я предположу что нужно мерить по-другому маленько чем принято надо тригернуть в начале чтобы с него началось И на нём же закончилось то есть получить период полноценный исполнение кода
Но в таком случае да можно тогда сидеть фантазировать как вы высчитывать сколько частота процессора выдаст вам на такт по времени сколько каждая инструкция затратит на это времени тактов просуммировать и говорить всем что чисто теоретически там такая-то частота исполнения без всякого Пина
Нужно взять пин поставить его в начале кода и перевести в режим регистра поставить на нём единицу и в конце кода перевести его в ноль и померить это анализатором сигнала но лучше конечно померить осциллографом например мой анализатор даст погрешность плюс-минус 42 нс по-моему а осциллограф даст У меня погрешность плюс-минус 5 наносекунд к этому импульсу и через него вычислить частоту
Но по мне это лишь замер исполнения кода что тоже неправильно если мы говорим про цикличность то мы должны увидеть от начала до начала кода как это происходит то есть в теории я предположу что нужно мерить по-другому маленько чем принято надо тригернуть в начале чтобы с него началось И на нём же закончилось то есть получить период полноценный исполнение кода
Но в таком случае да можно тогда сидеть фантазировать как вы высчитывать сколько частота процессора выдаст вам на такт по времени сколько каждая инструкция затратит на это времени тактов просуммировать и говорить всем что чисто теоретически там такая-то частота исполнения без всякого Пина
- dstrufanov
- Сержант
- Сообщения: 195
- Зарегистрирован: 07 янв 2024, 12:43
- Имя: Дмитрий
- Благодарил (а): 23 раза
- Поблагодарили: 35 раз
Re: Ассемблерная вставка в FLProg
Сообщение удалено
Последний раз редактировалось dstrufanov 13 июн 2025, 22:59, всего редактировалось 1 раз.
- dstrufanov
- Сержант
- Сообщения: 195
- Зарегистрирован: 07 янв 2024, 12:43
- Имя: Дмитрий
- Благодарил (а): 23 раза
- Поблагодарили: 35 раз
Re: Ассемблерная вставка в FLProg
Сообщение удалено
Последний раз редактировалось dstrufanov 13 июн 2025, 22:59, всего редактировалось 1 раз.
- Phazz
- Полковник
- Сообщения: 3107
- Зарегистрирован: 17 окт 2016, 15:38
- Откуда: Сургут
- Имя: Анатолий
- Благодарил (а): 226 раз
- Поблагодарили: 106 раз
Re: Ассемблерная вставка в FLProg
В C++ оптимизацию делает компилятор. В случае асм видимо это все нужно делать руками. Но зато мы имеем скорость взамен повышенному расходу ОЗУ.dstrufanov писал(а): 22 мар 2025, 09:41Попробовал:
flp_3and.png
asm_3and.png
Относительное увеличение ассемблерного кода выше, можно предположить, что при дальнейшем увеличении объема схемы его преимущества пропадут, а возможно код даже станет больше
Думаю, что надо писать библиотеки на асме и к ним обращаться, тогда ситуация в плане расхода памяти программ улучшится. Но еще больше вырастет расход ОЗУ на переменные
ПС: Анатолий, спасибо за наводку!![]()
- fefar51702
- Сержант
- Сообщения: 248
- Зарегистрирован: 26 июн 2022, 07:35
- Имя: Валера
- Благодарил (а): 1 раз
- Поблагодарили: 5 раз
Re: Ассемблерная вставка в FLProg
Вы кстати взяли входные пины с очень полезной спецификой если мы говорим только про медленые сигналы входа что и натолкнуло меня на мысль
Вы их сейчас крутите теоретически с сотнями тысяч обращения проца к ним хотя они не меняются допустим
Хотя по моей теории если их написать через прерывание на что только они и способны то тогда проц не будет тратить такты на них а увеличит скорость обработки вашего блока и выхода 4 и будет ждать лиш когда в него вклинится момент срабатывания по прерыванию код просядет на несколько тактов но тут же продолжит вращаться на максимальной скорости
Поправьте если ошибаюсь
Вы их сейчас крутите теоретически с сотнями тысяч обращения проца к ним хотя они не меняются допустим
Хотя по моей теории если их написать через прерывание на что только они и способны то тогда проц не будет тратить такты на них а увеличит скорость обработки вашего блока и выхода 4 и будет ждать лиш когда в него вклинится момент срабатывания по прерыванию код просядет на несколько тактов но тут же продолжит вращаться на максимальной скорости
Поправьте если ошибаюсь
- fefar51702
- Сержант
- Сообщения: 248
- Зарегистрирован: 26 июн 2022, 07:35
- Имя: Валера
- Благодарил (а): 1 раз
- Поблагодарили: 5 раз
Re: Ассемблерная вставка в FLProg
И к стати я все-таки придумал как померить чистый цыкл кода вашего и узнать его скорость
В теории нужно поставить в начеле пин и в конце пин а между ними код и померить время между пинами этими лучше осцылографом с двумя щюпами либо анализатором но с большеватой погрешностью
В теории нужно поставить в начеле пин и в конце пин а между ними код и померить время между пинами этими лучше осцылографом с двумя щюпами либо анализатором но с большеватой погрешностью
- dstrufanov
- Сержант
- Сообщения: 195
- Зарегистрирован: 07 янв 2024, 12:43
- Имя: Дмитрий
- Благодарил (а): 23 раза
- Поблагодарили: 35 раз
Re: Ассемблерная вставка в FLProg
Сообщение удалено
Последний раз редактировалось dstrufanov 13 июн 2025, 22:59, всего редактировалось 1 раз.
- fefar51702
- Сержант
- Сообщения: 248
- Зарегистрирован: 26 июн 2022, 07:35
- Имя: Валера
- Благодарил (а): 1 раз
- Поблагодарили: 5 раз
Re: Ассемблерная вставка в FLProg
С поисками - это в принципе Понятно Надо думать Ну есть же решение мы можем же сами пробовать очищать память и всякие метки Чтобы избежать дефрагментации и утечек в поиске натыкался на несколько функций да надо использовать осторожно и в нужное местах и в нужный момент но в теории если расположить их в конце цикла и обращаться к ним раз в полсекунды для профилактики возможно ничего страшного не будет кроме полезного но надо побольше почитать непонятно почему тогда Сергей этот метод не используетPhazz писал(а): 20 мар 2025, 15:58Сделать такой блок не сложно совсем. А вот найти почему утекает, это задача посложнееfefar51702 писал(а): 20 мар 2025, 15:41 да и вообще подумываю создать блок который бы следил за утечкой оперативной памяти из за дырявого кода а там уже решать обход что вызвало её
- Phazz
- Полковник
- Сообщения: 3107
- Зарегистрирован: 17 окт 2016, 15:38
- Откуда: Сургут
- Имя: Анатолий
- Благодарил (а): 226 раз
- Поблагодарили: 106 раз
Re: Ассемблерная вставка в FLProg
Это все теория. Вы покажите рабочее решение. Тем более что в стандартных блоках ничего не утекает.
Re: Ассемблерная вставка в FLProg
Единственный смысл пытаться писать на ассемблере - сделать программу меньше по объему. Но для этого нужно от и до знать систему команд конкретного микроконтроллера и уметь ей пользоваться. А иначе получится трудоемко, но без выигрыша в объеме кода (проигрыш будет, проверено). Это потому что компиляторы Си тоже не дураки пишут и они тоже хотели сделать итоговый код небольшим. И при написании компилятора использовали максимальное количество команд из ассемблерных команд контроллера. В то время как среднестатистический программист использует их штук 10-20 (это я ориентируюсь на систему команд 51-го семейства, с которым работал, когда последний раз на ассемблере пытался писать). Для интереса можно вывести ассемблерный листинг и посмотреть как компилятор преобразует операнды Си в ассемблерный код - очень интересно, зачастую не все способы очевидны. Когда-то давно (уж не менее четверти века назад) я на это посмотрел и с тех пор не пытаюсь писать на ассемблере и никому не советую. Зачем "велосипед" изобретать?
Кстати, "на заре" проводились соревнования программистов на написание самого компактного кода - единицы байт выигрывались. Для компьютеров чья память была размером в 640кБ, это имело смысл. А сейчас проще взять контроллер с нужным объемом памяти, а не тратить жизнь непонятно на что. Конечно мы стали глупее по сравнению с теми временами, уже никто сегодня не напишет изящный код, все сплошь мегабайты. Но даже если и вдруг, то кто это оценит? Главное ведь результат. А Си дает быстрый результат, при достаточно скромном объеме кода. А что нужно еще?
Кстати, "на заре" проводились соревнования программистов на написание самого компактного кода - единицы байт выигрывались. Для компьютеров чья память была размером в 640кБ, это имело смысл. А сейчас проще взять контроллер с нужным объемом памяти, а не тратить жизнь непонятно на что. Конечно мы стали глупее по сравнению с теми временами, уже никто сегодня не напишет изящный код, все сплошь мегабайты. Но даже если и вдруг, то кто это оценит? Главное ведь результат. А Си дает быстрый результат, при достаточно скромном объеме кода. А что нужно еще?
- dstrufanov
- Сержант
- Сообщения: 195
- Зарегистрирован: 07 янв 2024, 12:43
- Имя: Дмитрий
- Благодарил (а): 23 раза
- Поблагодарили: 35 раз
Re: Ассемблерная вставка в FLProg
Сообщение удалено
Последний раз редактировалось dstrufanov 13 июн 2025, 22:59, всего редактировалось 1 раз.
- kulibinsvv
- Лейтенант
- Сообщения: 486
- Зарегистрирован: 18 сен 2015, 10:04
- Откуда: Омск
- Благодарил (а): 3 раза
- Поблагодарили: 5 раз
Re: Ассемблерная вставка в FLProg
Writing a Library for Arduino
На русском, ничего внятного, с требованиями к написанию библиотек не находил.
Лучшее на русском
На русском, ничего внятного, с требованиями к написанию библиотек не находил.
Лучшее на русском
Мой змей, этот ползучий соблазн сомнения,всё шевелится, побуждая «искать концы»... (Станислав Ермаков)
- dstrufanov
- Сержант
- Сообщения: 195
- Зарегистрирован: 07 янв 2024, 12:43
- Имя: Дмитрий
- Благодарил (а): 23 раза
- Поблагодарили: 35 раз
Re: Ассемблерная вставка в FLProg
Сообщение удалено
Последний раз редактировалось dstrufanov 13 июн 2025, 22:59, всего редактировалось 1 раз.
-
- Сержант
- Сообщения: 100
- Зарегистрирован: 27 мар 2025, 12:13
- Имя: Коля
- Поблагодарили: 6 раз
Re: Ассемблерная вставка в FLProg
По вашей задумке уже есть вариант только с библиотекой готовой ArduinoShrink
Которая предлагает частичные замены на асеблер судя по описанию
Думаю на простейших кодах это идеальный вариант
Если в коде будет что-то специфическое то возможно возникнут конфликты
Которая предлагает частичные замены на асеблер судя по описанию
При компиляции она делает подмену пинов милис микрос и прочего на ассемблер вставкуЭта библиотека заменяет функции Arduino AVR Core на более мелкие и быстрые версии с той же или лучшей функциональностью. Она разработана для микроконтроллеров ATmega168 и 328 на частотах от 4 до 16 МГц, хотя регулярно тестируются только 8 МГц и 16 МГц. Пример скетча Arduino Blink, созданный для Uno, занимает 924 байта флэш-памяти, но с ArduinoShrink требуется всего 196 байт.
Думаю на простейших кодах это идеальный вариант
Если в коде будет что-то специфическое то возможно возникнут конфликты
- dstrufanov
- Сержант
- Сообщения: 195
- Зарегистрирован: 07 янв 2024, 12:43
- Имя: Дмитрий
- Благодарил (а): 23 раза
- Поблагодарили: 35 раз
Re: Ассемблерная вставка в FLProg
Сообщение удалено
Последний раз редактировалось dstrufanov 13 июн 2025, 23:00, всего редактировалось 1 раз.
- dstrufanov
- Сержант
- Сообщения: 195
- Зарегистрирован: 07 янв 2024, 12:43
- Имя: Дмитрий
- Благодарил (а): 23 раза
- Поблагодарили: 35 раз
Re: Ассемблерная вставка в FLProg
Сообщение удалено
Последний раз редактировалось dstrufanov 13 июн 2025, 23:00, всего редактировалось 2 раза.
- dstrufanov
- Сержант
- Сообщения: 195
- Зарегистрирован: 07 янв 2024, 12:43
- Имя: Дмитрий
- Благодарил (а): 23 раза
- Поблагодарили: 35 раз
Re: Ассемблерная вставка в FLProg
Сообщение удалено
Последний раз редактировалось dstrufanov 13 июн 2025, 23:20, всего редактировалось 1 раз.
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 3 гостя