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

 
 
7 страниц V  « < 5 6 7  
Reply to this topicStart new topic
> STM32F407 + прерывание + время реакции, Меняется время реакции на внешнее событие
aaarrr
сообщение Sep 11 2015, 10:22
Сообщение #91


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(GetSmart @ Sep 11 2015, 02:41) *
Подскажите пожалуйста название документа, в котором описаны такие нюансы растактовки.

Cortex-M3 Technical Reference Manual, раздел Load-store timings. У M0, полагаю, такой особенности (pipelined LDR) нет.
Go to the top of the page
 
+Quote Post
GetSmart
сообщение Sep 11 2015, 14:26
Сообщение #92


.
******

Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753



Цитата(aaarrr @ Sep 11 2015, 14:22) *
Cortex-M3 Technical Reference Manual, раздел Load-store timings. У M0, полагаю, такой особенности (pipelined LDR) нет.

Другие зависимости (как минимум из мной озвученных) у М3 и М0 Вам известны?

Методом тыка я нашёл кое-что, увеличивающее на такт следующую команду. Настолько неочевидное, что сперва хочется узнать все описанные зависимости М0/М3. На ранее обозначенной таблице таймингов и на этой для М3 она не указана.

Сообщение отредактировал GetSmart - Sep 11 2015, 14:33


--------------------
Заблуждаться - Ваше законное право :-)
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Sep 11 2015, 14:54
Сообщение #93


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(GetSmart @ Sep 11 2015, 17:26) *
Другие зависимости (как минимум из мной озвученных) у М3 и М0 Вам известны?

Нет, не известны.

Поделитесь наблюдениями, это интересно.
Go to the top of the page
 
+Quote Post
GetSmart
сообщение Sep 21 2015, 12:25
Сообщение #94


.
******

Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753



Время до сих пор не нашёл для полноценного тестирования на разных камнях. По результатам отпишусь. Заметил на М0. Думал зависимость от предыдущей инструкции, но оказалась зависимость другая. Для чистоты эксперимента остальные подробности потом.


--------------------
Заблуждаться - Ваше законное право :-)
Go to the top of the page
 
+Quote Post
ШСА
сообщение Sep 23 2015, 19:32
Сообщение #95


Местный
***

Группа: Участник
Сообщений: 291
Регистрация: 11-04-14
Из: Саратов
Пользователь №: 81 335



Цитата(GetSmart @ Sep 21 2015, 15:25) *
Время до сих пор не нашёл для полноценного тестирования на разных камнях...


А не проще ли просто описать ситуацию, в которой происходит непонятка? Тестировать, как и "ловить блох", можно бесконечно. Мне же, как и другим, я думаю, интересен практический опыт.
Go to the top of the page
 
+Quote Post
GetSmart
сообщение Sep 23 2015, 19:39
Сообщение #96


.
******

Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753



Цитата(ШСА @ Sep 23 2015, 23:32) *
Тестировать, как и "ловить блох", можно бесконечно.

На одном камне всё протестировано. Джиттера нет. Так что если Ваша программа работает, то нервничать не о чем. Программирование с точностью до такта интересует только "параноиков", которые не спешат.


--------------------
Заблуждаться - Ваше законное право :-)
Go to the top of the page
 
+Quote Post
GetSmart
сообщение Oct 25 2015, 08:54
Сообщение #97


.
******

Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753



Потестил на LPC4357 и LPC11U37/501. У обоих ядра M0 r0p0. Эффект наблюдается на обоих. У LPC11U37 есть три региона SRAM доступных для исполнения кода и хранения данных. У LPC4357 ещё больше регионов. Если команда STR/STM находится на нечётном адресе (маска 0x02) и адрес записи нах-ся в этом же регионе SRAM, то команда будет исполняться на такт дольше. Для STM добавочный только 1 такт независимо от кол-ва сохраняемых регистров. Отличие у LPC4357 есть в том, что хоть регион 0x20000000..0x2000ffff разбит ещё на 4 региона по 16 КБ и общение с разными этими регионами разных ядер не вызывает тормозов друг друга, но в описываемом выше эффекте весь этот регион для M0 как буд-то один и исполнение кода из допустим 0x200000000 с записью в регион 0x20008000 будет вызывать 1 такт тормозов.

