|
2 страниц
1 2 >
|
 |
Ответов
(1 - 24)
|
Feb 12 2009, 15:15
|
Участник

Группа: Новичок
Сообщений: 23
Регистрация: 8-04-07
Из: Магнитогорск, Россия
Пользователь №: 26 865

|
Цитата(MrYuran @ Feb 12 2009, 12:02)  AVR32 != ARM (это я по поводу темы-близнеца) Это я понял. У меня есть и АРМ и АВР32. и вопросы я поднял по теме. так что сам написал, что они не равны. по теме: Дело в том, что с АВР8 понятно там есть время такта и все команды привязаны к тактам (в основном 1 к 1). а что в АРМ, что АВР 32 не понятно вообще. и Потом, что касается программы на Си - на ней компилятор создает машиный код, но как посчитать например время выполнения одного цикла ПИД алгоритма? на асе как-то понятно. знаешь сколько тактов выполняется команда и уже можешь оценить время выполнения одного цикла того или иного алгоритма.... может быть у кого есть простейшие примеры для АРМ (АВР32) на языке ассемблера). поделитесь пожалуйста.
|
|
|
|
|
Feb 12 2009, 16:40
|
Гуру
     
Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136

|
Цитата(Иван_Я @ Feb 12 2009, 11:18)  В даташитах даже не указывается время выполнения команды...?... Не знаю, как другие ARMы, а для ARM7TDMI есть такой документ Technical Reference Manual, в котором есть глава Instruction Cycle timings. Конечно, в отдельно взятом МК надо учитывать, как процессор цепляется к памяти и периферии. Цитата(Иван_Я @ Feb 12 2009, 18:15)  Потом, что касается программы на Си - на ней компилятор создает машиный код, но как посчитать например время выполнения одного цикла ПИД алгоритма? Зачем это считать? Для получения нужной периодичности есть таймеры. Считать циклы - это лишняя головная боль и потенциальное минное поле.
|
|
|
|
|
Feb 12 2009, 18:44
|
Участник

Группа: Новичок
Сообщений: 23
Регистрация: 8-04-07
Из: Магнитогорск, Россия
Пользователь №: 26 865

|
Цитата(sergeeff @ Feb 12 2009, 20:05)  Складывается впечатление, что автор текущей ветки не с той стороны заходит на решение поставленной перед ним задачи. И уж, конечно, подсчеты тактов на выполнение - не вариант, про это неоднократно на форуме говорилось. Обычно перед созданием программы оценивают возможности процессора. Если стоит задача работы в реальном времени (а у меня все такие задачи), то подсчет тактов очень важен. При управлении векторном есть такое понятие как разложение на dq составляющие. Смотрел в документации на ТМС20хх... там есть пример на ассемблере как это разложение произвести. Но к сожалению нет возможности приобрести отладку для данного проца ( а в наличии есть АРМ LPC и АВР32 распаянный на плате NGW100) (задача реализации в лабораторных условиях и учебных целей). Короче необходимо выполнять в основном арифметические операции, поэтому и требуется ассемблер. Цитата(_Pasha @ Feb 12 2009, 18:27)  У Вас длительность процесса приближается к интервалу его вызова? Да скорее всего так и будет. Просто хочется сделать запас определенный. ВОт этого я и бось - что длительность одного цикла обсчета приблизится к времени отсчета данных АЦП. Причем не обязательно будет использоваться именно ПИД алгоритм, еще есть цель реализовать dq преобразование... вычисление синуса и косинуса.. Поэтому в основном мне и нужен ассемблер. (Я в учебных целях. Есть большое желание реализовать dq преобразование).
|
|
|
|
|
Feb 12 2009, 22:51
|

кекс
     
Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326

