STM32F100RB@Keil VS AtMega8@CVAVR

Кто любит RISC в жизни, заходим, не стесняемся.
clawham
Поставщик валерьянки для Кота
Сообщения: 1957
Зарегистрирован: Пт окт 31, 2008 09:38:55
Откуда: Одесса
Контактная информация:

STM32F100RB@Keil VS AtMega8@CVAVR

Сообщение clawham »

Здравствуйте!
Намедни освоил новый проц/архитектуру/производителя/способ отладки

имеется STM32VLDiscovery

запустил с нуля созданный в кейле проект через StdPeriphDriver + CMSIS
впринципе могу и без СтдПерипДрайвера - после 3-х дней общения камушек стал прост до безобразия...

и вот на новой платформе заинтересовали меня сравнения...
1) Каково потребление
2) макс частота
3) насколько быстрее атмеги на той же частоте
4) насколько больше/меньше жрёт на меговской частоте
5) насколько высока макс частота
6) разница по объёму кода

в результате чего было проведено масса тестов
итак..
программа - обыкновенная простая заготовочка с инициализацией системы, PLL, некоторых таймеров, РТЦ, и самописный драйверок экрана 44780+граф либа к нему....вся вычислительная и рисовательная часть один-в-один с атмеговских проектов...

значиться так по пунктам
1) при 24 мегагерцах и указанной периферии - 10 ма(11 при активных вычислениях)
2) макс частота 56 мегагерц....кушает при этом 25 ма или 29 при активных вычислениях
3) написал прогу примитивнейшую...

Код: Выделить всё

f1 = x;
			f1 = f1/23;
			//f1=f1+y;
			f3 = f1;
			f4 = y;
			f4 = f4/23;
			f4+=f3;
			f5 = y;
			f5 = f5/230;
			f2 = sin(f4*0.95/2)*f5+4.0;
			f1=f1*3;
			dot((int)f1, (int)f2, 1);
			
			//if(((int)f1)>40)
			//	bufinit();
			Sinuses+=1;
где ф1...ф5 это флоаты, синусес 32-битный унсигнед инт
функция дот это

Код: Выделить всё

void dot(int x, int y, char mode)
{
	unsigned char tmp;
	unsigned char tmp1;

	char bitnum;
	char strnum;

	while(x>MAX_X)
		x-=(MAX_X+1);

	while(y>MAX_Y)
		y-=(MAX_Y+1);

	while(x<0)
		x+=(MAX_X);

	while(y<0)
		y+=(MAX_Y);

	bitnum = y;
	tmp = DispBuf[0][x];
	tmp1 = 1<<bitnum;
	if(mode==1)
	{
		tmp|=tmp1;
	}
	if(mode==2)
	{
		tmp&=~tmp1;
	}
	if(mode==3)
	{
		tmp=~(tmp&tmp1);
	}
	DispBuf[0][x] = tmp;
}

замечено что её наличие-отсутствие на результат влияет мало...очень мало...неразличимо мало

так вот
на 8 мегагерцах
АРМ за секунду проходит указанный тестовый код 2300 раз...
АтМега8 - 800 при оптимизации на объём и 900 при оптимизации на скорость
разница в два с половиной раза всего....не радует...

5) на 8-ми мегагерцах и указанных вычислениях - токи примерно равны....+- 1 миллиампер...
но мега-то рабоатет от 5-ти вольт а арм от 3.3 тоесть мощность в два раза меньше

6) тестовая программка на кодвижне скомпилилась в 5 килобайт коду...
оптимизация по размеру ....по скорости - скомпилится в 5.2 кб..разницы нет

АРМовский код аналогичен....занимает 17 килов! без оптимизации и 12 килов с макс оптимизацией по размеру .... на скорость влияет ПОЛОЖИТЕЛЬНО...+ 100-200 проходов в секунду

ИТОГО.....если дать АРМУ 56 мегагерц + его архитектура + кеил который поточнее будет чем свавр овский флоат = 15000 вычислений в секунду

атмегу не гнал...да и разницы нет....скорость растет линейно - 900 при 8 мегагерцах...
ИТОГО...
-в 3 раза больше прошивка аналогичная по функциям - можно сделать вывод что 128 КБ у арма = 32 килобайтам у АТМЕГИ

