Inline это принудительный модификатор или необязательная рекомендация компилятору?
- Войдите на сайт для отправки комментариев
Сб, 20/05/2017 - 10:29
Хочу для экономии времени заменить вызовы коротких функций на их встраивание и в связи с этим вопрос: модификатор inline принудительный по аналогии с forcedinline или всего-лишь необязательная рекомендация компилятору ардуино ?
Зависит это от номера версии IDE Arduino или для всех единообразно?
рекомендация. Не зависит от версии gcc.
По 5 тактов.
Если у вас длиная функция (получаемый код а не запись на Си ) к примеру 100-200 тактов, то 5 тактов не помогут "отцу росийской демократии". Так что inline лучше применять для функций записаных в ассемблере, потому что команды на Си длиные в получаемом коде.
Еще вариант ускорить ход программы, то использовать указатель на функции . Это "программые стрелки" по ходу движения программы.
1 такт при частоте 16Мгц =0,0625 мкс , тогда 5+5=10 тактов займут 0,625 мкс ?
А как это записать на Си goto по адресу стрелки (функции), можете показать на примере? И что делать с адресом возврата из функции - записать его в стек и потом возвращаться по нему. Это будет короче 105+5 тактов, о которых написал Arhat109-2 ?
Скорее экономия не там. В любой программе есть переключающие переменные (флаги, семафоры и др хрень). И как правило они стоят в цикле и тратится время не только на их анализ , но и переключение. Ладно если это один раз. Но переключения идут постоянно в цикле, даже если анализ идет вдругом месте.
А теперь альтернатива
В аду есть отдельный котел для тех, кто говорит загадками ;)
"Разоблачайтесь перед партией" - что кипит в вашем мозгу, какую задачу решаете?
Или Вы из той секты, в которой считают, что "незашоренный" дилетант может лучше решить задачу?
Поверьте, если Вы обдумываете что-то интересное, то профессионал всегда подскажет правильное направление и убережет от глупостей.
Сначала оцифровка примерно с частотой 30 кГЦ, буферизация в FIFO, и передача данных. Обработка и анализ собранных данных будут на втором этапе наверное на PC преобразованиями Фурье (методика анализа определится позже). Сейчас озабочен первым этапом.
Оцифровку уже написал по прерыванию таймера. Для увеличения скорости, чтобы не ждать внутри прерывания окончания цикла работы ADC, сделал "наоборот" - при входе в прерывание считываю показания предыдущего цикла ADC, а перед окончанием прерывания запускаю новый цикл. Частоту подобрал так, чтобы к следующему прерыванию ADC гарантированно завершил предыдущий цикл преобразования.
Для анализа частот вибраций и биений очень важна точная дискретизация по времени, а на точность преобразования пока решено не обращать внимания и будем довольствоваться 8 бит.
Шикарно и все првильно.
Набирайте буфер, 1024-2048 байта - нормально. Потом останавливайте сбор и отправляйте на комп.
делайте сбор с разными частотами, вот почему:
30 КГц 1000 семплов - даст спектр от 30 Гц до 30 КГц. Реально от 300, Для более низких частот - соберите 1000 семплов на 3КГц, на 300Гц. Получите и низкочастотные составляющие тоже.
-----------------------
Но работая на АЦП АтМеги, Вы не выйдете за пределы звуковых частот, а чем тогда звуковая карта не устраивает? ;) там даже до 40 КГц.
Если хотите частоту выборки выше - придется брать другой камень, не хочу произносить запрещенные слова, но придется брать СТМ32 ;).
Семпл= измерение ? 1000 измерений для анализа длинного переходного процесса маловато будет :-)
использовать указатель на функции .
И эти люди что-то имеют против безобидного goto? Куда катится этот мир? :(
а если с ним (STM) случится какой затык - у кого проконсультироваться ?
Как???? Вы не знаете у кого???? Охххх ..... есть тут у нас специалист :)
1. сопряжение со звуковой картой??? амплитуда 1-2В и отсеечь постоянную составляющую конденсатором? Сложно, не спорю. Программировать Ардуино на пределе ее возможностей конечно проще.
Скажиту уж честно, никто ведь не осуждает - Вам просто интересно освоить новый предмет.
Это и есть, для большинства из нас - главная и определяющая цель. Нечего этого стесняться.
2. СТМ32 это и есть АРМ - просто самый доступный из них. АЦП у него на 1 МГц. Доступных библиотек - не меньше чем для Ардуино. Немного сложнее "вникнуть". ну... если ардуино - велосипед, то СТМ32 даже не скутер, а так... велик-с-моторчиком, аналогия понятна?
НО!!! Это предмет вечного и непрекращающегося холивара на этом форуме. Поэтому дальше не стану.
Большинство тут (завсегдатаи форума) программирует на обоих контроллерах, под задачу, но есть уникумы на обоих концах. Вот когда они сходятся - начинают сверкать молнии! Очень забавно бывает. ;) Вы - новенький, еще увидите....
а если с ним (STM) случится какой затык - у кого проконсультироваться ?
Как???? Вы не знаете у кого???? Охххх ..... есть тут у нас специалист :)
Женя!!!!! Не будите лихо!!!!!!!!
а если с ним случится какой затык - у кого проконсультироваться ?
На радиокоте и изиэлектрониксе есть разделы по ARM и STM32:
http://radiokot.ru/forum/viewforum.php?f=59&sid=306ba8d5152712a6c9f686f4272d5c41
http://forum.easyelectronics.ru/viewforum.php?f=35
Правда большинство программирует их не в Arduino IDE, а в более серьёзных IAR, KEIL.
Как???? Вы не знаете у кого????
У а5021 или у Архата... они всем про всё расскажут... ))))))))
И сколько их вам нужно, для полного счастья?
а если с ним (STM) случится какой затык - у кого проконсультироваться ?
Как???? Вы не знаете у кого???? Охххх ..... есть тут у нас специалист :)
Женя!!!!! Не будите лихо!!!!!!!!
поздно... Ну... поехали! Попкорн?
Ахах, у ssss походу парсер форума настроен :-) Как только в новой теме встречается словосочетание "STM32" - на мыло сразу отправляется письмо, что кто-то на форуме упомянул STM32 :-)
Ахах, у ssss походу парсер форума настроен :-) Как только в новой теме встречается словосочетание "STM32" - на мыло сразу отправляется письмо, что кто-то на форуме упомянул STM32 :-)
ssss анально проклят Arduino до седьмого колена - его внуки и праправнуки будут ходить сюда бессмертным полком с портретом дохлого дедавоеала ssss.
поздно... Ну... поехали! Попкорн?
Ну, а чё? Щас нам расскажут как всё делать правильно и кошерно, а мы послушаем :)
Почитал. Тема - хороший пример того как кривую архитектуру пытаются спасти чудесами оптимизации. А хрен оно выйдет.
Скажите, Normas, зачем Вам буфер? Чтоб было чем заморочится и форум баламутить?
И прерывания в топку, это слишком медлено для задачи.
Делаете так, открываете даташит и смотрите максимально достижимую скорость на uart и с АЦП. Кто из них медленей, тот и будет определять скорость работы. Скорость каравана определяется скоростю самого медленого верблюда ;) В коде запрещаете прерывания, вобще все. Пишите коротюсенький вечный (или почти вечный) цикл в котором::
1. проверяете что медленейшее из uart и АЦП завершило работу, если не завершило, то перейти на п.1
2. выгребаете свой байт с АЦП и пихаете его в uart, стартуете новое преобразование АЦП и переходите к п.1
ПС. Полезно еще посмотреть, сможет ли ПК принимать на той скорости, на которую uart настроите.
Почитал. Тема - хороший пример того как кривую архитектуру пытаются спасти чудесами оптимизации. А хрен оно выйдет.
Ну кривая, ну убогая, ну и хрен с ней! Это уже ТСа проблемы.
Делаете так, открываете даташит и смотрите максимально достижимую скорость на uart и с АЦП. Кто из них медленей, тот и будет определять скорость работы. Скорость каравана определяется скоростю самого медленого верблюда ;) В коде запрещаете прерывания, вобще все. Пишите коротюсенький вечный (или почти вечный) цикл в котором::
1. проверяете что медленейшее из uart и АЦП завершило работу, если не завершило, то перейти на п.1
2. выгребаете свой байт с АЦП и пихаете его в uart, стартуете новое преобразование АЦП и переходите к п.1
ПС. Полезно еще посмотреть, сможет ли ПК принимать на той скорости, на которую uart настроите.
Ну и чем ваша хрень лучше ТСовской?
Оцифровку уже написал по прерыванию таймера. Для увеличения скорости, чтобы не ждать внутри прерывания окончания цикла работы ADC, сделал "наоборот" - при входе в прерывание считываю показания предыдущего цикла ADC, а перед окончанием прерывания запускаю новый цикл. Частоту подобрал так, чтобы к следующему прерыванию ADC гарантированно завершил предыдущий цикл преобразования.
По таймеру в принципе кошернее будет. А то что майн пустой будет - ну и хрен с ним.
Тем более ТС этим озабочен.
Для анализа частот вибраций и биений очень важна точная дискретизация по времени, а на точность преобразования пока решено не обращать внимания и будем довольствоваться 8 бит.
В случае СТМ32 это будет всё ещё проще, без прерываний - ТИМ-АЦП-ДМА-ЮАРТ.
В случае СТМ32 это будет всё ещё проще, без прерываний - ТИМ-АЦП-ДМА-ЮАРТ.
А ведь он прав! (голосом губернатора из "Тот самый Мюнхгаузен") ;) Мало того, это еще можно спокойно на 100КГц сделать, в теории и на 1МГц, то тут есть сложности.
(.... эт я маслица в костер подливаю...)
еще можно спокойно на 100КГц сделать, в теории и на 1МГц
На 1МГц АЦП уже ЮАРТ узким горлышком станет. Копеечного STM32F0 (6 Mbit/s) может не хватить. Тогда уже или STM32F303K6 нужно будет брать (9 Mbit/s), или типа STM32F446 (11.25 Mbit/s).
На 1МГц АЦП уже ЮАРТ узким горлышком станет. Копеечного STM32F0 (6 Mbit/s) может не хватить. Тогда уже или STM32F303K6 нужно будет брать (9 Mbit/s), или типа STM32F446 (11.25 Mbit/s).
Ты эт... давай про Ф4 не говорить пока? В ценовой и экологической нише Ардуино останемся. Это значит не голый камень, а хоть на какой-то девборде и в цену до 500р, ОК?
Штоп под него и Куб был и СТ-Линк и так далее. То есть уровень Ардуино сохраним.
Ну тогда взять тривиальный шилд с STM32F103С8 (4.5 Mbit/s), их как грязи, и попробовать поднять ему ЮАРТ до 9 Mbit/s.
Делаете так, открываете даташит и смотрите максимально достижимую скорость на uart и с АЦП. Кто из них медленей, тот и будет определять скорость работы. Скорость каравана определяется скоростю самого медленого верблюда ;) В коде запрещаете прерывания, вобще все. Пишите коротюсенький вечный (или почти вечный) цикл в котором::
1. проверяете что медленейшее из uart и АЦП завершило работу, если не завершило, то перейти на п.1
2. выгребаете свой байт с АЦП и пихаете его в uart, стартуете новое преобразование АЦП и переходите к п.1
ПС. Полезно еще посмотреть, сможет ли ПК принимать на той скорости, на которую uart настроите.
Ну и чем ваша хрень лучше ТСовской?
Если дебилам это осталось непонятно - то знач я все правильно изложил.
Для анализа частот вибраций и биений очень важна точная дискретизация по времени, а на точность преобразования пока решено не обращать внимания и будем довольствоваться 8 бит.
В случае СТМ32 это будет всё ещё проще, без прерываний - ТИМ-АЦП-ДМА-ЮАРТ.
Точность дискретизации по описаному алгоритму составит +-несколько тактов, можна и точней сказать, не охота даташит открывать. Все предсказуемо и пргнозируемо. А проявив некоторую сообразительность (бля, кому я про это пишу?!) легко доводится до теоретически возможного +-0,5 такта. А на кривом STM, с непредсказуемым временем выполнения кода, действительно единственный шанс хоть чето получит - завязыватся на таймер. Но зачем же проблемы убогих тянуть на ардуину.
Дебилам можешь изЛАЖАть как хочешь, только в этом смысла никакого нет, даже если они тебе в ладоши будут хлопать.
Нафиг что-то проверять? Это тупоупоротые АВРовские привычки уже давно за гранью дебилизма, но тебе уже назад дороги нет.
Дебилам можешь изЛАЖАть как хочешь, только в этом смысла никакого нет..
Именно так. Нет смысла. Потому я и не стал тебе обяснять чем описаный алгоритм лучше чем тот с циклическим буфером и прерываниями ;) Спокойной ночи.
до теоретически возможного +-0,5 такта.
Песши ысчо! Это какая команда у АВР выполняется за 0,5 такта? Не годится! Для дебилов нужно 0,0005 такта, ты сможешь! Дерзай! ))))))))))))))))))
Эх, Евгений, евгений .. ну и как, послушали? :)
Читаем вдумчиво тему Пультоскоп в проектах, смотрим скетч и внезапно обнаруживаем что предельная частота тактирования АЦП у Мег лежит .. внезапно в районе 7Мгц. Делим эту чиселку на 13 тактов оцифровки и получаем частоту снятия данных с АЦП Ардуино .. около 540 килогерц. Это всем тем у кого"только звуковые частоты". Да, ещё обнаруживаем что младшие меги оверклокаются аж до 32Мгц ..
И что там от АЦП остаётся? 6 разрядов? Да и ЮАРТ укакается. "Доктор сказал в морг, значит в морг!"(с).
обнаруживаем что предельная частота тактирования АЦП у Мег лежит .. внезапно в районе 7Мгц. Делим эту чиселку на 13 тактов оцифровки и получаем частоту снятия данных с АЦП Ардуино .. около 540 килогерц.
А нафига оно здесь надо. Напомню - меряем вибрации. А это не такие уж высокие частоты - сотни герц, максимум единицы килогерц. Там частота дискретизации, преславутые 76КГц, и так с большим запасом. А если без запаса - uart на 115200, получаем дискретизацию 11КГц и отсутствие проблем по приему на ПК как впрочем и по всему остальному тракту передачи. Простая скучнющая задача. А вы (не вы лично Arhat109-2, разумеется) устроили литургию с вакханалией ;) А уж зачем этого тупого демона было в тему вызывать? Срача захотелось шоле..
Так и USART на мегах вполне способен пахать на 2Мгц .. иное дело кто его принять сможет .. :)
отож. Не, ну в принципе есть платы расширения. Но опять, зачем? Зачем выбират сложный путь, если все решается и простым.
Ну почему не показать ТС-у, что inline его В ПРИНЦИПЕ беспокоить не должен .. не тот уровень знаний, как-бэ :)
Ну почему не показать ТС-у, что inline его В ПРИНЦИПЕ беспокоить не должен ..
Это точно )))
Кстати, а где он?
Испужался наверно.
Ну вот! Я так старался, а холивар загнулся.... аппидыно, да?
А по делу - там вообще контроллер не нужен - звуковой карты достаточно. У нее и разрядность выше и АЦП лучше. Если синхронизировать с чем-то (например с оборотами вала), то запустить синхру во второй канал, Благо все карты - стерео. И хоть обанализируйся.