|
Цитата(Иван_Я @ Feb 12 2009, 20:44)  Да скорее всего так и будет. Просто хочется сделать запас определенный. ВОт этого я и бось - что длительность одного цикла обсчета приблизится к времени отсчета данных АЦП. Причем не обязательно будет использоваться именно ПИД алгоритм, еще есть цель реализовать dq преобразование... вычисление синуса и косинуса.. Поэтому в основном мне и нужен ассемблер. (Я в учебных целях. Есть большое желание реализовать dq преобразование). Обоснование типа "нужна быстрая математика поэтому - ассемблер" - бредовое. Вообще-то если нужна быстрая математика брать нужно проц (DSP) где есть реализованные аппаратно требующиеся мат. функции - например проц где синус вычисляется за такт и т.п.. Нет подходящего DSP тогда берется FPGA и реализуется вычислитель, при возможности такой, чтобы всю Вашу формулу считал за такт. На каком языке пользовать аппаратные возможности - нет разницы, особенно для математики. Скорость упирается в возможности железа. А про эффективность и удобство языков хорошо сказано здесь: http://tempo.nnm.ru/kak_prostrelit_sebe_noguПо-русски это удобство превращается вот во что: 1. или написать y = sin( x ); и заниматься неделю чем-то полезным, и к тому же быть спокойным, что эта же строчка сразу же заработает на любом другом процессоре. 2. или неделю промудохаться над реализацией одной только этой строчки на АСМ. Цитата Потом, что касается программы на Си - на ней компилятор создает машиный код, но как посчитать например время выполнения одного цикла ПИД алгоритма? Элементарно - с помощью обычного секундомера: Засечь время, запустить 1 млн циклов, затем разделить полученный интервал времени на млн. - получите время на цикл. не нравится 1 млн. (тест длится сильно долго или сильно быстро) измените это число. Помоему это очевидно. Цитата Если стоит задача работы в реальном времени (а у меня все такие задачи), то подсчет тактов очень важен. На самом деле не важен, просто закладывайте проц с запасом. (если пользоваться правилом - всегда закладывать проц с 50% запасом, то достаточно очень грубой оценки производительности - те самые +/-50%) Вот Вы говорите у Вас сейчас есть AVR32 (150Mhz) и LPC ARM ~60Mhz. У первого есть набор DSP инструкций, у второго такого набора нет. Разница по производительности более чем 2.5 раза. А цена - практически одинаковая. Так какой смысл такты считать?
|
|
|
|
|
Feb 13 2009, 04:28
|
Участник

Группа: Новичок
Сообщений: 23
Регистрация: 8-04-07
Из: Магнитогорск, Россия
Пользователь №: 26 865

|
Цитата(sergeeff @ Feb 13 2009, 01:29)  А если надо работать в нереальном времени? Шутка.
Никак не пойму, причем здесь выполнение арифметических операций и программирование на ассемблере?
Что такое программирование в реальном времени? Надо обрабатывать высокочастотные процессы? А почему "в учебных целях" нельзя обрабатывать низкочастотные процессы?
Можно реализовать некоторое преобразование на реальном процессоре и оценить, до какой частоты входных сигналов он может реально работать. Чем такой подход "в учебных целях" плох?
А какова частота опроса ADC? ) да нет) надо обрабатывать сигналы промышленной частоты (50 Гц). на счет частоты опроса - миимальное количество точек на период - 64. ну да.. можно конечно и на практике оценить... ps: Вы извините, если какие-нибудь выражения звучат не так, как может быть следовало... дело в том, что этим занимаюсь впервые.. и с работы с процессорами нет большого опыта. [quote name='sergeeff' date='Feb 13 2009, 01:29' post='545527'] А если надо работать в нереальном времени? Шутка. Никак не пойму, причем здесь выполнение арифметических операций и программирование на ассемблере? Везде говорят, что выполнение программы на Ассемблере сокращает вермя ее выполнения раза в 2. Поэтому и Ассемблер. И потом, ладно, написали программу на Си, а как вести отладку в дизассемблере, если не знать Ассемблер данного проца. Ведь чтобы написать оптимизированную программу даже на СИ надо знать все особенности данного проц. в том числе и его систему команд на Ассемблере.
|
|
|
|
|
Feb 13 2009, 05:49
|
Гуру
     
Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136

|
Первое суеверие победили, отлично :-) Осталось победить остальные. Цитата(Иван_Я @ Feb 13 2009, 07:28)  Везде говорят, что выполнение программы на Ассемблере сокращает вермя ее выполнения раза в 2. Поэтому и Ассемблер. Не нужно верить всему, что говорят. Тут очень многое зависит от конкретной ситуации. Цитата(Иван_Я @ Feb 13 2009, 07:28)  И потом, ладно, написали программу на Си, а как вести отладку в дизассемблере, если не знать Ассемблер данного проца. Вы удивитесь: подавляющее большинство программистов процессора x86 не знают его ассемблера и не переживают по этому поводу. Пишут программы на Си и Си++, отлаживают их и не знают печали. Хотя в Embedded, конечно, ситуация несколько иная. Я частенько заглядываю в дизассемблер, иногда и глюки компилятора выскакивают... Но такты процессора точно не считаю. Цитата(Иван_Я @ Feb 13 2009, 07:28)  Ведь чтобы написать оптимизированную программу даже на СИ надо знать все особенности данного проц. в том числе и его систему команд на Ассемблере. Мне кажется, Вы не с того начинаете. Ведь задача стоит не "написать оптимизированную программу", а "написать работающую программу". Помните слова уважаемого человека Дональда Кнута: "We should forget about small efficiencies, say about 97% of the time: premature optimization is the root of all evil." ("Нам следует забывать о малых оптимизациях, скажем, 97% времени: преждевременная оптимизация - корень всех зол")
|
|
|
|
|
Feb 13 2009, 06:22
|
Участник

Группа: Новичок
Сообщений: 31
Регистрация: 30-01-09
Пользователь №: 44 166

