STM32 новичку в ARM что к чему

Кто любит RISC в жизни, заходим, не стесняемся.
Ответить
afz
Опытный кот
Аватара пользователя
Сообщения: 744
Зарегистрирован: Сб дек 22, 2012 08:17:42
Откуда: Караганда, Казахстан

Сообщение afz »

Мурик писал(а):Обратите внимание на массивы байт и символов. _MAX_SS равно 512, а _MAX_LFN 255.
Это не ошибка. Как говорили лет 20-25 назад, "Это не баг. Это фича!" :) Особенность данной конкретной библиотеки.
Мурик писал(а):Во многих статьях эти экземпляры структур локальные (не знаю чем руководствовались их авторы, неужели не знали размеры структур?).
Собственно, не так это и важно. Ну, легла эта структура в стек, учтите этот факт, т.е. увеличьте размер стека, и вперед! На тех же АВРках и делать ничего не надо, поскольку под стек с кучей отдана вся свободная память, а вот на STM32 придется подкрутить. Ну, и если все равно не лезет, значит нужен камень потолще, тут уж однозначно.

Это я к тому, что навязанная нам обязанность самостоятельно рулить размерами стека и кучи, в общем-то, бесполезна. Ни отладку она не облегчает, ни от ошибок не защищает, да даже переполнение стека, и то толком не ловится, Hard Fault - это, в общем-то, косвенное свидетельство его переполнения.
Кто мешает тебе выдумать порох непромокаемый? (К. Прутков, мысль № 133)
Реклама
Друг Кота
Аватара пользователя
Сообщения: 3386
Зарегистрирован: Пн окт 11, 2010 19:00:08

Сообщение Мурик »

afz писал(а):Это не ошибка.
Я и не писал что это ошибка. Ошибкой будет создать несколько локальных экземпляров таких структур, что многие делают судя по коду найденному в сети. Даже 1 КБ стека будет мало. :dont_know:
afz писал(а):Ну, легла эта структура в стек, учтите этот факт, т.е. увеличьте размер стека, и вперед!
Судя по статьям в сети, их авторы даже не смотрели на структуры и не подозревают сколько нужно стека под них. А после, другие найдя статью копируют код и получают ошибки во время работы из-за переполнения стека. Это я к тому что используя код написанный другими нельзя быть точно уверенным что он будет работать нормально.
Реклама
Опытный кот
Аватара пользователя
Сообщения: 819
Зарегистрирован: Вт окт 23, 2012 13:17:25
Откуда: Прокопьевск

Сообщение Oxford »

[uquote="WiseLord",url="/forum/viewtopic.php?p=3555253#p3555253"]Нет, это просто много шрифтов.

RLE-сжатие сильно помогает, но всё равно, использование каждого шрифта где-то 5..7кБ добавляет к размеру прошивки.[/uquote]
А зачем столько? Перед пацанами понтонуться? Было бы 200 шрифтов вы бы их все залили.
Инженер R@D

Telegram чат: https://t.me/radiowolf или в поиске приложения @radiowolf. Личка:@cncoxford
Контактная информация:
Друг Кота
Аватара пользователя
Сообщения: 4906
Зарегистрирован: Чт апр 11, 2013 11:19:59
Откуда: Минск

Сообщение WiseLord »

В проекте поддерживается 6 разных разрешений экрана (от 160x128 до 480x320), для каждого из разрешений удобно использовать вполне определённые шрифты.

Изображение

В прошивку попадают только те, которые используются с данным разрешением.
Контактная информация:
Реклама
Эиком - электронные компоненты и радиодетали
Опытный кот
Аватара пользователя
Сообщения: 819
Зарегистрирован: Вт окт 23, 2012 13:17:25
Откуда: Прокопьевск

Сообщение Oxford »

Сменные экраны что ли для пользователя? Потому как прошивки компилируются под нужный экран.

Добавлено after 4 minutes 59 seconds:
[uquote="WiseLord",url="/forum/viewtopic.php?p=3556309#p3556309"]В прошивку попадают только те, которые используются с данным разрешением.[/uquote]

