Кто любит RISC в жизни, заходим, не стесняемся.
Ответить

Re: Flash vs SRAM

Пт дек 29, 2017 14:58:34

Oxford писал(а):Дело в том что ICODE шина подключена к флешу, а DCODE к ОЗУ. Инструкции быстрее идут из флеш, а данные из ОЗУ.
Самый первый пост и самая первая ссылка. Там тест опровергает и это утверждение. Код то наоборот сработал. Еще раз говорю, пришел к выводу что нельзя говорить что-то однозначно. Может вывод и неверный, но пока так думать оснований нет.

Re: Flash vs SRAM

Пт дек 29, 2017 15:01:50

А там BusMatrix использует алгоритм Round Robin для арбитража. Ну пофантазировать можно конечно, а что если... Но здесь сейчас обсуждаем STM32 конкретный МК.

Добавлено after 2 minutes 26 seconds:
Oxford писал(а):Дело в том что ICODE шина подключена к флешу, а DCODE к ОЗУ. Инструкции быстрее идут из флеш, а данные из ОЗУ.
Самый первый пост и самая первая ссылка. Там тест опровергает и это утверждение. Код то наоборот сработал. Еще раз говорю, пришел к выводу что нельзя говорить что-то однозначно. Может вывод и неверный, но пока так думать оснований нет.


Что у вас там сработало я не разбирался.
Это из референса я говорю:

ICode bus
This bus connects the Instruction bus of the Cortex
®
-M3 core to the Flash memory
instruction interface. Prefetching is performed on this bus.

DCode bus
This bus connects the DCode bus (literalload and debug access) of the Cortex
®
-M3 core to
the Flash memory Data interface.
Последний раз редактировалось Oxford Пт дек 29, 2017 15:08:39, всего редактировалось 1 раз.

Re: Flash vs SRAM

Пт дек 29, 2017 15:08:06

Дело в том что ICODE шина подключена к флешу, а DCODE к ОЗУ. Инструкции быстрее идут из флеш, а данные из ОЗУ.

Чтобы так утверждать, нужно указывать о каком МК идёт речь. Так как это несправедливо для всех ARM.
Для XMC4700:

Для LPC1778/LPC1788:

Вложения
bus-lpc17xx-2.gif
(170.95 KiB) Скачиваний: 399
bus-lpc17xx-1.gif
(136.09 KiB) Скачиваний: 400
bus.gif
(145.03 KiB) Скачиваний: 424
Последний раз редактировалось jcxz Пт дек 29, 2017 15:18:28, всего редактировалось 1 раз.

Re: Flash vs SRAM

Пт дек 29, 2017 15:11:57

А я и не опровергаю архитектуру МК. Однако код в ОЗУ сработал быстрее. Вы сказали
Инструкции быстрее идут из флеш, а данные из ОЗУ.
, в том тесте это было наоборот. В других последующих соответствовало этому.

Сейчас то мы о чем говорим? Я создал топик, чтобы выяснить откуда код работает быстрее. Инфы об этом было мало и противоречива. Теперь ее больше и понятно почему была противоречива эта инфа. И вроде как вопрос выяснен.

Возможно на STM32F030 было бы все определеннее, так как он проще. Но я уже не хочу дальше тестить, т.к. в целом я свой вопрос прояснил для себя. Думаю данный топик может пригодится всем. Тема само-собой не закрыта, но сейчас она пошла слегка в сторону.

-----
З.Ы. Само собой не было цели проверить это именно для f103, просто он был под рукой у меня. А более навороченные я не планирую приобретать, мне пока этого хватает.

З.З.Ы. Пойду винца накачу :beer: , выходной блин завтра сорвался, жаль.

Re: Flash vs SRAM

Пт дек 29, 2017 15:41:46

Дело в том что ICODE шина подключена к флешу, а DCODE к ОЗУ. Инструкции быстрее идут из флеш, а данные из ОЗУ.

Чтобы так утверждать, нужно указывать о каком МК идёт речь. Так как это несправедливо для всех ARM.
Для XMC4700:

Для LPC1778/LPC1788:



Так он и в стм32 может выбирать инструкции из ОЗУ через BusMatrix. В чем смысл?
В XMC4700 Cortex-M4 и так же через BusMatrix
Архитектуры то идентичные. Это все справедливо для всех практически кортексов с гарвардской архитектурой. Конвеер, две шины для инструкций и данных, параллельная выборка.

Просто прикол в том как из ОЗУ например параллельно выборку данных и инструкций делать по двум шинам сразу? В этом и суть гарвардской архитектуры что хранилище инструкций и данных это два разных физически устройства и позволяют делать параллельную выборку.
Выбрали операнды, выбрали инструкцию, выполнили, выгрузили результат. Именно параллельная выборка ускоряет исполнение за меньшее количество тактов + конвеер еще ускоряет.

Добавлено after 16 minutes 36 seconds:
Лучше всего конечно это поправить файл линковщика. Но мне было лень, я не очень с ним на "ты" и надо тихонько скрипеть мозгами.

Делал так.
Атрибуты массива закоментарьте, не сработали. Но мой компилятор массив констант (const) сам определяет во флеш без дополнительного указания. Убрав const - массив перебирается в ОЗУ.