У процессоров с одним регионом SRAM эффект должен наблюдаться всегда.


--------------------
Заблуждаться - Ваше законное право :-)
Go to the top of the page
 
+Quote Post
GetSmart
сообщение Oct 26 2015, 11:57
Сообщение #98


.
******

Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753



Цитата(GetSmart @ Oct 25 2015, 12:54) *
У процессоров с одним регионом SRAM эффект должен наблюдаться всегда.

Ессно при исполнении кода из SRAM. Именно так в LPC111x. Этим способом можно было бы косвенно проверять внутреннее разделение рамы на регионы в одноядерных процессорах. Если адресные линии не отключены в логике, как в LPC43xx, у которого, по моему предположению, из-за наличия цельного 40 КБ региона SRAM пришлось отключить линии A14 и A15 при сравнении в M0-ядре адресов кода и данных.

Серьёзный недостаток "эффекта" в том, что он зависит от того, на какой адрес попадает инструкция и даже лёгкие изменения в коде будут менять растактовку отлаженного кода, если регионы кода и данных общие.

Сообщение отредактировал GetSmart - Oct 27 2015, 03:49


--------------------
Заблуждаться - Ваше законное право :-)
Go to the top of the page
 
+Quote Post
GetSmart
сообщение Oct 29 2015, 19:20
Сообщение #99


.
******

Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753



Проверил ещё на LPC1227 (M0+ r0p0). Этого эффекта нет. Странно, что по CPUID ядра не отличить M0 от M0+.

Цитата
...из-за наличия цельного 40 КБ региона SRAM...

Вторая возможная причина в отсутствии пустот в регионе адресов 0x2000xxxx LPC43xx.


--------------------
Заблуждаться - Ваше законное право :-)
Go to the top of the page
 
+Quote Post
GetSmart
сообщение Nov 5 2015, 17:22
Сообщение #100


.
******

Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753



Цитата(GetSmart @ Oct 29 2015, 23:20) *
Проверил ещё на LPC1227 (M0+ r0p0). Этого эффекта нет. Странно, что по CPUID ядра не отличить M0 от M0+.

Ошибся. LPC1227 это M0 без плюса. Так что CPUID корректный. Но растактовка STR/STM у него отличается от остальных M0 камней NXP. Отличий растактовки LPC1227 от "официальной" ARM пока не нашёл.

Цитата(aaarrr)
Cortex-M3 Technical Reference Manual, раздел Load-store timings. У M0, полагаю, такой особенности (pipelined LDR) нет.

В юзер мануале LPC43xx указано, что pipelined есть и у LDR и у STR.
На бумаге распечатал на всякий случай.

Сообщение отредактировал GetSmart - Nov 5 2015, 19:57


--------------------
Заблуждаться - Ваше законное право :-)
Go to the top of the page
 
+Quote Post
GetSmart
сообщение Dec 26 2015, 17:20
Сообщение #101


.
******

Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753



Вот что нашёл
Код
ARM Cortex-M3 Processor
Revision: r2p1
Technical Reference Manual

Neighboring load and store single instructions can pipeline their address and data phases. This enables these instructions to complete in a single execution cycle.


ARM Cortex-M4 Processor
Revision: r0p1
Technical Reference Manual

Neighboring load and store single instructions can pipeline their address and data phases but in some cases, such as 32-bit opcodes aligned on odd halfword boundaries, they might not pipeline optimally.


Оказывается у М3 и М4 разная растактовка LDR/STR. У М4 ARM-ом заложено что-то немного похожее на обозначенную мной особенность большинства М0-процов производителя NXP. Чья это фича - ещё туманней стало.


--------------------
Заблуждаться - Ваше законное право :-)
Go to the top of the page
 
+Quote Post

7 страниц V  « < 5 6 7
Reply to this topicStart new topic
3 чел. читают эту тему (гостей: 3, скрытых пользователей: 0)
Пользователей: 0

 


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


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