-в 2.5 раза больше быстродействие при той же частоте...

-в 3,5 раза больше макс допустимая частота

-в результате - производительность всего в 8 раз выше .... и это максимум....при том что макс допустимой частоты моего арма 24 мегагерца...

- если использовать стандартные частоты то мега на 16-ти мегагерцах выдаёт 1800 вычислений в секунду
а АРМ выдаёт 6400 вычислений в секунду на 24 мегагерцах
тоесть всего в 3.5 раза больше....при этом и кода сравнительно тоже так же само больше по обьёму...тоесть 128 кб у арма это 36 КБ у атмеги...
не радует память...у арма 8 килобайт всего....2000 занято этой прогой...
а у меги занято всего 200 байт!!!! при её то килобайте ВСЕГО
+ у меги есть еепром а у арма - 20 байт бекап регостров для которых надо батарейка...
но арм всётаки покруче будет меги...особенно таймерами и режимами ног...большая половина которых 5Вольт толерантная...

и на последок - очень тяжелое ВИДЕО двух устройств рядом...
арму я динамически на ходу менял тактовую
http://clawham.hopto.org/DriveD/PubD/66/MVI_8188.AVI
ОСТОРОЖНО 500 МЕГАБАЙТ!



Если есть ктото у кого дискаверя лежит и он зная атмеги не знает как перейти на армы - обращайтесь помогу чем смогу..мне с ней уже стало скучно...всё что хотел и мог хотеть уже попробывал настроит и получил....
АРМ это довольно просто....пересесть с атмела на арм нечего делать
Что нас не убило сделало нас осторожней
Не доверяйте русским лужам - это может быть вход в метро.
Реклама
Аватара пользователя
YS
Друг Кота
Сообщения: 7518
Зарегистрирован: Вс мар 29, 2009 22:09:05
Контактная информация:

Re: STM32F100RB@Keil VS AtMega8@CVAVR

Сообщение YS »

обращайтесь помогу чем смогу..
О! Я, пожалуй, воспользуюсь случаем.

В принципе, мне там все понятно. Однако есть один вопрос: объясните пожалуйста еще раз, как работать с NVIC (БЕЗ стандартной бибилиотеки, через регистры, с CMSIS и я могу).

Кстати, если кто не знал. Камушек, который стоит в VLDiscovery (STM32F100RB) легко и непринужденно перепаивается на STM32F103XXX без изменения платы.
Разница между теорией и практикой на практике гораздо больше, чем в теории.
Реклама
clawham
Поставщик валерьянки для Кота
Сообщения: 1957
Зарегистрирован: Пт окт 31, 2008 09:38:55
Откуда: Одесса
Контактная информация:

Re: STM32F100RB@Keil VS AtMega8@CVAVR

Сообщение clawham »

дак ЦМСИС эт просто битраспиновки
а вот cln периф драйвер это уже да...это зло...но...там ничего сложного нет можно в исходники посмотреть и увидеть что он делает...
с нвик никаких проблем нету...у меня по крайней пере не возникло....надо просто включить его и включить линию прерывания....ну и включить генерацию прерывания в соответствующей периферии

П.С. они то конечно полностью идентичны по распиновке и т.д. но...зачем мне туда 100 грниневый камень? в чём вкусность армов stm32VL ? Цена 9 грн за камень аналогичный атмеге 8-й по размерам флеше и раме но НАСКОЛЬКО навороченней и быстрее? и доставаемей...
Последний раз редактировалось clawham Пт июн 24, 2011 09:40:31, всего редактировалось 1 раз.
Что нас не убило сделало нас осторожней
Не доверяйте русским лужам - это может быть вход в метро.
Аватара пользователя
radio-kot
Собутыльник Кота
Сообщения: 2584
Зарегистрирован: Вт сен 14, 2010 10:27:19

Re: STM32F100RB@Keil VS AtMega8@CVAVR

Сообщение radio-kot »

Появился новый набор STM32L Discovery

Добавлен ЖКИ и емкостные сенсоры в виде слайд-бара.

