06.11.2010, 00:49
|
|
Прописка
Регистрация: 21.09.2009
Сообщений: 218
Сказал спасибо: 1
Сказали Спасибо 29 раз(а) в 27 сообщении(ях)
|
Re: А я вам в сотый раз говорю, не надо сравнивать 32-разрядную
Сообщение от Gnider
|
Что такое пиколло мне известно. Старье. Довольно медленный. Появился еще в эпоху АРМ7. С современными кортексами тягаться не сможет. Сигнальным процессором его назвать с натяжкой можно
|
Во-первых, тексасы позиционируют его, как сигнальный цифровой КОНТРОЛЛЕР, а не процессор, там периферии вагон и маленькая тележка. Появился он всего 2-3 года назад, думаю, как побочный продукт 2812/2811/2810 и т.д. (У 28хх, кстати, есть экземпляр с 512 КБ флеши на борту, и даёт он до 150 мипсов.)
Ногами пикколо дрыгает так же хорошо, как и соображает. Скажем, складывает/вычитает 32-битные числа прямо в памяти, перемножает числа 32*32, это я уже говорил, делает ДВА МАСа за один такт. В общем, не последнего ряда камушек - байтодробилка.
Последний раз редактировалось Falconist; 13.04.2011 в 23:42.
|
|
|
|
06.11.2010, 00:51
|
|
Почётный гражданин KAZUS.RU
Регистрация: 30.06.2005
Сообщений: 3,399
Сказал спасибо: 5
Сказали Спасибо 431 раз(а) в 306 сообщении(ях)
|
Re: STM8(S/L), первые впечатления
Сообщение от kison
|
Ну раз для сравнения, то и цифры для одного из состязующихся давайте. Для АВР или STM8, а я соберу пример для другого. Только нужно массив урезать - 320х240 хранить банально негде, да и не нужно столько для теста. И функцию наполнения массива приведите - время существенно зависит от данных.
Идеал - рабочий исходник, который можно сразу собрать. Пример такого в 181 сообщении.
|
Вот исходняк но он корявый,ибо выдран из пограммы.
#define ADC_BUF_SIZE 32
#define ADC_BUF_LOW 8
#define ADC_BUF_HIGH 24
int FilterBuf(unsigned short int * buf, unsigned short int * sortbuf, short int buf_pointer, unsigned short int newvalue)
{
int i = 0, n;
char f;
long s;
unsigned short int ret_val, t;
buf[buf_pointer] = newvalue;
for (i = 0; i ‹ ADC_BUF_SIZE; sortbuf[i] = buf[i], i++)
;
n = ADC_BUF_SIZE;
f = 1;
while (f)
{
n--;
f = 0;
for (i = 0; i ‹ n; i++) if (sortbuf[i] ‹ sortbuf[i + 1])
{
t = sortbuf[i];
sortbuf[i] = sortbuf[i + 1];
sortbuf[i + 1] = t;
f = 1;
}
;
}
for (i = ADC_BUF_LOW, s = 0; i ‹ ADC_BUF_HIGH; s += sortbuf[i++])
;
ret_val = s / (ADC_BUF_HIGH - ADC_BUF_LOW);
return ret_val;
// return newvalue;
}
Последний раз редактировалось Falconist; 13.04.2011 в 23:41.
|
|
|
|
06.11.2010, 00:56
|
|
Почётный гражданин KAZUS.RU
Регистрация: 13.12.2004
Сообщений: 3,172
Сказал спасибо: 11
Сказали Спасибо 692 раз(а) в 504 сообщении(ях)
|
Re: STM8(S/L), первые впечатления
Сообщение от =GM=
|
Выходит, для частот 16-24 будет не 0 состояний ожидания? А сколько?
|
Там это настраивается. Для работы из флеши при частоте выше 24МГц нужго включить лишний такт ожидания. Но он не всегда будет - зависит от длинны команды. Впрочем нужно проверить быстродействие из ОЗУ и если оно такое же как из флеши, то перенести критичные по времени участки туда. В филипсовых арм7 несмотря на МАМ так приходится делать и выходит быстрее, несмотря на 128 битную шину к флеши. МАМ плохо работает при переходах, а их в цикличных алгоритмах много.
Сообщение от =GM=
|
Например, для генерации 3-х частот по выбору, 100 Гц, 1 кГц и 10 кГц, я остановился на тайни2313, 2КБ памяти, чего явно недостаточно для хранения таблиц под эти частоты. При частоте выдачи 1000 квыб/с они составляют 10000, 1000 и 100 байт соответственно. У меня работает на 10 МГц, 10 тактов на отсчёт, успеваю ещё проверить, нажатие кнопок на переход к другой частоте. Сделаете то же самое на СТМ8?
|
Вполне. Причем с почти 0-ой загрузкой процессора. На 8L151, заодно и внешний ЦАП не понадобится.
Сообщение от =GM=
|
По поводу сортировки методом пузырьков. Для аврки без разницы, какие числа сравнивать. Могу поспорить, что сделаю за 500 тактов.
|
Попробуйте. Я в это не верю. Исходные данные - указатель на массив А uint16_t[32], одна переменная для добавления также uint16_t, указатель на массив B аналогичный В, впрочем можете хоть на стеке его создать - это на Ваше усмотрение. Ну и переменная для среднего арифметического элементов 8-23 отсортированного массива. Массив А заполняем как 0,31,1,30,2,29 и т.д. Переменная для добавления = 16. Получите результат, тогда я тоже соберу под STM8.
Последний раз редактировалось Falconist; 13.04.2011 в 23:41.
|
|
|
|
06.11.2010, 00:56
|
|
Почётный гражданин KAZUS.RU
Регистрация: 30.06.2005
Сообщений: 3,399
Сказал спасибо: 5
Сказали Спасибо 431 раз(а) в 306 сообщении(ях)
|
Re: STM8(S/L), первые впечатления
Сообщение от =GM=
|
У него всего 80 команд, а-ля 8051, посмотрел, проникся. В дейташите на STM8S208xx насторожила такая фраза "Max fCPU: up to 24 MHz, 0 wait states @ fCPU ‹ 16 MHz". Выходит, для частот 16-24 будет не 0 состояний ожидания? А сколько?
Ну, меня интересуют потенциальные возможности проца, т.е. что из него можно выжать, находясь в рамках приличий, то бишь заявленных производителем характеристик.
Например, для генерации 3-х частот по выбору, 100 Гц, 1 кГц и 10 кГц, я остановился на тайни2313, 2КБ памяти, чего явно недостаточно для хранения таблиц под эти частоты. При частоте выдачи 1000 квыб/с они составляют 10000, 1000 и 100 байт соответственно. У меня работает на 10 МГц, 10 тактов на отсчёт, успеваю ещё проверить нажатие кнопок на переход к другой частоте. Сделаете то же самое на СТМ8?
Для DSP тот же подход - раз есть мозги, выжать из них максимум возможного. Вот думаю разработать анализатор спектра 0-100 МГц на DSP.
Насчёт ДДС, программно выше 2-4 Мвыборок/с заходить не стоит, уже есть хорошие ДДС от Аналоговых Девиц с тактовой 25-50-100 МГц и выше. Но для низких частот - аппаратные ДДС избыточны, т.ч. здесь находится естественная ниша для программных ДДС.
По поводу сортировки методом пузырьков. Для аврки без разницы, какие числа сравнивать. Могу поспорить, что сделаю за 500 тактов. Хочется также послушать постановщика задачи gnider, сколько тактов у него.
|
Насчет DDS. Вы в курсе что такое DMA? Эти вещи давно можно делать аппаратно без участия ЦП.
А насчет пузырька. Я не знаю сколько это займет на стм8. Я утверждаю что на стм8 и авр будет одинаково.
Последний раз редактировалось Falconist; 13.04.2011 в 23:42.
|
|
|
|
06.11.2010, 01:06
|
|
Прописка
Регистрация: 21.09.2009
Сообщений: 218
Сказал спасибо: 1
Сказали Спасибо 29 раз(а) в 27 сообщении(ях)
|
Ну, это вы прямо в лоб делаете, так никаких
циклов не хватит ![Весело](images/smilies/icon_laugh.gif) . Хотя бы разбили на 4 части, отсортировали каждую часть, потом бы слили уже отсортированные. Раз в 5 быстрее было бы. Это не наш метод ![Весело](images/smilies/icon_laugh.gif) .
И ещё, вы уверены в заигрываниях с переменной f?
|
|
|
|
06.11.2010, 01:12
|
|
Почётный гражданин KAZUS.RU
Регистрация: 30.06.2005
Сообщений: 3,399
Сказал спасибо: 5
Сказали Спасибо 431 раз(а) в 306 сообщении(ях)
|
Re: Ну, это вы прямо в лоб делаете, так никаких
Последний раз редактировалось Falconist; 13.04.2011 в 23:41.
|
|
|
|
06.11.2010, 01:17
|
|
Почётный гражданин KAZUS.RU
Регистрация: 13.12.2004
Сообщений: 3,172
Сказал спасибо: 11
Сказали Спасибо 692 раз(а) в 504 сообщении(ях)
|
Re: STM8(S/L), первые впечатления
Сообщение от =GM=
|
У него всего 80 команд, а-ля 8051, посмотрел, проникся.
|
Кстати о командах. Их действительно около 80. А вот сколько у АВР? 120? Нет, значительно меньше. Например cbr - очистка бит в регистре на самом деле andi, и таких псевдонимов там много. Когда то считали команды, так их у АВР тоже около 80 насчиталось. Ну и например команда ld у STM8 - вроде одна. Но умеет память-› аккумулятор, аккумулятор-›память, константа-›аккумулятор. Или команда ldw - аж 6 вариантов. ST считает ее одной командой, а вот атмел бы на 6 разбил.
Последний раз редактировалось Falconist; 13.04.2011 в 23:41.
|
|
|
|
06.11.2010, 01:17
|
|
Прописка
Регистрация: 21.09.2009
Сообщений: 218
Сказал спасибо: 1
Сказали Спасибо 29 раз(а) в 27 сообщении(ях)
|
Re: STM8(S/L), первые впечатления
Сообщение от Gnider
|
Насчет DDS. Вы в курсе что такое DMA? Эти вещи давно можно делать аппаратно без участия ЦП.
А насчет пузырька. Я не знаю сколько это займет на стм8. Я утверждаю что на стм8 и авр будет одинаково.
|
Ну, если в лоб и на Си, то возможно. Кстати, тогда состязание будет не просто двух архитектур. но ещё и двух компиляторов. Кривость ассемблера и архитектуры будет тщательно скрыта.
О дма я в курсе. Дма только перекачивает данные, но не обрабатывает их, так что в задаче для ддс дма не поможет, скорее, помешает.
А вот вы в курсе, что ДМА останавливает проц, и толку от такого дма, не так уж и много, поскольку проц всё равно стоит?
Последний раз редактировалось Falconist; 13.04.2011 в 23:41.
|
|
|
|
06.11.2010, 01:22
|
|
Прописка
Регистрация: 21.09.2009
Сообщений: 218
Сказал спасибо: 1
Сказали Спасибо 29 раз(а) в 27 сообщении(ях)
|
Что там понимать-то
Сообщение от Gnider
|
Про 4 части не понял. А про переменную f сейчас не скажу. Но исходняк был работающий
|
Количество операций в сортировке N*(N-1)=32*31=992. если N=8, то количество операций равно 8*7=56. Всего 56*4=224. Теперь упорядоченные списки можно слить вместе, но уже не надо елозить по всему массиву.
Последний раз редактировалось Falconist; 13.04.2011 в 23:41.
|
|
|
|
06.11.2010, 01:23
|
|
Почётный гражданин KAZUS.RU
Регистрация: 13.12.2004
Сообщений: 3,172
Сказал спасибо: 11
Сказали Спасибо 692 раз(а) в 504 сообщении(ях)
|
Re: STM8(S/L), первые впечатления
Сообщение от Gnider
|
А про переменную f сейчас не скажу.
|
Я скажу. Там все правильно, это немного модифицированный пузырек. Каждый раз проход сокращается на 1 значение, а f - признак что замен не было. Позволяет выйти после первого же прохода если вышло так, что данные в сортировке не нуждаются. Этот алгоритм описан наверно 1000 раз ![Улыбка](images/smilies/icon_smile.gif) Впрочем я бы пузырек в такой задаче не использовал, есть много куда более быстрых алгоритмов сортировки, но вот для сравнения производительности он в самый раз.
Последний раз редактировалось Falconist; 13.04.2011 в 23:41.
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 09:35.
|
|