|
По скорости ядра STR912, восемь операторов на ассемблере за 1.6мкс?!! |
|
|
|
Jun 13 2007, 15:47
|
Знающий
   
Группа: Свой
Сообщений: 995
Регистрация: 3-06-05
Пользователь №: 5 713

|
Есть main(), фактически из одного бесконечного цикла для проверки производительности ядра STR912FW44. Среда - IAR4.40:
u8 TMP0 = 0;
while(1) { if (Tick == 0) { GPIO_WriteBit(GPIO0, GPIO_Pin_0, Bit_RESET); Tick = 1; } else { GPIO_WriteBit(GPIO0, GPIO_Pin_0, Bit_SET); Tick = 0; } }
Время выполнения 1,6мкс. Ядро тактируется 96MHz через PLL. Память flash конфигурируется с двумя тактами ожиданмия и тактируется 48MHz
//FMI Waite States FMI_Config(FMI_READ_WAIT_STATE_2, FMI_WRITE_WAIT_STATE_0, FMI_PWD_ENABLE,\ FMI_LVD_ENABLE, FMI_FREQ_HIGH);
В симуляторе при выключенной оптимизации по скорости все действия занимают 8-мь ассемблерных команд. С учетом медленного доступа к внутренней flash (не более 24MHz) на выполнение должно уйти не более 320ns. Измеренное значение почти в пять раз больше. Где может теряеться вычислительный ресурс?
|
|
|
|
|
 |
Ответов
|
Jun 14 2007, 08:05
|
Знающий
   
Группа: Свой
Сообщений: 995
Регистрация: 3-06-05
Пользователь №: 5 713

|
Цитата(etoja @ Jun 14 2007, 06:59)  Биты ввода-вывода не могут переключаться с большой частотой. На них и теряется быстродействие. Все задействованные блоки GPIO тактируются частотой 1/2 master-clock (RCLKDIV = 1): SCU_PCLKDivisorConfig(SCU_PCLK_Div2); SCU_APBPeriphClockConfig(__GPIOx, ENABLE); GPIO_DeInit(GPIOx);
|
|
|
|
|
Jun 14 2007, 09:53
|
Знающий
   
Группа: Validating
Сообщений: 838
Регистрация: 31-01-05
Пользователь №: 2 317

|
Цитата(HardJoker @ Jun 14 2007, 12:05)  Все задействованные блоки GPIO тактируются частотой 1/2 master-clock (RCLKDIV = 1):
SCU_PCLKDivisorConfig(SCU_PCLK_Div2);
SCU_APBPeriphClockConfig(__GPIOx, ENABLE); GPIO_DeInit(GPIOx); Это ничего не значит !, тактироваться может чем угодно, а дергает всеравно медленно ! Если хотите измерять производительность с помощью ног, делается это так, пишется функция которая выполняет скажем 100 милионов нопов, перед входом устанавливете ногу после выхода опускаете, после чего врямя делите на 100 милионов и получите более мене точный результат, чем больше цикл, тем меньше сказывается тормознутость ног на измерение и следовательно более точный результат имеете.
|
|
|
|
Сообщений в этой теме
HardJoker По скорости ядра STR912 Jun 13 2007, 15:47   HardJoker Цитата(MALLOY2 @ Jun 14 2007, 13:53) Это ... Jun 14 2007, 10:55 MALLOY2 Так зачем тогда такой умный код ?
Почему бы не т... Jun 14 2007, 10:36 MALLOY2 ЦитатаУвы, интересует именно выполнение короткой п... Jun 14 2007, 11:02 HardJoker Цитата(MALLOY2 @ Jun 14 2007, 15:02) Это ... Jun 14 2007, 11:39 MALLOY2 Конвеер это начало начал, благадаря ему повышается... Jun 14 2007, 11:48 HardJoker Цитата(MALLOY2 @ Jun 14 2007, 15:48) Конв... Jun 14 2007, 12:01 MALLOY2 Разве такое возможно ? невстречал ниодного ядра с ... Jun 14 2007, 12:11 HardJoker Цитата(MALLOY2 @ Jun 14 2007, 16:11) Разв... Jun 14 2007, 12:15 bzx Цитата(MALLOY2 @ Jun 14 2007, 16:11) Разв... Jun 15 2007, 05:15 AlexandrY Ну сперва убедитесь, что у вас выставлены все наст... Jun 14 2007, 16:28 HardJoker Цитата(AlexandrY @ Jun 14 2007, 20:28) Ну... Jun 14 2007, 18:20  AlexandrY Вот здесь найдете проекты для разных компиляторов ... Jun 14 2007, 20:35 MALLOY2 ЦитатаКонвейер в STR91x - это не атрибут ядра, а п... Jun 18 2007, 08:15 AlexandrY По моему из контекта обсуждения достаточно ясно, ч... Jun 18 2007, 19:41  HardJoker Цитата(AlexandrY @ Jun 18 2007, 23:41) По... Jun 19 2007, 07:21   AlexandrY Вот обработчик с разрешением вложенных прерываний.... Jun 21 2007, 13:32 KonstantinT Ну и мои 5 коп, сравнивал Гертцеля из флеша и ОЗУ ... Jun 18 2007, 19:20 MALLOY2 ЦитатаКонвеер самого ARM-а мало кому интересен
П... Jun 19 2007, 08:57
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|