Надо сравнить с silabs.com на 100 mips 8051 :))
Последний раз редактировалось radio-kot Пт июн 24, 2011 09:47:01, всего редактировалось 1 раз.
Будете проходить мимо- проходите!
Реклама
Эиком - электронные компоненты и радиодетали
clawham
Поставщик валерьянки для Кота
Сообщения: 1957
Зарегистрирован: Пт окт 31, 2008 09:38:55
Откуда: Одесса
Контактная информация:

Re: STM32F100RB@Keil VS AtMega8@CVAVR

Сообщение clawham »

и их тоже биплатно раздают ?
Что нас не убило сделало нас осторожней
Не доверяйте русским лужам - это может быть вход в метро.
Реклама
Аватара пользователя
radio-kot
Собутыльник Кота
Сообщения: 2584
Зарегистрирован: Вт сен 14, 2010 10:27:19

Re: STM32F100RB@Keil VS AtMega8@CVAVR

Сообщение radio-kot »

Возможно, но у известно кого STM32L Discovery по 850 рублей

Поставить плату на безпаячную макетку за 450 рублей и прекрасный стенд начального уровня готов !

Изображение

STM32L-DISCOVERY – недорогой способ познакомиться с микроконтроллерами STM32L, построенными на базе ядра Cortex-M3, отличающиеся ультранизким энергопотреблением (порядка 270нА в спящем режиме). Эта плата – полноценный инструментарий, включающий в себя оценочную плату, программатор и отладчик с поддержкой самых популярных программных средств разработки от таких фирм как IAR, Keil и Atollic.

В основе STM32L-Discovery заложен 32МГц микроконтроллер STM32L152RBT6 с 128 KБ Flash, 16 KБ RAM и 4 KБ EEPROM. Наличие встроенного программатора–отладчика ST-LINK позволяет начать разработку собственных приложений без дополнительных затрат. Сигналы встроенного ST-Link выведены на внешний разъем, что позволяет в дальнейшем использовать STM32L-Discovery в качестве программатора-отладчика для своих собственных разработок. На официальном сайте STMicroelectronics вы можете найти всю необходимую информацию по данному продукту – руководства, примеры программного обеспечения, документацию http://www.st.com/internet/evalboard/product/250990.jsp

Основные характеристики STM32L-Discovery:
• Микроконтроллер STM32L152RBT6
- Ядро Cortex-M3, 128 KB Flash, 16 KB RAM, 4 KB EEPROM
- Интерфейсы USB 2.0 FS, 3xUSART, 2xSPI, 2xI2C, 8 таймеров
- 24-канальный 12-бит АЦП 1мкс, компараторы, 2х12-бит ЦАП
- Полноценные часы реального времени
- Встроенный контроллер LCD 8х40
• Встроенный программатор ST-Link с возможностью программировать другие микроконтроллеры STM32.
• LCD дисплей 24х8 в форм-факторе DIP28
• Возможность измерения потребляемого тока
• Четыре светодиода:
- LD1 (красный/зеленый) для сигнализации обмена данных по USB
- LD2 (красный) для питания 3.3В
- Два пользовательских диода LD3 (зеленый) и LD4 (синий)
• Две кнопки (user и reset)
• Сенсорная клавиатура (четыре сенсорных кнопки или один слайдер)
• Все свободные выводы STM32L152RBT6 выведены на контактные площадки
Будете проходить мимо- проходите!
Реклама
Аватара пользователя
YS
Друг Кота
Сообщения: 7518
Зарегистрирован: Вс мар 29, 2009 22:09:05
Контактная информация:

Re: STM32F100RB@Keil VS AtMega8@CVAVR

Сообщение YS »

дак ЦМСИС эт просто битраспиновки
Э-э-э, мил человек! CMSIS - это библиотека для работы с ядром. А, поскольку NVIC - часть ядра, то и функции для работы с ним входят туда же.

А вот STDPERIPHDRIVER это набор программных модулей для работы с периферией, типа ADC/UART/etc.
надо просто включить его и включить линию прерывания...
А что такое группы прерываний по приоритетам Вы не разбирались? А Tail-Chaining'ом не интересовались?

