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

Кто любит RISC в жизни, заходим, не стесняемся.
Аватара пользователя
СКАЗОЧНИК
Идёт направо - песнь заводит, Налево - сказку говорит.
Сообщения: 5000
Зарегистрирован: Чт апр 21, 2011 17:55:50
Откуда: Иркутск

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

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

Я о том же, но ... кажется понял я уже чего это такое.

Все правильно. 64 кБ.
Просто я смотрел в настройках дебагера в Кейле, а там он эту информацию похоже, взял из подключенной библиотеки, как Медиум-денсити.(средней плотности).
Может надо просто другую либу подключить и будет по другому видеть.
Сейчас запустил через СТ-Линк утилиу отдельную, там видит все нормально..

Добавлено after 1 minute 51 second:
И он правильно, Медиум-денсити

Добавлено after 22 seconds:
Low-density devices are STM32F101xx, STM32F102xx and STM32F103xx
microcontrollers where the Flash memory density ranges between 16 and 32 Kbytes.
Medium-density devices are STM32F101xx, STM32F102xx and STM32F103xx
microcontrollers where the Flash memory density ranges between 64 and 128 Kbytes.
High-density devices are STM32F101xx and STM32F103xx microcontrollers where the
Flash memory density ranges between 256 and 512 Kbytes.
XL-density devices are STM32F101xx and STM32F103xx microcontrollers where the
Flash memory density ranges between 768 Kbytes and 1 Mbyte.
Станислав
Реклама
Аватара пользователя
WiseLord
Друг Кота
Сообщения: 4905
Зарегистрирован: Чт апр 11, 2013 11:19:59
Откуда: Минск
Контактная информация:

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

Сообщение WiseLord »

Показывает-то 64К, и по даташиту 64К. Но большой шанс, что реально там внутри 128к. По крайней мере, в тех BluePill, с которыми сейчас разбираюсь я, после небольших манипуляций с фалом для линкера и конфигом для OpenOCD я вполне себе все 128кБ использую. Последние 8кБ использую для эмуляции EEPROM, а так размеры прошивки уже к 75кБ подобрались, и всё ОК работает..
Реклама
Reflector
Поставщик валерьянки для Кота
Сообщения: 2089
Зарегистрирован: Вс июн 19, 2016 09:32:03

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

Сообщение Reflector »

[uquote="WiseLord",url="/forum/viewtopic.php?p=3555231#p3555231"]По крайней мере, в тех BluePill, с которыми сейчас разбираюсь я, после небольших манипуляций с фалом для линкера и конфигом для OpenOCD я вполне себе все 128кБ использую.[/uquote]
Зачем что-то править для 103C8, если можно просто изначально исходить из того, что это 103CB? Тем более в других мк может быть больше не только флеша, но и RAM, плюс добавляется какая-то периферия.
Аватара пользователя
СКАЗОЧНИК
Идёт направо - песнь заводит, Налево - сказку говорит.
Сообщения: 5000
Зарегистрирован: Чт апр 21, 2011 17:55:50
Откуда: Иркутск

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

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

Скажите лучше мне, что такое КУЧА?

А потом скажите, что такое "Сущности"? Я прочитал об этом где-то, разглядывая блок-схему тактирования МК. Там эти "сущности" были выделены серым цветом (квадратики такие с коэффициентом деления). Я скачал новый RM, но у него все в одном цвете.

Прошу прощения за глупые вопросы.

Добавлено after 40 seconds:
Не, про первое я уже нашел. А вот про Сущности
Станислав
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
WiseLord
Друг Кота
Сообщения: 4905
Зарегистрирован: Чт апр 11, 2013 11:19:59
Откуда: Минск
Контактная информация:

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

Сообщение WiseLord »

Reflector
Тот же OpenOCD умеет детектировать тип МК по его ID регистрам и просто так не даёт записать прошивку размером более 128кБ, если он определил размер банка памяти как 64кБ. Поэтому конфиг OpenOCD приходится подправлять.
И другие утилиты не факт что позволят записать больше "официального" размера.
Последний раз редактировалось WiseLord Ср янв 23, 2019 17:02:11, всего редактировалось 1 раз.
Реклама
Аватара пользователя
СКАЗОЧНИК
Идёт направо - песнь заводит, Налево - сказку говорит.
Сообщения: 5000
Зарегистрирован: Чт апр 21, 2011 17:55:50
Откуда: Иркутск

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

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