Чтобы зарядить foo в озу в прототип добавлял атрибут __attribute__((section(".data")));.
В коде что я Вам скинул он закоментарен, что означает фу во флеше.

Перед тестом обязательно запускал отладку и проверял кто куда попал на случай "вдруг затупил" и только после этого перезапускал МК и считывал частоту.

Добавлено after 2 minutes 13 seconds:
Компилятор GCC. У Вас может как-то по другому.


С чего вы взяли что __attribute__((section(".data"))); функцию переносит в ОЗУ?

Re: Flash vs SRAM

Пт дек 29, 2017 15:45:03

1.Потому что эта секция в ОЗУ.
2."Перед тестом обязательно запускал отладку и проверял кто куда попал на случай "вдруг затупил" и только после этого перезапускал МК и считывал частоту."
3. Вы просили выложить дизассеблер зачем то, я выложил, адреса там есть.

Re: Flash vs SRAM

Пт дек 29, 2017 15:49:15

Как понять секция в ОЗУ?

Re: Flash vs SRAM

Пт дек 29, 2017 15:51:01

Адресное пространство для этой секции в линковщике определено в области ОЗУ.

Re: Flash vs SRAM

Пт дек 29, 2017 15:59:14

А почему у меня из флеш исполняется?

Re: Flash vs SRAM

Пт дек 29, 2017 16:00:02

Вы про весь код или про функцию foo?

Re: Flash vs SRAM

Пт дек 29, 2017 16:00:43

Про функцию
Screenshot_15.png
(66.5 KiB) Скачиваний: 241

Re: Flash vs SRAM

Пт дек 29, 2017 16:04:59

Нечего не могу ответить. Прототип не забыли разкоментарить?
Я проверял в отладке по шагам куда идет прыжок, в окне watch смотрел адрес массива и адрес функции. Ну и сами дизасеблерные коды подтверждали.
У меня нет никаких сомнений в правильности расположения кода в моих тестах.

Re: Flash vs SRAM

Пт дек 29, 2017 16:05:58

ну на фото что не видно расскоментирован или нет? У меня массив во флеш лежит.
Const переносит массив во флеш. Вы видать этого не знали.
const убрал переполз в ОЗУ.
Последний раз редактировалось Oxford Пт дек 29, 2017 16:11:28, всего редактировалось 2 раз(а).

Re: Flash vs SRAM

Пт дек 29, 2017 16:09:57

Это Keil? У него компилятор GCC?

Re: Flash vs SRAM

Пт дек 29, 2017 16:14:22

1.Потому что эта секция в ОЗУ.
2."Перед тестом обязательно запускал отладку и проверял кто куда попал на случай "вдруг затупил" и только после этого перезапускал МК и считывал частоту."
3. Вы просили выложить дизассеблер зачем то, я выложил, адреса там есть.

Это не секция в ОЗУ. Это секция в IMAGE

Сдается мне вы нас нае...ываете. :kill:

Re: Flash vs SRAM

Пт дек 29, 2017 16:23:53

С чего вы взяли что __attribute__((section(".data"))); функцию переносит в ОЗУ?

Не пользуюсь Кейлом и такими конструкциями, но, раз данная строка находится в исходнике (*.c или *.cpp), то очевидно что она переносит не в ОЗУ, а в секцию ".data" объектного файла. А уж куда какие объектные секции в какие области памяти линковать - за это командный файл компоновщика отвечает, а не компилятор.
Последний раз редактировалось jcxz Пт дек 29, 2017 16:38:50, всего редактировалось 1 раз.

Re: Flash vs SRAM

Пт дек 29, 2017 16:28:28

Я тут никому ничего доказывать и убеждать в чем то не собираюсь и не делаю этого.
Все что тут я напостил делал для себя и для обсуждения. Если есть желание. Найдите мне секцию image для компилятора GCC, я ее не нашел. Вот файл линкера.


Oxford писал(а):Сдается мне вы нас нае...ываете. :kill:

Но если все же Вы так считаете, то ради бога. Данное Ваше мнение мне абсолютно фиолетово.

Re: Flash vs SRAM

Пт дек 29, 2017 16:42:00

скиньте Map файл. Вы просто функцию свою обьявили в секции data в образе. Но с чего вы думаете что она от этого начнется исполняться в ОЗУ, если код находиться во флеш? Вы что физически переключили шины? Я уже показал что код не переноситься в ОЗУ, а исполняется из флеш.
Последний раз редактировалось Oxford Пт дек 29, 2017 16:52:58, всего редактировалось 1 раз.

Re: Flash vs SRAM

Пт дек 29, 2017 16:52:51

Зачем? Я так понимаю Вы решили, что я адреса в коде дизассеблера отредактировал. Несомненно чтобы Вас дезоинформировать (это мечта всей моей жизни была). Неужели Вы думаете что я разрушу свою мечту и в мапе такого не сделаю?
Или может видео записать затем нужно будет?

Я уже сказал , мне фиолетово что Вы думаете обо мне и доказывать ничего не собираюсь.

З.Ы. Все частоты я придумал, тоже специально для Вас.

Re: Flash vs SRAM

Пт дек 29, 2017 16:53:34

Посмотреть карту обьектного файла. Я пока лишь разбираюсь и нахожу ошибки.
Ответить