реклама на сайте
подробности

 
 
> На что бы перейти..., В плане платформы
Arlleex
сообщение Mar 22 2018, 16:13
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 492
Регистрация: 12-11-11
Пользователь №: 68 264



С практикой работы с STM32 у меня пополняется чаша больше ненависти к этим камням, нежели положительных эмоций.
Вот элементарно - есть АЦП внешний, управляется через SPI, CS-ом дергать обязательно. В STM32 CS не дергается аппаратно при транзакциях SPI, не понимаю, почему эти говноразработчики из STMicroelectronics не могут сделать это уже в какой реализации своих линеек микроконтроллеров? Из-за такого намеренного "косяка", который они вроде как и не пытаются исправить, невозможно запустить DMA на этот SPI, приходится запускать чертов таймер, дергать лапой в прерывании и там же запускать транзакцию (одиночную), потом снова выжидать нужное время и поднимать CS обратно, формируя нужные длительности между CS и первым/последним клоком SCLK... Помню в AT91SAM7X512 (и младших по памяти моделях) была возможность не то что аппаратно лапкой CS дергать, так даже время задавалось в количествах тактов вот этих самых задержек. А тут фигу.
С ходу даже не придумал как аппаратным таймером ножку аппаратно дергать так, чтобы еще после опускания CS выжидалось время небольшое и затем осуществлялась транзакция по SPI без прерываний, по DMA , например. И, чувствую, такой возможности тупо нет. Хотя, казалось бы, банальная вещь - что сложного было реализовать полностью аппаратный CS? Урезали половину функциональности DMA<->SPI...
И вот знаете, косяков все больше и больше обнаруживается с каждым детальным разбором.
Какие камни наиболее гибкие в этом плане? ПЛИС не в расчет, знаю что там проще сделать такое и т.д. но интересует возня именно с Cortex-M профиля. Раньше немного работал с ARM7TDMI, но это уже устаревший камень, Cortex-ы для меня более привлекательны, хотелось бы что-то действительно с хорошей периферией. Прокомментируйте, пожалуйста.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Arlleex
сообщение May 7 2018, 19:56
Сообщение #2


Местный
***

Группа: Участник
Сообщений: 492
Регистрация: 12-11-11
Пользователь №: 68 264



Итак, ради интереса сделал тест.
Использую аппаратный регистр CYCCNT для подсчета реального количества тактов, затрачиваемых на исполнение кода.
Предварительно процессор настраивается на 180МГц, количество тактов процессора, затрачиваемое на чтение 128 бит из Flash - 6 циклов (5WS).
Код теста:
Код
        AREA MY_PROGRAM, CODE, READONLY
        
        ENTRY
        
MyProg    PROC
        
        EXPORT Main
        
DWT_CYCCNT    EQU    0xE0001004
DWT_CONTROL    EQU    0xE0001000
SCB_DEMCR    EQU    0xE000EDFC

Main
        ldr r0, =SCB_DEMCR
        mov r1, #0x01000000
        str r1, [r0]
        
        ldr r0, =DWT_CONTROL
        ldr r1, [r0]
        mov r2, #0x1
        orr r1, r2
        str r1, [r0]
        
        ldr r0, =DWT_CYCCNT
        mov r1, #0x0

        b loop
        
        LTORG

loop
        str.w r1, [r0]
        
        mul.w r3, r4, r5
    ; ...
    ; ТЫСЯЧА ТАКИХ ИНСТРУКЦИЙ
    ; ...
        mul.w r3, r4, r5
        
        ldr.w r2, [r0]
        
        b.w loop
        
        ENDP

        END

Инструкции как раз подобраны наихудшие: 1 такт исполнение, 32-разрядные из набора Thumb-2.

1. Отключаю кэш инструкций и данных, отключаю prefetch-buffer выборки.
2. Запускаю код на исполнение под отладчиком без точек останова.
3. Пока код выполняется, ставлю точку останова на строку
Код
b.w loop

и смотрю содержимое регистра R2 (считанное значение в 180МГц тактах): 0x8CB = 2251.
4. Время математики: 1000 однотактных 32-разрядных команд, 1000/4=250 циклов обращения к Flash-памяти по 128 бит. С учетом того, что WS=5, 5*250=1250 тактов накладных расходов на ожидание доступа к данным. Прибавляем такты выполнения команд: 1250 + 1000 = 2250. Что на 1 такт меньше считанного показания с системного регистра. Двигаемся дальше.
5. Включаем prefetch-buffer выборки и повторяем шаги 2-3. Содержимое CYCCNT = 1501.
6. Выключаем prefetch-buffer, включаем кэш. Содержимое CYCCNT = 2250. По-моему логично, поскольку в кэше хранятся адреса команд начала последних использованных подпрограмм и веток кода, а не сам код (в документации вроде про это написано).
7. Включаем prefetch-buffer и кэш. Содержимое CYCCNT = 1501.