И мне Кейл без взлома не даст больше 32 накатать. ))) Но я еще и 500 байт не сделал... то, что у вас уже под 80 кБайт - это очень крутой проектище.
Станислав
Реклама
Аватара пользователя
WiseLord
Друг Кота
Сообщения: 4905
Зарегистрирован: Чт апр 11, 2013 11:19:59
Откуда: Минск
Контактная информация:

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

Сообщение WiseLord »

Нет, это просто много шрифтов.

RLE-сжатие сильно помогает, но всё равно, использование каждого шрифта где-то 5..7кБ добавляет к размеру прошивки.
Reflector
Поставщик валерьянки для Кота
Сообщения: 2089
Зарегистрирован: Вс июн 19, 2016 09:32:03

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

Сообщение Reflector »

[uquote="WiseLord",url="/forum/viewtopic.php?p=3555247#p3555247"]Тот же OpenOCD умеет детектировать тип МК по его ID регистрам и просто так не даёт записать прошивку размером более 128кБ, если он определил размер банка памяти как 64кБ. Поэтому конфиг OpenOCD приходится подправлять.[/uquote]
У меня кода-то были похожие проблемы, как раз с OpenOCD, но я давно от него отказался, т.к. как минимум он очень медленный... Но ладно OpenOCD, остается еще скрипт линкера, а в случае дополнительной периферии еще и хедеры, их то смысла править нет никакого.
Аватара пользователя
Мурик
Друг Кота
Сообщения: 3383
Зарегистрирован: Пн окт 11, 2010 19:00:08

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

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

prinv писал(а):В МК 64KB - это же C8, а не CB
В C8 и CB один и тот же кристалл, а значит одинаковый объем памяти. :)
СКАЗОЧНИК писал(а):Скажите лучше мне, что такое КУЧА?
https://ru.wikipedia.org/wiki/Куча_(память)
СКАЗОЧНИК писал(а):И мне Кейл без взлома не даст больше 32 накатать.
Для STM32 есть много бесплатных IDE без ограничений. :)
Аватара пользователя
СКАЗОЧНИК
Идёт направо - песнь заводит, Налево - сказку говорит.
Сообщения: 5000
Зарегистрирован: Чт апр 21, 2011 17:55:50
Откуда: Иркутск

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

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

Сижу ковыряюсь в блок схеме по тактированию МК. Скажите пожалуйста (я еще не дочитал до таймеров в RM0008 и это будет не скоро), судя по схеме, у таймеров нету своих делителей? Т.е. если я хочу сделать таймер медленнее, то мне надо сделать медленнее всю шину? :shock:

Или про делители таймеров отдельно написано? :oops:

Прошу прощения за очередной глупый вопрос...
Станислав
Reflector
Поставщик валерьянки для Кота
Сообщения: 2089
Зарегистрирован: Вс июн 19, 2016 09:32:03

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

Сообщение Reflector »

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

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

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

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

За ответ спасибо. :beer:

Добавлено after 10 minutes 52 seconds:
А еще там нарисовано, что ядро, память и ДМА тактируются от шины АНВ. И с максимально-настроенной частотой. однако там же нарисована интересная штуковина типа Clock Enable. И у всей периферии такие же. Понятно, что вокруг все выключено изначально и надо будет включить тактирование того, что используем.
Но ядро и память??? Они тоже изначально выключены?
Станислав
Аватара пользователя
afz
Опытный кот
Сообщения: 744
Зарегистрирован: Сб дек 22, 2012 08:17:42
Откуда: Караганда, Казахстан

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

Сообщение afz »