Если один шрифт попадает в прошивку человек у вас спрашивал 80кб откуда много, вы ответили что в прошивке шрифтов много.
Скользкий вы человек, переобулись на лету после моего замечания.
Инженер R@D

Telegram чат: https://t.me/radiowolf или в поиске приложения @radiowolf. Личка:@cncoxford
Контактная информация:
Реклама
Друг Кота
Аватара пользователя
Сообщения: 4906
Зарегистрирован: Чт апр 11, 2013 11:19:59
Откуда: Минск

Сообщение WiseLord »

В прошивку попадает около 5..6 шрифтов - это килобайт 40, остальное уже код программы. На скриншоте как минимум три разных шрифта видны, откуда Вы один придумали? А это ведь лишь стартовый экран с часами.

Ах да, ещё иконки подобного же формата. Но там лишь с десятка два иконок, от 24x24 до 64x64, в зависимости от разрешения экрана, мелочь, в сравнении со шрифтами.
Контактная информация:
Реклама
Мучитель микросхем
Аватара пользователя
Сообщения: 479
Зарегистрирован: Вт июн 02, 2009 22:38:40
Откуда: Город-герой Москва

Сообщение Грендайзер »

[uquote="Мурик",url="/forum/viewtopic.php?p=3556219#p3556219"]Это я к тому что используя код написанный другими нельзя быть точно уверенным что он будет работать нормально.[/uquote]
Ну тогда тем более не понятно, на кой чёрт эта подкрутка стека нужна, получается лишняя заноза при переносе кода на другую платформу :dont_know:
Идёт направо - песнь заводит, Налево - сказку говорит.
Аватара пользователя
Сообщения: 5000
Зарегистрирован: Чт апр 21, 2011 17:55:50
Откуда: Иркутск

Сообщение СКАЗОЧНИК »

Скажите, как понять вот это описание?

Access: 0 ≤ wait state ≤ 2, word, half-word and byte access

Добавлено after 1 hour 34 minutes 41 second:
Еще пара вопросов.

1. В регистре RCC_CR есть бит включения HSE. А в регистре RCC_CFGR есть бит SW, где тоже можно выбрать источник тактирования. Это как понимать? Или надо будет включать и там и там? Или можно либо там, либо там?
2. Что такое HSE oscillator used directly or indirectly as system clock? (прямо или косвенно) что это значит?

Добавлено after 1 hour 5 minutes 30 seconds:
Пятница что ли всех в Повердаун отправила...

Скажите, может я правильно понимаю тогда, что 0 ≤ wait state ≤ 2 это значит, что доступ к регистру может быть от 0 до 2 тактов, в зависимости от занятости этого регистра?
Последний раз редактировалось СКАЗОЧНИК Сб янв 26, 2019 04:02:48, всего редактировалось 1 раз.
Станислав
Поставщик валерьянки для Кота
Сообщения: 2089
Зарегистрирован: Вс июн 19, 2016 09:32:03

Сообщение Reflector »

СКАЗОЧНИК писал(а):Скажите, может я правильно понимаю тогда, что 0 ≤ wait state ≤ 2 это значит, что доступ к регистру может быть от 0 до 2 тактов, в зависимости от занятости этого регистра?
Правильно, может есть еще какие-то предположения касательно word или byte access? :) Только не 0..2 такта, а дополнительно 0..2 такта...
Идёт направо - песнь заводит, Налево - сказку говорит.
Аватара пользователя
Сообщения: 5000
Зарегистрирован: Чт апр 21, 2011 17:55:50
Откуда: Иркутск

Сообщение СКАЗОЧНИК »

Reflector писал(а):касательно word или byte access?
Это тоже интересно. Понятно, что это доступ словами, половиной слова или байтовый. Т.е. 32 бита, 16 или 8 бит. И, как я понял, больше относится к языку программирования. :dont_know:
С другой стороны, не понятно... Что за доступ в 8 бит... ?
Станислав
Поставщик валерьянки для Кота
Сообщения: 2089
Зарегистрирован: Вс июн 19, 2016 09:32:03

