Карма: 29
Рейтинг сообщений: 645
Зарегистрирован: Сб май 14, 2011 21:16:04 Сообщений: 2694 Откуда: г. Чайковский
Рейтинг сообщения:0 Медали: 1
Oxford писал(а):
Дело в том что ICODE шина подключена к флешу, а DCODE к ОЗУ. Инструкции быстрее идут из флеш, а данные из ОЗУ.
Самый первый пост и самая первая ссылка. Там тест опровергает и это утверждение. Код то наоборот сработал. Еще раз говорю, пришел к выводу что нельзя говорить что-то однозначно. Может вывод и неверный, но пока так думать оснований нет.
_________________ Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
А там BusMatrix использует алгоритм Round Robin для арбитража. Ну пофантазировать можно конечно, а что если... Но здесь сейчас обсуждаем STM32 конкретный МК.
Дело в том что 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.
_________________ Инженер R@D
Telegram чат: https://t.me/radiowolf или в поиске приложения @radiowolf. Личка:@cncoxford
Последний раз редактировалось Oxford Пт дек 29, 2017 15:08:39, всего редактировалось 1 раз.
Дело в том что ICODE шина подключена к флешу, а DCODE к ОЗУ. Инструкции быстрее идут из флеш, а данные из ОЗУ.
Чтобы так утверждать, нужно указывать о каком МК идёт речь. Так как это несправедливо для всех ARM. Для XMC4700: Спойлер Для LPC1778/LPC1788: Спойлер Спойлер
Карма: 29
Рейтинг сообщений: 645
Зарегистрирован: Сб май 14, 2011 21:16:04 Сообщений: 2694 Откуда: г. Чайковский
Рейтинг сообщения:0 Медали: 1
А я и не опровергаю архитектуру МК. Однако код в ОЗУ сработал быстрее. Вы сказали
Цитата:
Инструкции быстрее идут из флеш, а данные из ОЗУ.
, в том тесте это было наоборот. В других последующих соответствовало этому.
Сейчас то мы о чем говорим? Я создал топик, чтобы выяснить откуда код работает быстрее. Инфы об этом было мало и противоречива. Теперь ее больше и понятно почему была противоречива эта инфа. И вроде как вопрос выяснен.
Возможно на STM32F030 было бы все определеннее, так как он проще. Но я уже не хочу дальше тестить, т.к. в целом я свой вопрос прояснил для себя. Думаю данный топик может пригодится всем. Тема само-собой не закрыта, но сейчас она пошла слегка в сторону.
----- З.Ы. Само собой не было цели проверить это именно для f103, просто он был под рукой у меня. А более навороченные я не планирую приобретать, мне пока этого хватает.
Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ очень важен контроль процесса заряда и разряда для избегания воздействия внешнего зарядного напряжения после достижения 100% заряда. Инженеры КОМПЭЛ подготовили список таких решений от разных производителей.
Дело в том что ICODE шина подключена к флешу, а DCODE к ОЗУ. Инструкции быстрее идут из флеш, а данные из ОЗУ.
Чтобы так утверждать, нужно указывать о каком МК идёт речь. Так как это несправедливо для всех ARM. Для XMC4700: Спойлер Для LPC1778/LPC1788: Спойлер Спойлер
Так он и в стм32 может выбирать инструкции из ОЗУ через BusMatrix. В чем смысл? В XMC4700 Cortex-M4 и так же через BusMatrix Архитектуры то идентичные. Это все справедливо для всех практически кортексов с гарвардской архитектурой. Конвеер, две шины для инструкций и данных, параллельная выборка.
Просто прикол в том как из ОЗУ например параллельно выборку данных и инструкций делать по двум шинам сразу? В этом и суть гарвардской архитектуры что хранилище инструкций и данных это два разных физически устройства и позволяют делать параллельную выборку. Выбрали операнды, выбрали инструкцию, выполнили, выгрузили результат. Именно параллельная выборка ускоряет исполнение за меньшее количество тактов + конвеер еще ускоряет.
Лучше всего конечно это поправить файл линковщика. Но мне было лень, я не очень с ним на "ты" и надо тихонько скрипеть мозгами.
Делал так. Атрибуты массива закоментарьте, не сработали. Но мой компилятор массив констант (const) сам определяет во флеш без дополнительного указания. Убрав const - массив перебирается в ОЗУ.
Чтобы зарядить foo в озу в прототип добавлял атрибут __attribute__((section(".data")));. В коде что я Вам скинул он закоментарен, что означает фу во флеше.
Перед тестом обязательно запускал отладку и проверял кто куда попал на случай "вдруг затупил" и только после этого перезапускал МК и считывал частоту.
Добавлено after 2 minutes 13 seconds: Компилятор GCC. У Вас может как-то по другому.
С чего вы взяли что __attribute__((section(".data"))); функцию переносит в ОЗУ?
_________________ Инженер R@D
Telegram чат: https://t.me/radiowolf или в поиске приложения @radiowolf. Личка:@cncoxford
Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре.
Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.
Карма: 29
Рейтинг сообщений: 645
Зарегистрирован: Сб май 14, 2011 21:16:04 Сообщений: 2694 Откуда: г. Чайковский
Рейтинг сообщения:0 Медали: 1
1.Потому что эта секция в ОЗУ. 2."Перед тестом обязательно запускал отладку и проверял кто куда попал на случай "вдруг затупил" и только после этого перезапускал МК и считывал частоту." 3. Вы просили выложить дизассеблер зачем то, я выложил, адреса там есть.
_________________ Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
Карма: 29
Рейтинг сообщений: 645
Зарегистрирован: Сб май 14, 2011 21:16:04 Сообщений: 2694 Откуда: г. Чайковский
Рейтинг сообщения:0 Медали: 1
Нечего не могу ответить. Прототип не забыли разкоментарить? Я проверял в отладке по шагам куда идет прыжок, в окне watch смотрел адрес массива и адрес функции. Ну и сами дизасеблерные коды подтверждали. У меня нет никаких сомнений в правильности расположения кода в моих тестах.
_________________ Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
ну на фото что не видно расскоментирован или нет? У меня массив во флеш лежит. Const переносит массив во флеш. Вы видать этого не знали. const убрал переполз в ОЗУ.
_________________ Инженер R@D
Telegram чат: https://t.me/radiowolf или в поиске приложения @radiowolf. Личка:@cncoxford
Последний раз редактировалось Oxford Пт дек 29, 2017 16:11:28, всего редактировалось 2 раз(а).
1.Потому что эта секция в ОЗУ. 2."Перед тестом обязательно запускал отладку и проверял кто куда попал на случай "вдруг затупил" и только после этого перезапускал МК и считывал частоту." 3. Вы просили выложить дизассеблер зачем то, я выложил, адреса там есть.
Это не секция в ОЗУ. Это секция в IMAGE
Сдается мне вы нас нае...ываете.
_________________ Инженер R@D
Telegram чат: https://t.me/radiowolf или в поиске приложения @radiowolf. Личка:@cncoxford
С чего вы взяли что __attribute__((section(".data"))); функцию переносит в ОЗУ?
Не пользуюсь Кейлом и такими конструкциями, но, раз данная строка находится в исходнике (*.c или *.cpp), то очевидно что она переносит не в ОЗУ, а в секцию ".data" объектного файла. А уж куда какие объектные секции в какие области памяти линковать - за это командный файл компоновщика отвечает, а не компилятор.
Последний раз редактировалось jcxz Пт дек 29, 2017 16:38:50, всего редактировалось 1 раз.
Карма: 29
Рейтинг сообщений: 645
Зарегистрирован: Сб май 14, 2011 21:16:04 Сообщений: 2694 Откуда: г. Чайковский
Рейтинг сообщения:0 Медали: 1
Я тут никому ничего доказывать и убеждать в чем то не собираюсь и не делаю этого. Все что тут я напостил делал для себя и для обсуждения. Если есть желание. Найдите мне секцию image для компилятора GCC, я ее не нашел. Вот файл линкера.Спойлер
/* .stack_dummy section doesn't contains any symbols. It is only * used for linker to calculate size of stack sections, and assign * values to stack symbols later */ .co_stack (NOLOAD): { . = ALIGN(8); *(.co_stack .co_stack.*) } > ram
/* Set stack top to end of ram , and stack limit move down by * size of stack_dummy section */ __StackTop = ORIGIN(ram ) + LENGTH(ram ); __StackLimit = __StackTop - SIZEOF(.co_stack); PROVIDE(__stack = __StackTop);
/* Check if data + heap + stack exceeds ram limit */ ASSERT(__StackLimit >= __HeapLimit, "region ram overflowed with stack") }
Oxford писал(а):
Сдается мне вы нас нае...ываете.
Но если все же Вы так считаете, то ради бога. Данное Ваше мнение мне абсолютно фиолетово.
_________________ Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
скиньте Map файл. Вы просто функцию свою обьявили в секции data в образе. Но с чего вы думаете что она от этого начнется исполняться в ОЗУ, если код находиться во флеш? Вы что физически переключили шины? Я уже показал что код не переноситься в ОЗУ, а исполняется из флеш.
_________________ Инженер R@D
Telegram чат: https://t.me/radiowolf или в поиске приложения @radiowolf. Личка:@cncoxford
Последний раз редактировалось Oxford Пт дек 29, 2017 16:52:58, всего редактировалось 1 раз.
Карма: 29
Рейтинг сообщений: 645
Зарегистрирован: Сб май 14, 2011 21:16:04 Сообщений: 2694 Откуда: г. Чайковский
Рейтинг сообщения:0 Медали: 1
Зачем? Я так понимаю Вы решили, что я адреса в коде дизассеблера отредактировал. Несомненно чтобы Вас дезоинформировать (это мечта всей моей жизни была). Неужели Вы думаете что я разрушу свою мечту и в мапе такого не сделаю? Или может видео записать затем нужно будет?
Я уже сказал , мне фиолетово что Вы думаете обо мне и доказывать ничего не собираюсь.
З.Ы. Все частоты я придумал, тоже специально для Вас.
_________________ Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения