Ср дек 27, 2017 01:07:43
Ср дек 27, 2017 05:56:25
Однако, как я уже несколько раз говорил, мною на разных кодах были получены разные результаты. На одном форуме видел утверждение, что код из CCMRAM не выполняется на одних камнях, только как хранилище, а на других уже можно. Сам не знаю.AlphaLaiman писал(а):Скорость выполнения в порядке возрастания:
1. Из RAM
2. Из RAM с ремаппингом (примерно также, как и Flash, плюс-минус такт)
3. Из Flash
4. Из CCMRAM (но эта опция есть только в STM32F3хх и STM32F7xx)
У меня еще есть 030, можно еще и его попробовать будет, я его даже не распаковывал. Тут cortex-m0, шины проще. Согласно пикче у ядра нет отдельной шины ICode. Все идет через системную шину. Может вечером попробую, ожидаю на нем самый быстрый код из ОЗУ.Oxford писал(а):Дело в том что топикстартер тестировал F103
Ср дек 27, 2017 06:13:26
Ср дек 27, 2017 09:50:24
Ср дек 27, 2017 10:40:41
void foo(void)
{
volatile uint32_t a = -1;
while(1)
{
GPIOA->ODR^=1;//Инвертируем выход A0
uint8_t i=255;
uint32_t buf=0;
while(i--)
{
buf+=Mass[i];
}
a=buf;
}
};
Ср дек 27, 2017 10:47:04
Ср дек 27, 2017 10:49:24
Ср дек 27, 2017 11:04:01
Понятно что эти не те камни, на которых можно считать количество команд, чтобы точно дернуть ногой. Однако в этих изысканиях может быть и практическое значение. Существуют же математические очень затратные операции и почему бы не поразмышлять как можно их ускорить?dosikus писал(а):а к чему эти гонки ?
Думаю будет только еще не понятнее. . Каналов DMA не один, модулей DMA тоже может быть не один. У них свои приоритеты переназначаемые, и еще будут драться за шину(ы) между собой и ядром. Полнейший арбитраж одним словом.ARV писал(а):Вы еще этот массив при помощи DMA выводите куда-нибудь в порт, вот тогда и станет понятно, кто виноват и что делать.
Ср дек 27, 2017 11:08:39
Ср дек 27, 2017 11:09:44
Ср дек 27, 2017 11:52:47
Ср дек 27, 2017 12:23:29
Что это?Reflector писал(а):1WS
специфичный он или нет, не столь важно. Сам факт, что скорость выполнения там или там оказывается вещь не очень определенная. При том что, самый первый раз я сравнивал дизассеблерный код и он был идентичный для обоих расположений кода. В других разах тоже стоило так сделать конечно, но крайне лень.Reflector писал(а):И пример достаточно специфичный, в цикле складываются данные и все, а я проверял на реальных приложениях и там всегда флеш был быстрее...
Ср дек 27, 2017 12:44:54
Ср дек 27, 2017 13:07:59
Ср дек 27, 2017 17:49:17
Чт дек 28, 2017 14:58:40
Oxford писал(а):Попробуй обьявить
Чт дек 28, 2017 16:16:18
Чт дек 28, 2017 17:28:41
foo:
080006c9: push {r4, r5}
080006cb: ldr r0, [pc, #36] ; (0x80006f0 <foo+40>)
080006cd: ldr r5, [pc, #36] ; (0x80006f4 <foo+44>)
57 GPIOA->ODR^=1;//Инвертируем выход A0
080006ce: ldr r4, [pc, #40] ; (0x80006f8 <foo+48>)
080006d0: ldr r2, [r4, #12]
62 while(i--)
080006d2: movs r3, #254 ; 0xfe
57 GPIOA->ODR^=1;//Инвертируем выход A0
080006d4: eor.w r2, r2, #1
080006d8: str r2, [r4, #12]
60 uint32_t buf=0;
080006da: movs r2, #0
64 buf+=Mass[i];
080006dc: ldr.w r1, [r0, r3, lsl #2]
62 while(i--)
080006e0: subs r3, #1
080006e2: uxtb r3, r3
080006e4: cmp r3, #255 ; 0xff
64 buf+=Mass[i];
080006e6: add r2, r1
62 while(i--)
080006e8: bne.n 0x80006dc <foo+20>
66 a=buf;
080006ea: str r2, [r5, #0]
67 }
080006ec: b.n 0x80006d0 <foo+8>
foo:
080006c9: push {r4}
080006cb: ldr r0, [pc, #32] ; (0x80006ec <foo+36>)
080006cd: ldr r4, [pc, #32] ; (0x80006f0 <foo+40>)
080006cf: ldr r2, [r4, #12]
080006d1: movs r3, #254 ; 0xfe
080006d3: eor.w r2, r2, #1
080006d7: str r2, [r4, #12]
080006d9: movs r2, #0
080006db: ldr.w r1, [r0, r3, lsl #2]
080006df: subs r3, #1
080006e1: uxtb r3, r3
080006e3: cmp r3, #255 ; 0xff
080006e5: add r2, r1
080006e7: bne.n 0x80006da <foo+18>
080006e9: mov r12, r2
080006eb: b.n 0x80006ce <foo+6>
foo:
20000000: push {r4}
20000002: ldr r0, [pc, #32] ; (0x20000024 <foo+36>)
20000004: ldr r4, [pc, #32] ; (0x20000028 <foo+40>)
20000006: ldr r2, [r4, #12]
20000008: movs r3, #254 ; 0xfe
2000000a: eor.w r2, r2, #1
2000000e: str r2, [r4, #12]
20000010: movs r2, #0
20000012: ldr.w r1, [r0, r3, lsl #2]
20000016: subs r3, #1
20000018: uxtb r3, r3
2000001a: cmp r3, #255 ; 0xff
2000001c: add r2, r1
2000001e: bne.n 0x20000012 <foo+18>
20000020: mov r12, r2
20000022: b.n 0x20000006 <foo+6>
foo:
20000000: push {r4, r5}
20000002: ldr r0, [pc, #36] ; (0x20000028 <foo+40>)
20000004: ldr r5, [pc, #36] ; (0x2000002c <foo+44>)
20000006: ldr r4, [pc, #40] ; (0x20000030 <foo+48>)
20000008: ldr r2, [r4, #12]
2000000a: movs r3, #254 ; 0xfe
2000000c: eor.w r2, r2, #1
20000010: str r2, [r4, #12]
20000012: movs r2, #0
20000014: ldr.w r1, [r0, r3, lsl #2]
20000018: subs r3, #1
2000001a: uxtb r3, r3
2000001c: cmp r3, #255 ; 0xff
2000001e: add r2, r1
20000020: bne.n 0x20000014 <foo+20>
20000022: str r2, [r5, #0]
20000024: b.n 0x20000008 <foo+8>
Чт дек 28, 2017 18:05:32
Чт дек 28, 2017 18:07:08