|
STM32F20X - что-то новое от ST |
|
|
|
Apr 12 2010, 16:04
|
Частый гость
 
Группа: Участник
Сообщений: 197
Регистрация: 8-04-05
Пользователь №: 3 977

|
То, что написано про ST32 в http://www.gaw.ru/html.cgi/txt/doc/micros/...x_arh/index.htmправда? "В приведенном выше коде выполняется передача 10 слов данных между двумя массивами в статическом ОЗУ: вначале с использованием ПДП, а затем с использованием только ЦПУ Cortex. В каждом из этих случаев, перед началом передачи запускается таймер и останавливается по завершении передачи. В данном примера блок ПДП выполняет передачу за 220 циклов, ЦПУ - за 536." То есть пересылка одного слова память-память через проц 54 такта а по ПДП 22 такта? И это при одной комманде за такт...
|
|
|
|
|
Apr 12 2010, 17:15
|

фанат дивана
     
Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684

|
Врут конечно  Код int arry_dest[20]; int arry_src[20];
void test() { RCC->APB1ENR |= RCC_APB1ENR_TIM2EN; TIM2->CR1 = 0; TIM2->CNT = 0; TIM2->CR1 = 1; for(int index = 0; index <10; index++) arry_dest[index] = arry_src[index]; TIM2->CR1 = 0; uart << "10 ints copied in " << TIM2->CNT << "cycles\r\n"; } У меня вышло 122-124 такта, и это без ПДП. ЗЫ. Правильный адрес обсуждаемой статьи: http://www.gaw.ru/html.cgi/txt/doc/micros/...x_arh/4_2_3.htm
--------------------
Если бы я знал, что такое электричество...
|
|
|
|
|
Apr 12 2010, 17:29
|
Частый гость
 
Группа: Участник
Сообщений: 197
Регистрация: 8-04-05
Пользователь №: 3 977

|
Что, в рекламной статье ошиблись в 5 раз с подсчетом тактов? И по ПДП будет 4 такта на слово?
Причина редактирования: Бездумное цитирование
|
|
|
|
|
Apr 12 2010, 21:02
|

Любитель
    
Группа: Свой
Сообщений: 1 864
Регистрация: 20-08-06
Из: Тольятти
Пользователь №: 19 695

|
Цитата(AHTOXA @ Apr 12 2010, 22:06)  Я ошибся вдвое, мой результат надо умножить на два, потому что таймер 2 сидит на APB1, а это вдвое медленнее. То есть, 244 такта. Таймеры TIM2 - TIM7 у STM32 имеют множитель (от х1 до х2) частоты APB1, поэтому не всё так однозначно. Если прескалер APB1 имеет значение, отличное от /2, то множитель таймеров будет равен х2. То есть если частота ядра = 72 МГц, а APB1, соответственно, 36 МГц, таймеры будут тактироваться также 72 мегагерцами. Цитата(zltigo @ Apr 13 2010, 00:14)  Это Вы STM32 код из RAM предлагаете? У него три шины. I-bus имеет доступ только к ROM. Обходной пути загрузки инструкций через S-bus есть, но торомозить должно хорошо. То есть выполнение кода из RAM будет тормознее, чем из флеш? Хм, всегда считал, что наоборот... Сейчас протестирую.
|
|
|
|
|
Apr 12 2010, 21:13
|

Гуру
     
Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244

|
Цитата(sonycman @ Apr 12 2010, 23:17)  То есть выполнение кода из RAM будет тормознее, чем из флеш? Для Cortex-M3 будут дополнительные тормоза. Вопрос в том, что перетянет - ws на Flash, или доступ зигзагом через System-bus. Цитата Хм, всегда считал, что наоборот... Для ARM7 c его нейманом да - за счет обычно более медленной Flash. Цитата Сейчас протестирую. Давайте.
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Apr 12 2010, 21:49
|

Любитель
    
Группа: Свой
Сообщений: 1 864
Регистрация: 20-08-06
Из: Тольятти
Пользователь №: 19 695

|
Цитата(aaarrr @ Apr 13 2010, 01:46)  Пробовал когда-то - получилось, что исполнение из RAM немного (единицы %%) медленнее. В общем, у меня получилось вот что. Исполнялся вот этот код: Код volatile int arry_dest[20]; volatile int arry_src[20];
TIM2->CR1 = TIM_CR1_CEN; for(int index = 0; index <10; index++) arry_dest[index] = arry_src[index]; TIM2->CR1 = 0; lcd.PrintText("tacts: %u", 0, 0, NO_FLAGS, RGB_BLUE, TIM2->CNT); после компиляции цикл выглядит так: Код ;;;47 TIM2->CR1 = TIM_CR1_CEN; MOVS r0,#1 LSLS r2,r0,#30 STRH r0,[r2,#0] ;;;48 for(int index = 0; index <10; index++) arry_dest[index] = arry_src[index]; LDR r1,|L4.56| MOVS r0,#0 SUB r3,r1,#0x50 |L4.16| LDR r4,[r1,r0,LSL #2] STR r4,[r3,r0,LSL #2] ADDS r0,r0,#1 CMP r0,#0xa BLT |L4.16| ;;;49 TIM2->CR1 = 0; MOVS r0,#0 STRH r0,[r2,#0] STM32F103RET6, ядро на 72 МГц, 2 такта ожидания для флеш: RAM - 116 тактов FLASH - 122 такта ядро на 24 МГц, 0 тактов ожидания флеш: RAM - 116 тактов FLASH - 75 тактов Ну, zltigo как обычно прав, озу проигрывает флехе на малой частоте. На большой - немного выигрывает.
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|