Все гораздо сложнее, чем Вам кажется. Но и мощнее. :wink:
Разница между теорией и практикой на практике гораздо больше, чем в теории.
clawham
Поставщик валерьянки для Кота
Сообщения: 1957
Зарегистрирован: Пт окт 31, 2008 09:38:55
Откуда: Одесса
Контактная информация:

Re: STM32F100RB@Keil VS AtMega8@CVAVR

Сообщение clawham »

приоритетами игрался ....пока нет таких задач
как то ж на авр жил до этого?
я тут это сравнение сделал просто для того чтоб увидеть реально что мне даёт арм....по факту ничего особенного....в 4 раза больше производительность на стандартных частотах....
всё...
да красивые таймера, да много плюшек с прерываниями, да много функций у системы тактования....но....это всё не делает его чем-то уникальным.....я не вижу у себя ни одной задачи которая бы арму была б по зубам а вот на меге 8-16-32-108 я этого бы не мог сделать...нет таких задач...
рамы мало...много ног не 5в толерант....сложнопаябельные корпуса....скорость на том же уровне...не в 10 и не в 20 раз они быстрее...прерывания...совершенно не известно за сколько тактов выполняются(опоздание - у меги 8й - 12 тактов)....частоту 1 мегагерц на прерывании они тоже не выдерживают...зависают намертво..хоть немного и пускают команд основного цикла...но...это как-то не особо помогает....
ДМА....очень интересно назначение ДМА в 8-ми килах без возможности расширить...
да код можно выполнять из РАМ...разницы никакой...по скорости одно и то же...
я говорю о проце f100rb ....
стабильность тактовой внутренней - ваще пипец...при поднятии температуры корпуса на 10 градусов вместо 2.3 мегагерц генератор выдаёт 2.6....его как термометр можно использовать...
у меги не лучше встроенный но...зато внешний не уплывает а в моём арме(мож бракованный попался - И КВАРЦ ПЛЫВЁТ на 1-2 килогерца в плюс при нагреве!!!(правда паяльником и до 60-70 градусов)...

вот и целесообразность....вопрос?
Что нас не убило сделало нас осторожней
Не доверяйте русским лужам - это может быть вход в метро.
clawham
Поставщик валерьянки для Кота
Сообщения: 1957
Зарегистрирован: Пт окт 31, 2008 09:38:55
Откуда: Одесса
Контактная информация:

Re: STM32F100RB@Keil VS AtMega8@CVAVR

Сообщение clawham »

я инициализирую прерывание таймера так

Код: Выделить всё

NVIC_InitStructure.NVIC_IRQChannel = TIM7_IRQn;
    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
    NVIC_Init(&NVIC_InitStructure);
если сходить по исходникам то это получается

Код: Выделить всё

tmppriority = (0x700 - ((SCB->AIRCR) & (uint32_t)0x700))>> 0x08;
    tmppre = (0x4 - tmppriority);
    tmpsub = tmpsub >> tmppriority;

    tmppriority = (uint32_t)NVIC_InitStruct->NVIC_IRQChannelPreemptionPriority << tmppre;
    tmppriority |=  NVIC_InitStruct->NVIC_IRQChannelSubPriority & tmpsub;
    tmppriority = tmppriority << 0x04;
        
    NVIC->IP[NVIC_InitStruct->NVIC_IRQChannel] = tmppriority;
    
    /* Enable the Selected IRQ Channels --------------------------------------*/
    NVIC->ISER[NVIC_InitStruct->NVIC_IRQChannel >> 0x05] =
      (uint32_t)0x01 << (NVIC_InitStruct->NVIC_IRQChannel & (uint8_t)0x1F);
вот такой код на включение прерывания...
ключевая строка -

Код: Выделить всё

NVIC->ISER[NVIC_InitStruct->NVIC_IRQChannel >> 0x05] =
      (uint32_t)0x01 << (NVIC_InitStruct->NVIC_IRQChannel & (uint8_t)0x1F);
происходит из цмсис

Код: Выделить всё

#define SCS_BASE            (0xE000E000)                              /*!< System Control Space Base Address */
#define NVIC_BASE           (SCS_BASE +  0x0100)                      /*!< NVIC Base Address                 */
#define NVIC                ((NVIC_Type *)          NVIC_BASE)        /*!< NVIC configuration struct         */

typedef struct
{
  __IO uint32_t ISER[8];                      /*!< Offset: 0x000  Interrupt Set Enable Register           */
       uint32_t RESERVED0[24];                                   
  __IO uint32_t ICER[8];                      /*!< Offset: 0x080  Interrupt Clear Enable Register         */
       uint32_t RSERVED1[24];                                    
  __IO uint32_t ISPR[8];                      /*!< Offset: 0x100  Interrupt Set Pending Register          */
       uint32_t RESERVED2[24];                                   
  __IO uint32_t ICPR[8];                      /*!< Offset: 0x180  Interrupt Clear Pending Register        */
       uint32_t RESERVED3[24];                                   
  __IO uint32_t IABR[8];                      /*!< Offset: 0x200  Interrupt Active bit Register           */
       uint32_t RESERVED4[56];                                   
  __IO uint8_t  IP[240];                      /*!< Offset: 0x300  Interrupt Priority Register (8Bit wide) */
       uint32_t RESERVED5[644];                                  
  __O  uint32_t STIR;                         /*!< Offset: 0xE00  Software Trigger Interrupt Register     */
}  NVIC_Type;                                               

тоесть по сути просто обименовывание адресов управляющих регистров и определение структуры-полей этих регистров...
куда уж проще и ниже-то?
хотите - сами распихивайте вручную по регистрам битики обращяясь к адресам памяти проца выщитывая смещение....ужос наверное
Что нас не убило сделало нас осторожней
Не доверяйте русским лужам - это может быть вход в метро.
Аватара пользователя
Zheleznjakov
Нашел транзистор. Понюхал.
Сообщения: 190
Зарегистрирован: Сб июн 12, 2010 16:19:17
Откуда: Россия, Томск
Контактная информация:

Re: STM32F100RB@Keil VS AtMega8@CVAVR

Сообщение Zheleznjakov »

не понятно как у вас одинаковые программы откушали от озу разный объем,
на порядок разница, вероятно код разный, и получается что сравнение не корректное.
--
можете выложить оба проекта?
С уважением, Денис Железняков aka ZiB
Мой блог: http://ziblog.ru
clawham
Поставщик валерьянки для Кота
Сообщения: 1957
Зарегистрирован: Пт окт 31, 2008 09:38:55
Откуда: Одесса
Контактная информация:

Re: STM32F100RB@Keil VS AtMega8@CVAVR

Сообщение clawham »

ну конечно разный...разные компиляторы разные разрядности переменных..например флоат у авра 0.0000 а у арма 0.000000 есть разница?
у арма любая переменная - 32 битная...даже чар займёт в раме 32 бита!
а у АВР нет
У Авр кодвижн...он наверняка очень упрощен...
увы сравнить результаты расчета синусов пока не смогу...хотя нет....смогу....в уарт сливать да и всё...

потом у арма полтора кила рамы занимает только програ инициализации периферии...а у авра инициализация - просто 10-ток регистров прописать...вот вам и разница архитектур!!!

арм это Кейл...у него флоат 64 битный помоему...а у авра и кодевижна - всего 32 битный...ну есть разница....вот она....напорядок боле расход памяти и оперативки...по сути ресурсов....на самообеспечение....

конечно если без ничего конфигить арм на уровне адресов регистров то получится меньше...но....оно того стоит?

исходник под кеий - пожалуйста http://clawham.hopto.org/DriveD/PubD/66/1_hello.rar
http://clawham.hopto.org/DriveD/PubD/66 в этой папке ещё видики есть...тестов и первых стартов...тест генератора...
туда же выкину кодвижновский проект
на авр - дома лежит..вечером выложу..но програ там реально такая же....просто он проще...
Что нас не убило сделало нас осторожней
Не доверяйте русским лужам - это может быть вход в метро.
clawham
Поставщик валерьянки для Кота
Сообщения: 1957
Зарегистрирован: Пт окт 31, 2008 09:38:55
Откуда: Одесса
Контактная информация:

Re: STM32F100RB@Keil VS AtMega8@CVAVR

Сообщение clawham »

Это не холивар авр и ли арм...
я говорю о личном смысле переходить и иметь возможность сравнивать две несравненные архитектуры....просто армы я могу у техасцев нарыть хоть 100 бесплатно а атмели не раздают нашару...а меги 8-е покупать в одессе по 30 грн как-то жаба душит...недавно у ворона купил 20 штук ...так уже 3 остались.......просто я сделал тест-сравнение одинаковых задачь и во что выливается решение их на аврке и на армике...это ж не арм...это жалкое подобие...но стоит 9 грн....
Что нас не убило сделало нас осторожней
Не доверяйте русским лужам - это может быть вход в метро.
Аватара пользователя
YS
Друг Кота
Сообщения: 7518
Зарегистрирован: Вс мар 29, 2009 22:09:05
Контактная информация:

Re: STM32F100RB@Keil VS AtMega8@CVAVR

Сообщение YS »

сложнопаябельные корпуса...
ЛУТом - ОК.
совершенно не известно за сколько тактов выполняются(опоздание - у меги 8й - 12 тактов)...
Тут тоже 12 тактов. http://www.scribd.com/doc/48856205/STM3 ... rupt-model

Причем, если прерывания следуют друг за другом, то при переходе от одного обработчика к другому проходит всего 6 тактов.
даже чар займёт в раме 32 бита!
Нет. Там действует хитрая система упаковки.

Надо сказать, что STM32F100RB - довольно странный проц. Он выглядит обрезаным по прихоти маркетологов - остальное семейство несравненно круче по памяти, периферии и тактированию.

Вообще, я бы посоветовал Вам пристальнее изучать архитектуры, с которыми собираетесь работать, ибо видно, что возможности STM32 Вы представляете не полностью.
Разница между теорией и практикой на практике гораздо больше, чем в теории.
clawham
Поставщик валерьянки для Кота
Сообщения: 1957
Зарегистрирован: Пт окт 31, 2008 09:38:55
Откуда: Одесса
Контактная информация:

Re: STM32F100RB@Keil VS AtMega8@CVAVR

Сообщение clawham »

я не против хитрой упаковки но режим тхумб не рабоатет ...судя по отладчику читается ВЕСЬ регистр на 32 бита из памяти при присвоении....может при хранении начальных данных и нет - но вот при присвоении смотрел - 32 бита все хором...мой чаровский буффер экрана занимает просто дофигищщще
дальше по прерываниям...та..так то оно так
но вот ...
запустил я на сисклоке таймер
сбрасываю его в ноль и запускаю внешнее прерывание....
проходит от 24 до 100 тактов

ладно...софт прерывания не то...
беру таймер и при переполнении дергаю ножкой....от которой внешнее прерывание...
в прерываании первой же командой - прямым обращением к регистру торможу таймер а потом его читаю и присваиваю пром переменную....
и что я вижу? снова....то 5 тактов то 24....12 нигде не видел...хотя именно это в одном проекте мне очень сильно точно нужно знать....ставил внешне приоритет повыше пониже....ничего...
у проца больше небыло заданных мною других прерывааний...!!!

я не спорю что я где-то чего-то не знаю..но...какой-то этот экземпляр армика очень уж странный...есть дма нет рамы...есть ЦРЦ но нет апаратноуправляемого контроллера передачи с контролем правильности приёма...просто генерит тот црц вдогонку...
я пока в раздумьях... заказал с техаса http://focus.ti.com/docs/prod/folders/p ... s2776.html таких камушков....посмотрим как они мне понравятцо...

П.С. я не спорю что очень мало чего знаю о армах...
я не спорю что они круче АТМЕГ
я рассуждаю как пользователь у которого с мегами все хорошо и что нужно - всё на них получается....но есть пара-тройка задачь в которых мега не справляется....впрочем арм текуущий - тоже... так что бум дальше изучать архитектуру ассортимент особенности и т.д.
единственное где арм пригодился бы - работа с экраном 128х64....но снова - мало рамы...64 кила вроде как достаточно ...а 8 чтото ну ни в какие ворота...
так что вот такое моё первое общение с представителями суровых армов....
Что нас не убило сделало нас осторожней
Не доверяйте русским лужам - это может быть вход в метро.
Аватара пользователя
Zheleznjakov
Нашел транзистор. Понюхал.
Сообщения: 190
Зарегистрирован: Сб июн 12, 2010 16:19:17
Откуда: Россия, Томск
Контактная информация:

Re: STM32F100RB@Keil VS AtMega8@CVAVR

Сообщение Zheleznjakov »

Спасибо за код.
Такой сральник в файлах у кейла всегда? (ни разу с кейлом не работал)
Не понимаю каким образом инициализация у вас занимает ОЗУ? (сильно к код не вдавался, очень не читабелен)
вероятно наклепали глобальных переменных, вот на вскидку ваш код
на 8 МГц, выполняется более 50 тысяч раз в секунду (точно только в понедельник, дома в наличии простой мультиметр - измерял частоту),
код 8,2 кб озу 244 байта (из них 200 байт стек)
большую часть кода занимает синус, без него кода всего 700 байт.
компилятор gcc, платка STM32VL-Discovery

Код: Выделить всё

/*
 * 	File:	main.c
 * 	Date:	2011-01-02
 */

#include "main.h"
#include <math.h>

#define MAX_Height 1
#define MAX_Width 8

#define MAX_X MAX_Width*5
#define MAX_Y MAX_Height*8

uint32_t Sinuses = 0;

unsigned char DispBuf[MAX_Height][MAX_X];

void dot(int x, int y, char mode)
{
	unsigned char tmp;
	unsigned char tmp1;

	char bitnum;

	while (x > MAX_X)
		x -= (MAX_X + 1);

	while (y > MAX_Y)
		y -= (MAX_Y + 1);

	while (x < 0)
		x += (MAX_X);

	while (y < 0)
		y += (MAX_Y);

	bitnum = y;
	tmp = DispBuf[0][x];
	tmp1 = 1 << bitnum;
	if (mode == 1)
	{
		tmp |= tmp1;
	}
	if (mode == 2)
	{
		tmp &= ~tmp1;
	}
	if (mode == 3)
	{
		tmp = ~(tmp & tmp1);
	}
	DispBuf[0][x] = tmp;
}

//-----------------------------------------------------------------------------
int main(void)
{
	float f1 = 0;
	float f2 = 0;
	float f3 = 0;
	float f4 = 0;
	float f5 = 0;
	int x = 0;
	int y = 0;

	PIN_CONFIGURATION(PIN_TEST);

	while (1)
	{
		PIN_ON(PIN_TEST);
		PIN_OFF(PIN_TEST);

		f1 = x;
		f1 = f1 / 23;
		f3 = f1;
		f4 = y;
		f4 = f4 / 23;
		f4 += f3;
		f5 = y;
		f5 = f5 / 230;
		f2 = sin(f4 * 0.95 / 2) * f5 + 4.0;
		f1 = f1 * 3;
		
		dot((int) f1, (int) f2, 1);

		Sinuses += 1;
	}

	return 0;
}
С уважением, Денис Железняков aka ZiB
Мой блог: http://ziblog.ru
clawham
Поставщик валерьянки для Кота
Сообщения: 1957
Зарегистрирован: Пт окт 31, 2008 09:38:55
Откуда: Одесса
Контактная информация:

Re: STM32F100RB@Keil VS AtMega8@CVAVR

Сообщение clawham »

эт не совсем весь мой код
эт раз
а потом - в кейле то мой первый проект по сути...я не знал что надо свои файлы ложить отдельно...

я тоже не знаю ка кно вот чистый проц моргающий по прерыванию от РТЦ лампочкой весит 9 килов!!!
низнаю как и почему!!!
мож я чо не так с кейлом делаю но...фАхт....

кстати ... где тут работа с экраном? вывод эначения?
а где инит прерываний, сами прерывания инит ножек и т.д.?
да и икса не инкрементируется... не проверяется условие перелета иксы....

али я чот нипанимаю?

интересно было бы получить табличку-распечатку того что передаётся в функцию...мож там сами расчеты не такие?

кстати проект под мегу 8-мь.... вот

П.С,
Вот отключил вывод на дисплей и инкремент икса
результат 105 тыщ на 56 мегагерцах
а если инкрементировать икса но не выводить на экран(не обновлять экран) то 21300 проходов по синусу при 56 мегагерцах
по поводу кода....мож я чего не понимаю -

Код: Выделить всё

Program Size: Code=15494 RO-data=634 RW-data=144 ZI-data=1696  
расшифруйте данную мессагу?
Вложения
43_bench.rar
тест на меге 8 под 8 мегагерц
(181.97 КБ) 296 скачиваний
Что нас не убило сделало нас осторожней
Не доверяйте русским лужам - это может быть вход в метро.
Аватара пользователя
Zheleznjakov
Нашел транзистор. Понюхал.
Сообщения: 190
Зарегистрирован: Сб июн 12, 2010 16:19:17
Откуда: Россия, Томск
Контактная информация:

Re: STM32F100RB@Keil VS AtMega8@CVAVR

Сообщение Zheleznjakov »

я сам новенький в этом деле, но делать сравнения мк по производиловке не очень просто,
для этого существуют специальные тесты.
и код тестовый код при этом не должен прерываться прерываниями, мне показалось оптимальным просто передергивать ножку, без всяких выводов на экран.
Повторяю с кейлом не работал, поэтому не знаю что такое ZI-data=1696
Code=15494 это код
RO-data=634 константы
RW-data=144 по всей видимости переменные в ОЗУ

в целом мк, довольно таки не плохие. младшие собраться stm8L так же не плохо обгоняют авр, особенно в плане потребления.

в плане кода что было то и вставил, то что было за комментировано не трогал, вроде ни чего не изменял.

мег уже не осталось все раздал, более не интересны, проверить не на чем. (хотя на работе мега64 есть, но не хочу проверять)
С уважением, Денис Железняков aka ZiB
Мой блог: http://ziblog.ru
clawham
Поставщик валерьянки для Кота
Сообщения: 1957
Зарегистрирован: Пт окт 31, 2008 09:38:55
Откуда: Одесса
Контактная информация:

Re: STM32F100RB@Keil VS AtMega8@CVAVR

Сообщение clawham »

а я не говорил о сравнении тотальном и гарантированно обьективном...
я говорю о конкретных применениях...
например строить синусы на килогерцах....делать расчеты/умножения по 4-м каналам PWM
меге не хватало скорости вообще...

этому тоже не особо хватает но....на 56 мегагерцах и детальной оптимизации должно хватить
а техасские 50-егагерцовники уверен что ещё раза в 2 можно газонуть - тем должно хватить точно....тем более что там рамы море можно флеш отключать и газовать гораздо больше...
Что нас не убило сделало нас осторожней
Не доверяйте русским лужам - это может быть вход в метро.
Аватара пользователя
Satyr
Друг Кота
Сообщения: 7439
Зарегистрирован: Чт ноя 04, 2010 01:56:36
Откуда: г. Москва

Re: STM32F100RB@Keil VS AtMega8@CVAVR

Сообщение Satyr »

clawham писал(а): не в 10 и не в 20 раз они быстрее...
Это смотря на чем и как писать. Ну умножении 32 бит чисел в 10 раз разница будет даже не в абсолюте, а на мегагерц.
вот и целесообразность....вопрос?
Целесообразно сначала хорошенько разобраться в архитектуре и в конкретных МК с их периферией и настройками.

Начиная от инициализации переферии и кончая количеством настроек компиляторов в АРМе все в разы богаче.
Аватара пользователя
Satyr
Друг Кота
Сообщения: 7439
Зарегистрирован: Чт ноя 04, 2010 01:56:36
Откуда: г. Москва

Re: STM32F100RB@Keil VS AtMega8@CVAVR

Сообщение Satyr »

clawham писал(а): рамы мало...много ног не 5в толерант....
конкретно ST'шные не помню, но в NXP и TI почти все ноги 5v толерантные.
рам в тех же ST до 128кб гдето есть столько в AVRах ? -)))
Корпуса плохо паябельные - так и AVRы с шагом ножек 0.8мм только tqfp32, дальше с тем же шагом но 0.5мм. где разница ?

Нагрузочная способность ног только у дубовых AVRов выше и уровень может быть около 5 вольт при 5В питании, но не так чтоб часто это было нужно.
Ответить

Вернуться в «ARM»