|
Цитата(defunct @ Feb 13 2009, 01:51)  Элементарно - с помощью обычного секундомера:
Засечь время, запустить 1 млн циклов, затем разделить полученный интервал времени на млн. - получите время на цикл. не нравится 1 млн. (тест длится сильно долго или сильно быстро) измените это число.
Помоему это очевидно. Не факт... Попробуйте сами так сделать... Цитата(defunct @ Feb 13 2009, 01:51)  Вот Вы говорите у Вас сейчас есть AVR32 (150Mhz) и LPC ARM ~60Mhz. У первого есть набор DSP инструкций, у второго такого набора нет. Разница по производительности более чем 2.5 раза. А цена - практически одинаковая. Так какой смысл такты считать? С чего это цена одинаковая? Как минимум в три раза разница. Мне думается, автор темы не пока не совсем представляет чего он сам хочет сделать и в процессе этих разговоров стимулирует МЫСЛИТЕЛЬНЫЕ процессы...
|
|
|
|
|
Feb 13 2009, 07:25
|
Участник

Группа: Новичок
Сообщений: 23
Регистрация: 8-04-07
Из: Магнитогорск, Россия
Пользователь №: 26 865

|
Я представляю что надо сделать и я об этом писал уже. Надо реализовать ЦОС dq преобразование. Примеры есть от Texas на ассемблере. Был и есть интерес реализовать этот же алгоритм на LPC или AVR32 с учетом их специфики и систем команд. Я понял,что на Ассемблере писать можно. Всем спасибо за свои предложения.
Сообщение отредактировал Иван_Я - Feb 13 2009, 07:30
|
|
|
|
|
Feb 13 2009, 10:21
|

Беспросветный оптимист
     
Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646

|
Цитата(Иван_Я @ Feb 13 2009, 10:25)  Я понял,что на Ассемблере писать можно. Всем спасибо за свои предложения. Но не нужно. Алгоритм такой: 1. Пишете и отлаживаете алгоритм на си. 2. Если всё устраивает - конец, задача решена. 3. Оптимизируете узкие места. 4. goto 2 5. Если по-другому никак не получается, особо критичные места перекладываете на асм.
--------------------
Программирование делится на системное и бессистемное. ©Моё :) — а для кого-то БГ — это Bill Gilbert =)
|
|
|
|
|
Feb 13 2009, 10:30
|

кекс
     
Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326

|
Цитата(WDT @ Feb 13 2009, 08:22)  Не факт... Попробуйте сами так сделать... Разве бы я советовал то в чем не был уверен или то что никогда не пробовал?  Всегда так и оцениваю. Разве только секундомер с требуемой точностью/разрешением реализую в той же программе: Код starttime = GetTime();
for( n = N; n; n--) f(n);
duration = GetTime() - starttime; f_time = duration / N; Цитата С чего это цена одинаковая? Как минимум в три раза разница. Смотря с чем сравнивать. Если с МК с ARM ядром и такой же периферией как в AP7000 то цена будет примерно одинаковой. А если брать что NGW100 от производителя - $50. плата с любым LPC в той же конфигурации будет не дешевле. Отсюда вывод о цене.
|
|
|
|
|
Feb 13 2009, 10:54
|
Частый гость
 
Группа: Свой
Сообщений: 106
Регистрация: 28-09-05
Пользователь №: 9 035

|
Ассемблер ARM (не в Thumb варианте) - вообще самый гуманный из ассемблеров, и по простоте может сравниться только с asm PDP11, но с тем всерьез не работал. По опыту, всякие FIR, корреляторы и т.п., написанные под ARM7 на asm могут работать раз в 5-10 быстрее написанных на с. Кстати, подобные вещи и для нормальных DSP поставляются тоже в виде библиотек на asm - только так можно всерьез задействовать все "фишки" процессора типа 2-4 MAC за такт и т.д. Цитата Обоснование типа "нужна быстрая математика поэтому - ассемблер" - бредовое. Вообще-то если нужна быстрая математика брать нужно проц (DSP) где есть реализованные аппаратно требующиеся мат. функции - например проц где синус вычисляется за такт и т.п.. Оно так, оно конечно...Но если вы мне подскажете DSP-однокристалку в TQFP-68, max 100, чтобы у нее все было на борту, архитектура не убогая (не DSPIC), и по цене как SAM7 (TI при тех же RAM/FLASH дороговаты), я буду благодарен. Подумайте, если задача вписывается в 5 DSP-шных MIPS (это 30-50 ARM-овских), то...почему бы и не ARM? Тем более, что в реальности на asm требуется написать только маленькую библиотечку. Но в случае автора: Цитата надо обрабатывать сигналы промышленной частоты (50 Гц). на счет частоты опроса - миимальное количество точек на период - 64. Есть глубокое подозрение (опять же по опыту ЦОС на ARM), что при частоте дискретизации 3200 Гц можно прекрасно обойтись без asm модулей.
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|