Мурик писал(а):Стек и куча не могут быть в одной области памяти. Откуда студия знает сколько из свободной памяти нужно выделить под стек, а сколько под кучу?
А зачем ей знать? Куча растет снизу вверх, стек сверху вниз. Если они встретятся, конечно, будет катастрофа, но,чаще всего, в тех задачах, которые решают на АВР-ках, этого не происходит. И ни у кого голова не болит... В отличие от STM32, где дефолтные размеры стека и кучи указаны маленькими и сплошь и рядом народ вдруг с паническим воплем "почему у меня hard fault" лезет в конференции, на что получает стандартный ответ "Стек увеличь".
Мурик писал(а):И это правильно. Потому что если куча не используется, то для нее можно не выделять память.
Правильно, но не поэтому. А, может быть, и совсем неправильно. Отдай стеку с кучей всю память, оставшуюся свободной после статических переменных и программа сама разберется, сколько из этой памяти уйдет под стек, сколько под кучу. Динамически, в процессе исполнения.
Мурик писал(а):Явно заданные размеры стека и кучи, позволят определить что переменные дошли до кучи со стеком.
В скрипте линкера есть такая проверка.
Проверка, конечно, нужная, но не особо информативная. Поскольку большинство народа рулит размерами стека и кучи, что называется, "от фонаря". Мало? Добавим. Сделаем в 2-4-8-16 раз больше, и вперед! Вот, как раз, от чрезмерного увеличения стека с кучей в процессе такого отфонарного подбора эта проверка и защищает. То есть, бодрое преодоление трудностей, специально для этой цели придуманных.

Мне кажется, вся эта ситуация - результат некорректного "обратного масштабирования" с "больших" систем на МК. В большой системе всеми этими делами рулит система управления виртуальной памятью, вопросов с размерами стека и кучи просто не возникает. А в большинстве МК ничего такого нет, да даже если и есть, то не используется, по причине отсутствия "большой" операционки и ненадобности оной. Ну, и решили свалить это дело на программиста...

То есть, конечно, еще могут быть дополнительные типы внешней памяти, вроде SDRAM на "продвинутых" STM32, но это, по-любому, требует специальных действий, такую память нельзя использовать таким же образом, как и встроенную SRAM, хотя бы потому, что она тормознее, и уж под стек она точно не годится.

Добавлено after 25 minutes 29 seconds:
И, кстати, я не понимаю, с чего это народ так боится, что стек вдруг переполнится из-за ошибки в программе? Да, если просто не хватает памяти, надо брать кристалл "пожирнее", а вот так, вроде всего хватает, а допустил какую-то ошибку, и стек переполнился? С чего бы это вдруг? Ладно, в программе на асме можно такое накосячить запросто, но для STM32 на асме, обычно, не программируют. А так, единственное, что приходит в голову - зациклившая рекурсия, но рекурсивная программа на МК - это как-то крутовато...

А иначе, стек имеет вполне конечные размеры, из расчета на максимум вложенности, если оно не лезет, значит, как я уже отметил, просто нужен камешек "пожирнее", или нужно менять алгоритм. В общем, неправильно все это...

Впрочем, все это уже обсуждалось, здесь же, ИМХО, осенью.
Кто мешает тебе выдумать порох непромокаемый? (К. Прутков, мысль № 133)
Аватара пользователя
Мурик
Друг Кота
Сообщения: 3383
Зарегистрирован: Пн окт 11, 2010 19:00:08

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

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

afz писал(а):допустил какую-то ошибку, и стек переполнился? С чего бы это вдруг? Ладно, в программе на асме можно такое накосячить запросто, но для STM32 на асме, обычно, не программируют. А так, единственное, что приходит в голову - зациклившая рекурсия
Можно создать локальный экземпляр структуры на пару КБ или больше и стек переполнен. Маловероятно? Посмотрите на структуры FafFs.

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