Как видно, при включенном буфере предвыборки будет потеря производительности, однако если в коде будут использованы не только 32-разрядные инструкции Thumb-2, а 16-разрядные, скорее всего количество тактов совпадет с количеством инструкций между метками замера. Замерил - CYCCNT = 1001.
Отключаю prefetch - CYCCNT = 1251. Интересно, почему сейчас 1251, ведь 8 однотактных инструкций перекрывают 5WS при доступе к Flash... Это пока под вопросом, я разберусь.

Собственно говоря, этих сведений мне достаточно, чтобы полагать, что большого толку от широкой шины на Tiva-C не будет. Она сделана точно для таких же целей, для каких и ART-ускоритель в STM32 - обеспечить нулевое состояние задержки при выполнении смешанного (32-разрядного и 16-разрядного) кодов Thumb и Thumb-2.
Если сравнивать производительность выполнения 32-битного кода Thumb-2 STM32, работающего на частоте, допустим, 150МГц, над производительностью Tiva-C, работающего на 120МГц при выполнении того же 32-битного кода, то плюс широкой шине - бесспорно предвыборка 8 команд лучше чем предвыборка 4. Однако на реальной практике код представляет из себя смесь 16- и 32-разрядных инструкций, поэтому подобный метод расчета производительности не годится, нужны данные CoreMark или Dhrystone.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Arlleex   На что бы перейти...   Mar 22 2018, 16:13
- - _pv   а таймер разве не может дёргать по совпадению и CS...   Mar 22 2018, 16:30
- - jcxz   Цитата(Arlleex @ Mar 22 2018, 18:13) Вот ...   Mar 22 2018, 16:52
- - Arlleex   Цитата(_pv @ Mar 22 2018, 19:30) а таймер...   Mar 22 2018, 16:55
|- - jcxz   Цитата(Arlleex @ Mar 22 2018, 18:55) Пожа...   Mar 22 2018, 17:03
|- - twix   Цитата(Arlleex @ Mar 22 2018, 17:55) Види...   Mar 22 2018, 18:00
|- - _pv   Цитата(Arlleex @ Mar 22 2018, 22:55) Атме...   Mar 22 2018, 19:27
- - Arlleex   jcxz, как раз листаю референс на XMC4800. Общее вп...   Mar 22 2018, 17:23
|- - inventor   Цитата(Arlleex @ Mar 22 2018, 20:23) jcxz...   Apr 7 2018, 14:55
- - yes   > В STM32 CS не дергается аппаратно при транзак...   Mar 22 2018, 18:35
- - technik-1017   Как альтернативу STM32 рассматриваю чипы SmartFusi...   Mar 22 2018, 19:17
- - skripach   LPC54 CSами умеет дергать невероятно, с настраивае...   Mar 23 2018, 01:51
- - Arlleex   Цитата(twix @ Mar 22 2018, 21:00) Вы може...   Mar 23 2018, 13:54
|- - jcxz   Цитата(Arlleex @ Mar 23 2018, 15:54) 10МБ...   Mar 23 2018, 15:49
- - adnega   Цитата(Arlleex @ Mar 22 2018, 19:13) нево...   Mar 24 2018, 07:21
|- - dac   QUOTE (adnega @ Mar 24 2018, 13:21) 2. В ...   Mar 24 2018, 07:52
|- - adnega   Цитата(dac @ Mar 24 2018, 10:52) приходит...   Mar 24 2018, 08:11
||- - dac   QUOTE (adnega @ Mar 24 2018, 14:11) 1мкс ...   Mar 24 2018, 08:54
|- - _pv   Цитата(dac @ Mar 24 2018, 14:52) а еще из...   Mar 24 2018, 08:34
|- - jcxz   Цитата(dac @ Mar 24 2018, 09:52) а еще из...   Mar 24 2018, 10:21
|- - adnega   Цитата(jcxz @ Mar 24 2018, 13:21) на STM3...   Mar 24 2018, 13:25
- - Arlleex   Да вот элементарный пример, решение которого полно...   Mar 24 2018, 17:02
|- - adnega   Цитата(Arlleex @ Mar 24 2018, 20:02) DMA ...   Mar 24 2018, 17:16
- - Andrew Su   Добрый день. На отладочнике STM32L476-disco провер...   Mar 25 2018, 11:36
- - backa   TI "TM4C1294" - дорого и сердито - SPI р...   Apr 24 2018, 20:31
|- - k155la3   Цитата(backa @ Apr 24 2018, 23:31) TI ...   Apr 26 2018, 13:38
|- - backa   Цитата(k155la3 @ Apr 26 2018, 17:38) Нечт...   Apr 26 2018, 23:16
|- - k155la3   Цитата(backa @ Apr 27 2018, 02:16) . . . ...   Apr 27 2018, 16:09
|- - jcxz   Цитата(k155la3 @ Apr 27 2018, 19:09) IAR,...   Apr 28 2018, 05:45
|- - k155la3   Цитата(jcxz @ Apr 28 2018, 08:45) О каких...   Apr 28 2018, 13:09
- - AlexandrY   Цитата(Arlleex @ Mar 22 2018, 19:13) Каки...   Apr 28 2018, 07:58
|- - ViKo   Цитата(AlexandrY @ Apr 28 2018, 10:58) Во...   Apr 28 2018, 08:55
|- - jcxz   Цитата(ViKo @ Apr 28 2018, 11:55) Без флэ...   Apr 28 2018, 09:52
|- - AlexandrY   Цитата(ViKo @ Apr 28 2018, 11:55) Без флэ...   Apr 28 2018, 10:48
- - segment   А что за "Wireless connectivity interface for...   Apr 28 2018, 12:00
|- - AlexandrY   Цитата(segment @ Apr 28 2018, 15:00) А чт...   Apr 28 2018, 14:02
|- - k155la3   Цитата(AlexandrY @ Apr 28 2018, 17:02) . ...   Apr 28 2018, 18:04
|- - adnega   Цитата(k155la3 @ Apr 28 2018, 21:04) У ST...   Apr 28 2018, 18:59
|- - k155la3   Цитата(adnega @ Apr 28 2018, 21:59) Может...   Apr 28 2018, 19:23
|- - adnega   Цитата(k155la3 @ Apr 28 2018, 22:23) А ес...   Apr 29 2018, 05:45
|- - k155la3   Цитата(adnega @ Apr 29 2018, 08:45) Т.е. ...   Apr 29 2018, 10:46
- - Arlleex   За документацию с кучей перекрестных ссылок можно ...   May 6 2018, 08:20
|- - AlexandrY   Цитата(Arlleex @ May 6 2018, 11:20) За до...   May 6 2018, 12:05
|- - jcxz   Цитата(AlexandrY @ May 6 2018, 15:05) Сек...   May 6 2018, 15:39
- - Arlleex   Тогда действительно что-то с ним точно не так Ко...   May 6 2018, 15:06
- - Arlleex   ЦитатаНу "в каком-то из STM32" максимум ...   May 6 2018, 16:29
|- - jcxz   Цитата(Arlleex @ May 6 2018, 19:29) 3. В ...   May 6 2018, 17:04
- - Arlleex   ЦитатаВы внимательнее прочитайте, что я написал: п...   May 6 2018, 17:34
|- - jcxz   Цитата(Arlleex @ May 6 2018, 20:34) Между...   May 6 2018, 20:16
- - Arlleex   Да уж, я думал я один изворачиваюсь с периферией к...   May 6 2018, 21:09
|- - jcxz   Цитата(Arlleex @ May 7 2018, 22:56) 7. Вк...   May 9 2018, 05:06
- - COMA   Я для себя определил два варианта для перехода: се...   May 9 2018, 05:58
- - Arlleex   ЦитатаТолько зачем было делать столько телодвижени...   May 9 2018, 13:03
- - Arlleex   Итак, выложу сюда две растактовки из экспериментов...   May 9 2018, 15:26
|- - jcxz   Цитата(Arlleex @ May 9 2018, 18:26) Итак,...   May 9 2018, 15:48
- - Arlleex   Никакого абсолютно. У меня в проектах он всегда вк...   May 9 2018, 15:54
- - Arlleex   Подниму свою же тему. 1. Программировал платку с X...   Jul 6 2018, 05:17
|- - jcxz   Цитата(Arlleex @ Jul 6 2018, 08:17) 1. Пр...   Jul 6 2018, 08:05
|- - Arlleex   Цитата(jcxz @ Jul 6 2018, 12:05) PS: Ну и...   Jul 6 2018, 08:25
|- - jcxz   Цитата(Arlleex @ Jul 6 2018, 11:25) А впе...   Jul 6 2018, 08:30
|- - Arlleex   Цитата(jcxz @ Jul 6 2018, 12:30) Да, чере...   Jul 6 2018, 08:35
|- - jcxz   Цитата(Arlleex @ Jul 6 2018, 11:35) Вы ис...   Jul 6 2018, 08:36
- - Arlleex   Боюсь мне начальство не выделит времени на такие п...   Jul 6 2018, 09:07
- - jcxz   Цитата(Arlleex @ Jul 6 2018, 12:07) Боюсь...   Jul 6 2018, 09:50
- - Arlleex   Цитата(jcxz @ Jul 6 2018, 13:50) Начальст...   Jul 6 2018, 10:04


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 29th July 2025 - 00:28
Рейтинг@Mail.ru


Страница сгенерированна за 0.01925 секунд с 7
ELECTRONIX ©2004-2016