Перейти к содержанию
    

Cortex M3, M4 - разрядность переменных.

Дайте пожалуйста, ссылку, где вы усмотрели write-back cache (впрочем как и иные виды кеша) в M3 кортексах :blush:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Если Вы потрудитесь открыть например "Cortex-M3 Technical Reference Manual", то тоже сможете усмотреть.

Например в разделе Bus Interface\Write buffer:

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 если кеша нет"?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

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." Короче непонятно мне.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вообще-то топик не про какой-то конкретный проц, а про M3/M4 вообще. И советы соответственно - касабельно всех M3/M4.

На шине эти сигналы есть и если в STM32F405 кеша нет - это только его личная беда.

 

И насчёт внешней памяти Вы ошибаетесь. Зачем тогда интерфейсы внешней памяти присутствуют в M3/M4-ядрах?

Например LPC1778/LPC1788, STM32F429....

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вообще-то топик не про какой-то конкретный проц, а про 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.

 

Тогда сильно сомневаюсь, что заполнение массива uint_fast8_t в цикле будет быстрее, чем массива u8.

Скорее - наоборот. Так как по размеру/кол-ву команд - одинаково, но кэш обратной записи предпочтёт u8.

Да и на чтение - аналогично.

Если просто заполнение, то байтами, сгруппированными по 4, заполнить будет почти в 4 раза быстрее, чем словами. Но если еще что-то делать с байтами, то вряд ли. Впрочем, для массивов важнее экономить память, чем скорость, так что и выбора-то в данном случае не может быть.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В M3 и M4 кэша нет. Цитата из книги Ю:

В ядре нету. Но может присутствовать в МК, построенных на этом ядре. А в ядре есть вся поддержка для этого.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Не очень понимаю смысл кеша, расположенного на внешней памяти. Или в ядре со сверхбыстрым доступом, или он не нужен вообще. Тогда уж покупать лицензию на М3 и городить СОЗУ для кеша. Но вроде речь про серийные камни.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Все поняли вопрос?

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

Т.е. ограничений ни по размеру, ни по быстродействию нет, ибо "пофиг".

Ограничения по быстродействию или по размеру тут не обсуждается.

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

Осмелюсь предположить, что в данном случае самым сильным критерием будет переносимость (в рамках M3/M4).

Очевидно, переносимость между компиляторами, средами, библиотеками и т.п.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

Все поняли вопрос?
Ну да. Я могу и в третий раз повторить ответ.

Тут ведь вопрос стоит слишком глобально. Если говорить о аргументах функции, возвращаемых ей значениях, отдельных счётчиках или флагах, то наиболее переносимым вариантом является uint_fast8_t. В остальных случаях надо смотреть по задаче.

 

Не единственный. Еще есть команды эксклюзивного доступа. LDREX и т.д. И соответствующие им интринсики для компилятора __LDREX().

И утрамбовать поля в слова можно так, чтобы не поганить одно поле при доступе к другому.

Об этом я забыл. Да и по жизни не приходилось использовать.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Все поняли вопрос?

 

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

Вот именно.

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

int, надо полагать достаточен.

Я везде (а это получатся только M3/M4/M0) int и пишу.

Для остальных случаев пользуюсь "своими" BYTE, WORD и DWORD - соответственно 8, 16, 32 бита (без знака).

Но это не правило, т.к. я программист-одиночка и работаю на себя.

Что там компилятор наоптимизирует для меня на порядок менее важно, т.к. в критических случаях заставляю "молотить" периферию, а не софт.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я везде (а это получатся только M3/M4/M0) int и пишу.

Для остальных случаев пользуюсь "своими" BYTE, WORD и DWORD - соответственно 8, 16, 32 бита (без знака).

Но это не правило, т.к. я программист-одиночка и работаю на себя.

Что там компилятор наоптимизирует для меня на порядок менее важно, т.к. в критических случаях заставляю "молотить" периферию, а не софт.

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Это с какой стороны посмотреть...

В своих проектах копипасту практикую чуть более чем полностью. Все при этом переносится.

С хорошим чужим кодом не работал. Свой код тоже никому отдавать не собираюсь.

И... ранее я предупреждал, что

это не правило

Может, не от хорошей жизни я не использую стандартные C-библиотеки (в т.ч. и stdint).

Сейчас, вроде, нет никаких оснований их не использовать,но как-то... страшно.

Все работает, а я тут трогать начну...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Все поняли вопрос?

 

Т.е. ограничений ни по размеру, ни по быстродействию нет, ибо "пофиг".

Ограничения по быстродействию или по размеру тут не обсуждается.

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

Осмелюсь предположить, что в данном случае самым сильным критерием будет переносимость (в рамках M3/M4).

Очевидно, переносимость между компиляторами, средами, библиотеками и т.п.

Нет, не совсем так.

Я наверное не очень ясно выразился.

Под "пофиг" - имелось ввиду две вещи:

1) переменная типа флага, или считающего до 10 счетчика. Ее можно разместить и в байте и в ворде и в инте.

2)что памяти в этих процах как правило, более чем достаточно, и экономить ее используя именно байт - смысла нет, если это не дает каких-то других преимуществ.

А вот быстродействие как раз очень даже интересовало.

В общем, я понял что за исключением каких-то специальных случаев, юнитов, структур и больших массивов - надо не морочить себе голову и использовать u32,s32,vu32,vs32.

А тем более для локальных переменных.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...