Сообщение Reflector »

[uquote="СКАЗОЧНИК",url="/forum/viewtopic.php?p=3556886#p3556886"]С другой стороны, не понятно... Что за доступ в 8 бит... ?[/uquote]
Допустим нужно один байт в регистре поменять, любой, не затрагивая остальные, тогда можно только к нему и обращаться.
Идёт направо - песнь заводит, Налево - сказку говорит.
Аватара пользователя
Сообщения: 5000
Зарегистрирован: Чт апр 21, 2011 17:55:50
Откуда: Иркутск

Сообщение СКАЗОЧНИК »

Задам очередной глупый вопрос. Усиленно вчитываясь в рефренс мануал, дошел до регистра GPIOx_CLR (ну и второй его брат тоже). Если в АВР было просто ПОРТа, ПОРТб и т.д., то здесь как-то для кучи портов один регистр всего? по адресу смещения 0х00 и 0х04.
Не понимаю. Как настраивать порт А отдельно от порта Д? Или я где-то че-то не вижу?

туплю. С регистрами установки и сброса битов. Они тоже как бы для одного порта описаны. А где для остальных?

Добавлено after 2 minutes 13 seconds:
Ну и все верхние вопросы тоже в силе. )
Станислав
Поставщик валерьянки для Кота
Сообщения: 2089
Зарегистрирован: Вс июн 19, 2016 09:32:03

Сообщение Reflector »

[uquote="СКАЗОЧНИК",url="/forum/viewtopic.php?p=3560129#p3560129"]Не понимаю. Как настраивать порт А отдельно от порта Д? Или я где-то че-то не вижу?[/uquote]
Не понимаю как так можно RM читать, если в описании регистра написано:
Port configuration register low (GPIOx_CRL) (x=A..G)
1. В регистре RCC_CR есть бит включения HSE. А в регистре RCC_CFGR есть бит SW, где тоже можно выбрать источник тактирования. Это как понимать? Или надо будет включать и там и там? Или можно либо там, либо там?
Включение HSE не означает на него переключение.
2. Что такое HSE oscillator used directly or indirectly as system clock? (прямо или косвенно) что это значит?
Открываю раздел RCC, даю поиск по "indirectly", первое же совпадение дает ответ на твой вопрос:
If the HSE oscillator is used directly or indirectly as the system clock (indirectly means: it is used as PLL input clock, and the PLL clock is used as system clock).
Идёт направо - песнь заводит, Налево - сказку говорит.
Аватара пользователя
Сообщения: 5000
Зарегистрирован: Чт апр 21, 2011 17:55:50
Откуда: Иркутск

Сообщение СКАЗОЧНИК »

Reflector писал(а):Port configuration register low (GPIOx_CRL) (x=A..G)
Я увидел, что там надо подставить букву вместо Х. Но дальше дана полная таблица этих регистров, где также описан один всего GPIOx и указано его смещение от начального адреса. Может я не правильно задаю вопрос... Но это описание общее.
У каждого порта должен быть свой такой регистр со своим адресом?!

БЭКАП регистры же указаны все 40 с лишним штук, хотя они все одинаковые...
Reflector писал(а):а него переключение.
Вот это теперь понятно.
Reflector писал(а):If the HSE oscillator is used directly or indirectly as the system clock (indirectly means: it is used as PLL input clock, and the PLL clock is used as system clock).
Если используется HSE (внешний высокочастотный) прямо или косвенно, как тактироание системы (косвенно означает: что используется как PLL внутреннее тактирование и PLL тактирование используется как системное тактирование).

:dont_know: Все равно не понимаю... :facepalm:

