vgovseychuk 0 23 октября, 2015 Опубликовано 23 октября, 2015 · Жалоба Добрый день, господа! Кто-нибудь в курсе скорости работы/занимаемого в памяти места функции memcpy()? Есть ли какие-то условия ее оптимального применения? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 184 23 октября, 2015 Опубликовано 23 октября, 2015 · Жалоба Кто-нибудь в курсе скорости работы/занимаемого в памяти места функции memcpy()? Открываете окошко "Дизассемблер" отладчика и тоже становитесь в курсе Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AlexandrY 3 23 октября, 2015 Опубликовано 23 октября, 2015 · Жалоба Добрый день, господа! Кто-нибудь в курсе скорости работы/занимаемого в памяти места функции memcpy()? Есть ли какие-то условия ее оптимального применения? Конечно. Это важнейшая функция в realtime приложениях. Ее в первую очередь тестируют когда надо делать что-либо быстро. Я публиковал несколько исследований, но они уже не актуальны. Для каждой новой архитектуры и компилятора их надо повторять заново. Для Cortex-M с кэшем на FLASH можно только сказать, что имеет значение выравнивание размещения функции memcpy в памяти и имеет значение выравнивание самих копируемых данных. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_Pasha 0 23 октября, 2015 Опубликовано 23 октября, 2015 · Жалоба или использовать DMA highest priority Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ukpyr 0 23 октября, 2015 Опубликовано 23 октября, 2015 · Жалоба занимает много. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AlexandrY 3 23 октября, 2015 Опубликовано 23 октября, 2015 · Жалоба или использовать DMA highest priority DMA медленней. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zltigo 0 23 октября, 2015 Опубликовано 23 октября, 2015 · Жалоба DMA медленней. Или нет. Зависит от тактировки контролера DMA и на каких шинах и банках что там в конкретном контроллере висит и пересылается. Ну и опять-же, процессор в той или иной степени может заниматься чем-то более полезным, пока DMA работает. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
megajohn 3 13 ноября, 2015 Опубликовано 13 ноября, 2015 · Жалоба Есть ли какие-то условия ее оптимального применения? оптимальное применение если разница между адресами кратна на 4. Похуже если 2. Если 1 то самая низкая производительность. исходник теста #define BUFF_SIZE 0x1000 #define OFFS_QNTY 16 uint8_t src_buff[ BUFF_SIZE + OFFS_QNTY ]; uint8_t dst_buff[ BUFF_SIZE + OFFS_QNTY ]; uint32_t results[OFFS_QNTY][OFFS_QNTY]; void memcpy_test() { uint8_t src_offset, dst_offset; uint32_t ticks_start, ticks_stop; CoreDebug->DEMCR |= 0x01000000; DWT->CYCCNT = 0; DWT->CTRL = 1; for( src_offset = 0; src_offset < OFFS_QNTY; src_offset++ ) for( dst_offset = 0; dst_offset < OFFS_QNTY; dst_offset++ ) { ticks_start = DWT->CYCCNT; memcpy( &dst_buff[ dst_offset ], &src_buff[ src_offset ], BUFF_SIZE ); ticks_stop = DWT->CYCCNT; results[ src_offset ][ dst_offset ] = ticks_stop - ticks_start; } } ниже картинка отсортированных результатов этого теста копирование из RAM в RAM размером 0x1000 ( 4кб ) результат в тиках процессора, то есть 3300/4196=0,8такта на байт оптимизация практически не влияет для теста применялся LPC1778 на основе CM3 result.rar Кто-нибудь в курсе скорости работы/занимаемого в памяти места функции memcpy()? в IAR ARM7.3 занимает 116 байт ( ABImemcpy_unaligned.o ro code=118 ) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться