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

 
 
> Cortex M3, M4 - разрядность переменных.
Allregia
сообщение Jul 11 2014, 11:47
Сообщение #1


Профессионал
*****

Группа: Свой
Сообщений: 1 047
Регистрация: 28-06-07
Из: Israel
Пользователь №: 28 763



Какую разрядность переменных, лучше выбирать в случае когда "а пофиг" ?
Например флаг, который может быть 0 или1, максимум -1, или считающий до 10 счетчик, и тому подобное, когда можно и u8, и s8, и u32б и s32.
Памяти-то в Кортексах обычно более чем достаточно, и экономить нужно не всегда, но влияет-ли это на быстродействие программы?
Есть ли разница для локальных и глобальных переменных, и для volatile?

Спасибо.
Go to the top of the page
 
+Quote Post
3 страниц V  < 1 2 3 >  
Start new topic
Ответов (15 - 29)
DASM
сообщение Jul 13 2014, 04:40
Сообщение #16


Гуру
******

Группа: Свой
Сообщений: 3 644
Регистрация: 28-05-05
Пользователь №: 5 493



Дайте пожалуйста, ссылку, где вы усмотрели write-back cache (впрочем как и иные виды кеша) в M3 кортексах blush.gif
Go to the top of the page
 
+Quote Post
jcxz
сообщение Jul 13 2014, 04:55
Сообщение #17


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Если Вы потрудитесь открыть например "Cortex-M3 Technical Reference Manual", то тоже сможете усмотреть.
Например в разделе Bus Interface\Write buffer:
CODE
The processor exports memory attributes on the System bus by the addition of a
sideband bus, MEMATTR.
Table 14-3 shows the relationship between MEMATTR[0] and HPROT[3:2].
Table 14-3 Memory attributes
MEMATTR[0] HPROT[3] HPROT[2] Description
0 0 0 Strongly ordered
0 0 1 Device
0 1 0 L1 cacheable, L2 not cacheable
1 0 0 Invalid
1 0 1 Invalid
1 1 0 Cache WT, allocate on read
0 1 1 Cache WB, allocate on read and write
1 1 1 Cache WB, allocate on read

Да и вообще в куче мест, если воспользуетесь поиском по "cache".
Например ещё в MPU.

PS: К тому-же кеш может быть не в ядре M3, а периферии конкретного МК, например в его External Memory Interface.

PPS: А интересно, уважаемый DASM, у вас не возникала мысль "зачем вообще нужны команды типа DMB/DSB если кеша нет"?
Go to the top of the page
 
+Quote Post
DASM
сообщение Jul 13 2014, 05:08
Сообщение #18


Гуру
******

Группа: Свой
Сообщений: 3 644
Регистрация: 28-05-05
Пользователь №: 5 493



Уточню, есть ли он в однокристаллках all-in-one, типа STM32F405 . Внешние памяти ,как ни крути, вешают на более серьезное, А9 и выше

Цитата(jcxz @ Jul 13 2014, 08:55) *
PPS: А интересно, уважаемый DASM, у вас не возникала мысль "зачем вообще нужны команды типа DMB/DSB если кеша нет"?

Не возникло, наличие команды еще не означает наличие соответствующего железа. These ARM and 32-bit Thumb instructions are available in ARMv7 ( http://infocenter.arm.com/help/index.jsp?t...c/CIHGHHIE.html ), а про Кортексы М3 пишут, что у них вообще нет кеш-контроллера
Хотя с другой стороны про M3 написано "The processor implements the ARMv7E-M architecture profile." Короче непонятно мне.
Go to the top of the page
 
+Quote Post
jcxz
сообщение Jul 13 2014, 06:04
Сообщение #19


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Вообще-то топик не про какой-то конкретный проц, а про M3/M4 вообще. И советы соответственно - касабельно всех M3/M4.
На шине эти сигналы есть и если в STM32F405 кеша нет - это только его личная беда.

И насчёт внешней памяти Вы ошибаетесь. Зачем тогда интерфейсы внешней памяти присутствуют в M3/M4-ядрах?
Например LPC1778/LPC1788, STM32F429....
Go to the top of the page
 
+Quote Post
DASM
сообщение Jul 13 2014, 06:06
Сообщение #20


Гуру
******

Группа: Свой
Сообщений: 3 644
Регистрация: 28-05-05
Пользователь №: 5 493



Может и ошибаюсь.
Go to the top of the page
 
+Quote Post
ViKo
сообщение Jul 13 2014, 06:35
Сообщение #21


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Цитата(jcxz @ Jul 13 2014, 09:04) *
Вообще-то топик не про какой-то конкретный проц, а про M3/M4 вообще. И советы соответственно - касабельно всех M3/M4.

В M3 и M4 кэша нет. Цитата из книги Ю:
PLD Pre-load data. This is a hint instruction typically use for cache memory to
accelerate data accesses. However, since there is no cache inside the
Cortex-M3 and Cortex-M4 processors, this instruction behaves as NOP.

Цитата(jcxz @ Jul 13 2014, 07:29) *
Тогда сильно сомневаюсь, что заполнение массива uint_fast8_t в цикле будет быстрее, чем массива u8.
Скорее - наоборот. Так как по размеру/кол-ву команд - одинаково, но кэш обратной записи предпочтёт u8.
Да и на чтение - аналогично.

Если просто заполнение, то байтами, сгруппированными по 4, заполнить будет почти в 4 раза быстрее, чем словами. Но если еще что-то делать с байтами, то вряд ли. Впрочем, для массивов важнее экономить память, чем скорость, так что и выбора-то в данном случае не может быть.
Go to the top of the page
 
+Quote Post
jcxz
сообщение Jul 13 2014, 06:55
Сообщение #22


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(ViKo @ Jul 13 2014, 12:35) *
В M3 и M4 кэша нет. Цитата из книги Ю:

В ядре нету. Но может присутствовать в МК, построенных на этом ядре. А в ядре есть вся поддержка для этого.
Go to the top of the page
 
+Quote Post
DASM
сообщение Jul 13 2014, 07:15
Сообщение #23


Гуру
******

Группа: Свой
Сообщений: 3 644
Регистрация: 28-05-05
Пользователь №: 5 493



Не очень понимаю смысл кеша, расположенного на внешней памяти. Или в ядре со сверхбыстрым доступом, или он не нужен вообще. Тогда уж покупать лицензию на М3 и городить СОЗУ для кеша. Но вроде речь про серийные камни.
Go to the top of the page
 
+Quote Post
adnega
сообщение Jul 13 2014, 07:43
Сообщение #24


Гуру
******

Группа: Свой
Сообщений: 2 724
Регистрация: 14-05-07
Из: Ярославль, Россия
Пользователь №: 27 702



Все поняли вопрос?
Цитата
Какую разрядность переменных, лучше выбирать в случае когда "а пофиг" ?

Т.е. ограничений ни по размеру, ни по быстродействию нет, ибо "пофиг".
Ограничения по быстродействию или по размеру тут не обсуждается.
Насколько я понял, ТС просит "default type", когда выбор не очевиден и не играет роли.
Осмелюсь предположить, что в данном случае самым сильным критерием будет переносимость (в рамках M3/M4).
Очевидно, переносимость между компиляторами, средами, библиотеками и т.п.
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение Jul 13 2014, 08:42
Сообщение #25


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



Цитата(DASM @ Jul 13 2014, 11:15) *
Не очень понимаю смысл кеша, расположенного на внешней памяти.
А как же разгонять медленный флешь? Ведь вся соль применения CM3-4 именно в исполнении кода из FLASH на скорости не уступающей RAM. А без разного рода кешей этого бы не было. DSB я использую в реальных проектах (в обработчиках некоторых прерываний) и без этой инструкции программа была бы не так лаконична и вообще бы не работала (проверено).

Цитата(adnega @ Jul 13 2014, 11:43) *
Все поняли вопрос?
Ну да. Я могу и в третий раз повторить ответ.
Тут ведь вопрос стоит слишком глобально. Если говорить о аргументах функции, возвращаемых ей значениях, отдельных счётчиках или флагах, то наиболее переносимым вариантом является uint_fast8_t. В остальных случаях надо смотреть по задаче.

Цитата(ViKo @ Jul 12 2014, 14:33) *
Не единственный. Еще есть команды эксклюзивного доступа. LDREX и т.д. И соответствующие им интринсики для компилятора __LDREX().
И утрамбовать поля в слова можно так, чтобы не поганить одно поле при доступе к другому.
Об этом я забыл. Да и по жизни не приходилось использовать.


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post
A. Fig Lee
сообщение Jul 13 2014, 13:09
Сообщение #26


Знающий
****

Группа: Участник
Сообщений: 974
Регистрация: 4-04-08
Из: далека
Пользователь №: 36 467



Цитата(adnega @ Jul 13 2014, 03:43) *
Все поняли вопрос?

Насколько я понял, ТС просит "default type", когда выбор не очевиден и не играет роли.

Вот именно.
В целом правильно uintXX_t, но где значения не имеет, int, надо полагать достаточен.


--------------------
Верить нельзя никому, даже себе. Мне - можно.
Go to the top of the page
 
+Quote Post
adnega
сообщение Jul 13 2014, 15:46
Сообщение #27


Гуру
******

Группа: Свой
Сообщений: 2 724
Регистрация: 14-05-07
Из: Ярославль, Россия
Пользователь №: 27 702



Цитата(A. Fig Lee @ Jul 13 2014, 17:09) *
int, надо полагать достаточен.

Я везде (а это получатся только M3/M4/M0) int и пишу.
Для остальных случаев пользуюсь "своими" BYTE, WORD и DWORD - соответственно 8, 16, 32 бита (без знака).
Но это не правило, т.к. я программист-одиночка и работаю на себя.
Что там компилятор наоптимизирует для меня на порядок менее важно, т.к. в критических случаях заставляю "молотить" периферию, а не софт.
Go to the top of the page
 
+Quote Post
A. Fig Lee
сообщение Jul 13 2014, 17:42
Сообщение #28


Знающий
****

Группа: Участник
Сообщений: 974
Регистрация: 4-04-08
Из: далека
Пользователь №: 36 467



Цитата(adnega @ Jul 13 2014, 11:46) *
Я везде (а это получатся только M3/M4/M0) int и пишу.
Для остальных случаев пользуюсь "своими" BYTE, WORD и DWORD - соответственно 8, 16, 32 бита (без знака).
Но это не правило, т.к. я программист-одиночка и работаю на себя.
Что там компилятор наоптимизирует для меня на порядок менее важно, т.к. в критических случаях заставляю "молотить" периферию, а не софт.

То бишь "пишу непереносимые приложения" .. biggrin.gif


--------------------
Верить нельзя никому, даже себе. Мне - можно.
Go to the top of the page
 
+Quote Post
adnega
сообщение Jul 13 2014, 18:37
Сообщение #29


Гуру
******

Группа: Свой
Сообщений: 2 724
Регистрация: 14-05-07
Из: Ярославль, Россия
Пользователь №: 27 702



Цитата(A. Fig Lee @ Jul 13 2014, 21:42) *
То бишь "пишу непереносимые приложения" .. biggrin.gif

Это с какой стороны посмотреть...
В своих проектах копипасту практикую чуть более чем полностью. Все при этом переносится.
С хорошим чужим кодом не работал. Свой код тоже никому отдавать не собираюсь.
И... ранее я предупреждал, что
Цитата
это не правило

Может, не от хорошей жизни я не использую стандартные C-библиотеки (в т.ч. и stdint).
Сейчас, вроде, нет никаких оснований их не использовать,но как-то... страшно.
Все работает, а я тут трогать начну...
Go to the top of the page
 
+Quote Post
Allregia
сообщение Jul 13 2014, 21:00
Сообщение #30


Профессионал
*****

Группа: Свой
Сообщений: 1 047
Регистрация: 28-06-07
Из: Israel
Пользователь №: 28 763



Цитата(adnega @ Jul 13 2014, 09:43) *
Все поняли вопрос?

Т.е. ограничений ни по размеру, ни по быстродействию нет, ибо "пофиг".
Ограничения по быстродействию или по размеру тут не обсуждается.
Насколько я понял, ТС просит "default type", когда выбор не очевиден и не играет роли.
Осмелюсь предположить, что в данном случае самым сильным критерием будет переносимость (в рамках M3/M4).
Очевидно, переносимость между компиляторами, средами, библиотеками и т.п.

Нет, не совсем так.
Я наверное не очень ясно выразился.
Под "пофиг" - имелось ввиду две вещи:
1) переменная типа флага, или считающего до 10 счетчика. Ее можно разместить и в байте и в ворде и в инте.
2)что памяти в этих процах как правило, более чем достаточно, и экономить ее используя именно байт - смысла нет, если это не дает каких-то других преимуществ.
А вот быстродействие как раз очень даже интересовало.
В общем, я понял что за исключением каких-то специальных случаев, юнитов, структур и больших массивов - надо не морочить себе голову и использовать u32,s32,vu32,vs32.
А тем более для локальных переменных.
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 23rd August 2025 - 03:37
Рейтинг@Mail.ru


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