typedef struct {
	BYTE	fs_type;		/* File system type (0:N/A) */
	BYTE	drv;			/* Physical drive number */
	BYTE	n_fats;			/* Number of FATs (1 or 2) */
	BYTE	wflag;			/* win[] flag (b0:dirty) */
	BYTE	fsi_flag;		/* FSINFO flags (b7:disabled, b0:dirty) */
	WORD	id;				/* File system mount ID */
	WORD	n_rootdir;		/* Number of root directory entries (FAT12/16) */
	WORD	csize;			/* Cluster size [sectors] */
#if _MAX_SS != _MIN_SS
	WORD	ssize;			/* Sector size (512, 1024, 2048 or 4096) */
#endif
#if _USE_LFN != 0
	WCHAR*	lfnbuf;			/* LFN working buffer */
#endif
#if _FS_EXFAT
	BYTE*	dirbuf;			/* Directory entry block scratchpad buffer */
#endif
#if _FS_REENTRANT
	_SYNC_t	sobj;			/* Identifier of sync object */
#endif
#if !_FS_READONLY
	DWORD	last_clst;		/* Last allocated cluster */
	DWORD	free_clst;		/* Number of free clusters */
#endif
#if _FS_RPATH != 0
	DWORD	cdir;			/* Current directory start cluster (0:root) */
#if _FS_EXFAT
	DWORD	cdc_scl;		/* Containing directory start cluster (invalid when cdir is 0) */
	DWORD	cdc_size;		/* b31-b8:Size of containing directory, b7-b0: Chain status */
	DWORD	cdc_ofs;		/* Offset in the containing directory (invalid when cdir is 0) */
#endif
#endif
	DWORD	n_fatent;		/* Number of FAT entries (number of clusters + 2) */
	DWORD	fsize;			/* Size of an FAT [sectors] */
	DWORD	volbase;		/* Volume base sector */
	DWORD	fatbase;		/* FAT base sector */
	DWORD	dirbase;		/* Root directory base sector/cluster */
	DWORD	database;		/* Data base sector */
	DWORD	winsect;		/* Current sector appearing in the win[] */
	BYTE	win[_MAX_SS];	/* Disk access window for Directory, FAT (and file data at tiny cfg) */
} FATFS;


typedef struct {
	_FDID	obj;			/* Object identifier (must be the 1st member to detect invalid object pointer) */
	BYTE	flag;			/* File status flags */
	BYTE	err;			/* Abort flag (error code) */
	FSIZE_t	fptr;			/* File read/write pointer (Zeroed on file open) */
	DWORD	clust;			/* Current cluster of fpter (invalid when fprt is 0) */
	DWORD	sect;			/* Sector number appearing in buf[] (0:invalid) */
#if !_FS_READONLY
	DWORD	dir_sect;		/* Sector number containing the directory entry */
	BYTE*	dir_ptr;		/* Pointer to the directory entry in the win[] */
#endif
#if _USE_FASTSEEK
	DWORD*	cltbl;			/* Pointer to the cluster link map table (nulled on open, set by application) */
#endif
#if !_FS_TINY
	BYTE	buf[_MAX_SS];	/* File private data read/write window */
#endif
} FIL;


typedef struct {
	FSIZE_t	fsize;			/* File size */
	WORD	fdate;			/* Modified date */
	WORD	ftime;			/* Modified time */
	BYTE	fattrib;		/* File attribute */
#if _USE_LFN != 0
	TCHAR	altname[13];			/* Altenative file name */
	TCHAR	fname[_MAX_LFN + 1];	/* Primary file name */
#else
	TCHAR	fname[13];		/* File name */
#endif
} FILINFO;
Обратите внимание на массивы байт и символов. _MAX_SS равно 512, а _MAX_LFN 255. Во многих статьях эти экземпляры структур локальные (не знаю чем руководствовались их авторы, неужели не знали размеры структур?). https://eax.me/stm32-fatfs/
http://we.easyelectronics.ru/aliaksei/s ... schim.html
http://mycontroller.ru/old_site/stm32-f ... efault.htm
https://radiokot.ru/forum/viewtopic.php ... 0#p3433010
Аватара пользователя
afz
Опытный кот
Сообщения: 744
Зарегистрирован: Сб дек 22, 2012 08:17:42
Откуда: Караганда, Казахстан

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

Сообщение afz »

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

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

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

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

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

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

Сообщение Oxford »

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

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

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

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

Сообщение WiseLord »

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

Изображение

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

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

Сообщение 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
Аватара пользователя
WiseLord
Друг Кота
Сообщения: 4905
Зарегистрирован: Чт апр 11, 2013 11:19:59
Откуда: Минск
Контактная информация:

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

Сообщение WiseLord »

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

Ах да, ещё иконки подобного же формата. Но там лишь с десятка два иконок, от 24x24 до 64x64, в зависимости от разрешения экрана, мелочь, в сравнении со шрифтами.
Ответить

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