Добавлено after 9 minutes 5 seconds:
А... я кажется понял! Прямо или косвенно означает, если я подал тактовые на вход, либо кварц подключил и сразу отправил эту частоту на ядро, то это прямо. А если я ее умножил через PLL, то это уже косвенно эту частоту я использую.
Станислав
Поставщик валерьянки для Кота
Сообщения: 2089
Зарегистрирован: Вс июн 19, 2016 09:32:03

Сообщение Reflector »

[uquote="СКАЗОЧНИК",url="/forum/viewtopic.php?p=3560216#p3560216"]Я увидел, что там надо подставить букву вместо Х. Но дальше дана полная таблица этих регистров, где также описан один всего GPIOx и указано его смещение от начального адреса.[/uquote]
Почему вдруг всего один GPIOx, если вместо 'x' подставляются буквы портов...
У каждого порта должен быть свой такой регистр со своим адресом?!
Естественно, базовый адрес для каждого порта разный, смещение для всех регистров одинаковое.

Код: Выделить всё

#define GPIOA_BASE            (AHB2PERIPH_BASE + 0x00000000)
#define GPIOB_BASE            (AHB2PERIPH_BASE + 0x00000400)

#define GPIOA               ((GPIO_TypeDef *) GPIOA_BASE)
#define GPIOB               ((GPIO_TypeDef *) GPIOB_BASE)
Идёт направо - песнь заводит, Налево - сказку говорит.
Аватара пользователя
Сообщения: 5000
Зарегистрирован: Чт апр 21, 2011 17:55:50
Откуда: Иркутск

Сообщение СКАЗОЧНИК »

про прямо и косвенно я правильно понял? )
Станислав
Поставщик валерьянки для Кота
Сообщения: 2089
Зарегистрирован: Вс июн 19, 2016 09:32:03

Сообщение Reflector »

[uquote="СКАЗОЧНИК",url="/forum/viewtopic.php?p=3560242#p3560242"]про прямо и косвенно я правильно понял? )[/uquote]
Правильно, но над скоростью нужно еще поработать :)
Идёт направо - песнь заводит, Налево - сказку говорит.
Аватара пользователя
Сообщения: 5000
Зарегистрирован: Чт апр 21, 2011 17:55:50
Откуда: Иркутск

Сообщение СКАЗОЧНИК »

Какой скоростью? :shock:

Вот так я сижу изучаю даташит на этот МК...
Изображение Изображение


З.Ы. :beer: за помощь благодарю.

Добавлено after 59 minutes 5 seconds:
И да, увидел я в МэмориМэпинг адреса портов. )))
И теперь, вроде дошло до меня по ним.
Например, портЕ имеет адрес 0х40011800. И регистр GPIOE_CLR находится по этому адресу. И дефайнить теперь я его сам могу в любое другое обозначение. И следующий регистр GPIOE_CRH будет по адресу 0х40011800 + 0х04 = 0х40011804. и т.д. и т.п.
Станислав
Электрический кот
Аватара пользователя
Сообщения: 1029
Зарегистрирован: Сб мар 09, 2013 11:29:22
Откуда: 40RUS, Жуков

Сообщение 240265 »

stm32f10x.h Про адреса.

/** @addtogroup Peripheral_memory_map
* @{
*/
#define FLASH_BASE ((uint32_t)0x08000000)
.
.
.
IVL ex UA6PJ
Собутыльник Кота
Аватара пользователя
Сообщения: 2567
Зарегистрирован: Вт май 01, 2018 19:44:47

Сообщение VladislavS »

[uquote="СКАЗОЧНИК",url="/forum/viewtopic.php?p=3560252#p3560252"]Например, портЕ имеет адрес 0х40011800. И регистр GPIOE_CLR находится по этому адресу. И дефайнить теперь я его сам могу в любое другое обозначение.[/uquote]Да что же это за маниакальное желение новичкков всё передефайнить. Это чтобы ваш код был максимально непонятным и никто на форуме не смог помочь? Чем вам дефайны от производителя не угодили? Зачем делать то что уже сделано внося свои ошибки?
Ответить

Вернуться в «ARM»