STM32 новичку в ARM что к чему
- СКАЗОЧНИК
- Идёт направо - песнь заводит, Налево - сказку говорит.
- Сообщения: 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.
Все правильно. 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 что к чему
Показывает-то 64К, и по даташиту 64К. Но большой шанс, что реально там внутри 128к. По крайней мере, в тех BluePill, с которыми сейчас разбираюсь я, после небольших манипуляций с фалом для линкера и конфигом для OpenOCD я вполне себе все 128кБ использую. Последние 8кБ использую для эмуляции EEPROM, а так размеры прошивки уже к 75кБ подобрались, и всё ОК работает..
Re: STM32 новичку в ARM что к чему
[uquote="WiseLord",url="/forum/viewtopic.php?p=3555231#p3555231"]По крайней мере, в тех BluePill, с которыми сейчас разбираюсь я, после небольших манипуляций с фалом для линкера и конфигом для OpenOCD я вполне себе все 128кБ использую.[/uquote]
Зачем что-то править для 103C8, если можно просто изначально исходить из того, что это 103CB? Тем более в других мк может быть больше не только флеша, но и RAM, плюс добавляется какая-то периферия.
Зачем что-то править для 103C8, если можно просто изначально исходить из того, что это 103CB? Тем более в других мк может быть больше не только флеша, но и RAM, плюс добавляется какая-то периферия.
- СКАЗОЧНИК
- Идёт направо - песнь заводит, Налево - сказку говорит.
- Сообщения: 5000
- Зарегистрирован: Чт апр 21, 2011 17:55:50
- Откуда: Иркутск
Re: STM32 новичку в ARM что к чему
Скажите лучше мне, что такое КУЧА?
А потом скажите, что такое "Сущности"? Я прочитал об этом где-то, разглядывая блок-схему тактирования МК. Там эти "сущности" были выделены серым цветом (квадратики такие с коэффициентом деления). Я скачал новый RM, но у него все в одном цвете.
Прошу прощения за глупые вопросы.
Добавлено after 40 seconds:
Не, про первое я уже нашел. А вот про Сущности
А потом скажите, что такое "Сущности"? Я прочитал об этом где-то, разглядывая блок-схему тактирования МК. Там эти "сущности" были выделены серым цветом (квадратики такие с коэффициентом деления). Я скачал новый RM, но у него все в одном цвете.
Прошу прощения за глупые вопросы.
Добавлено after 40 seconds:
Не, про первое я уже нашел. А вот про Сущности
Станислав
- WiseLord
- Друг Кота
- Сообщения: 4905
- Зарегистрирован: Чт апр 11, 2013 11:19:59
- Откуда: Минск
- Контактная информация:
Re: STM32 новичку в ARM что к чему
Reflector
Тот же OpenOCD умеет детектировать тип МК по его ID регистрам и просто так не даёт записать прошивку размером более 128кБ, если он определил размер банка памяти как 64кБ. Поэтому конфиг OpenOCD приходится подправлять.
И другие утилиты не факт что позволят записать больше "официального" размера.
Тот же 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 что к чему
Нет, это просто много шрифтов.
RLE-сжатие сильно помогает, но всё равно, использование каждого шрифта где-то 5..7кБ добавляет к размеру прошивки.
RLE-сжатие сильно помогает, но всё равно, использование каждого шрифта где-то 5..7кБ добавляет к размеру прошивки.
Re: STM32 новичку в ARM что к чему
[uquote="WiseLord",url="/forum/viewtopic.php?p=3555247#p3555247"]Тот же OpenOCD умеет детектировать тип МК по его ID регистрам и просто так не даёт записать прошивку размером более 128кБ, если он определил размер банка памяти как 64кБ. Поэтому конфиг OpenOCD приходится подправлять.[/uquote]
У меня кода-то были похожие проблемы, как раз с OpenOCD, но я давно от него отказался, т.к. как минимум он очень медленный... Но ладно OpenOCD, остается еще скрипт линкера, а в случае дополнительной периферии еще и хедеры, их то смысла править нет никакого.
У меня кода-то были похожие проблемы, как раз с OpenOCD, но я давно от него отказался, т.к. как минимум он очень медленный... Но ладно OpenOCD, остается еще скрипт линкера, а в случае дополнительной периферии еще и хедеры, их то смысла править нет никакого.
Re: STM32 новичку в ARM что к чему
В C8 и CB один и тот же кристалл, а значит одинаковый объем памяти.prinv писал(а):В МК 64KB - это же C8, а не CB
https://ru.wikipedia.org/wiki/Куча_(память)СКАЗОЧНИК писал(а):Скажите лучше мне, что такое КУЧА?
Для STM32 есть много бесплатных IDE без ограничений.СКАЗОЧНИК писал(а):И мне Кейл без взлома не даст больше 32 накатать.
- СКАЗОЧНИК
- Идёт направо - песнь заводит, Налево - сказку говорит.
- Сообщения: 5000
- Зарегистрирован: Чт апр 21, 2011 17:55:50
- Откуда: Иркутск
Re: STM32 новичку в ARM что к чему
Сижу ковыряюсь в блок схеме по тактированию МК. Скажите пожалуйста (я еще не дочитал до таймеров в RM0008 и это будет не скоро), судя по схеме, у таймеров нету своих делителей? Т.е. если я хочу сделать таймер медленнее, то мне надо сделать медленнее всю шину?
Или про делители таймеров отдельно написано?
Прошу прощения за очередной глупый вопрос...
Или про делители таймеров отдельно написано?
Прошу прощения за очередной глупый вопрос...
Станислав
Re: STM32 новичку в ARM что к чему
[uquote="СКАЗОЧНИК",url="/forum/viewtopic.php?p=3555326#p3555326"]Прошу прощения за очередной глупый вопрос...[/uquote]
Переключиться в RM на описание таймеров дело нескольких секунд, про делители там, естественно в самом начале написано, итого можно было самому во всем разобраться быстрее, чем написать запрос на форуме
Переключиться в RM на описание таймеров дело нескольких секунд, про делители там, естественно в самом начале написано, итого можно было самому во всем разобраться быстрее, чем написать запрос на форуме
- СКАЗОЧНИК
- Идёт направо - песнь заводит, Налево - сказку говорит.
- Сообщения: 5000
- Зарегистрирован: Чт апр 21, 2011 17:55:50
- Откуда: Иркутск
Re: STM32 новичку в ARM что к чему
Не, я так не могу. Хочу с живыми людьми пообщаться, хоть и виртуально. Тем более, у меня слепой метод набора текста и не составляет большой трудности написать здесь пару строчек.
Да и когда в одного все это читаешь (тем более на английском, с которым не совсем плохо, но и не хорошо у меня), голова начинает отключаться. Надо на что-то отвлекаться.
За ответ спасибо.
Добавлено after 10 minutes 52 seconds:
А еще там нарисовано, что ядро, память и ДМА тактируются от шины АНВ. И с максимально-настроенной частотой. однако там же нарисована интересная штуковина типа Clock Enable. И у всей периферии такие же. Понятно, что вокруг все выключено изначально и надо будет включить тактирование того, что используем.
Но ядро и память??? Они тоже изначально выключены?
Станислав
- afz
- Опытный кот
- Сообщения: 744
- Зарегистрирован: Сб дек 22, 2012 08:17:42
- Откуда: Караганда, Казахстан
Re: STM32 новичку в ARM что к чему
А зачем ей знать? Куча растет снизу вверх, стек сверху вниз. Если они встретятся, конечно, будет катастрофа, но,чаще всего, в тех задачах, которые решают на АВР-ках, этого не происходит. И ни у кого голова не болит... В отличие от STM32, где дефолтные размеры стека и кучи указаны маленькими и сплошь и рядом народ вдруг с паническим воплем "почему у меня hard fault" лезет в конференции, на что получает стандартный ответ "Стек увеличь".Мурик писал(а):Стек и куча не могут быть в одной области памяти. Откуда студия знает сколько из свободной памяти нужно выделить под стек, а сколько под кучу?
Правильно, но не поэтому. А, может быть, и совсем неправильно. Отдай стеку с кучей всю память, оставшуюся свободной после статических переменных и программа сама разберется, сколько из этой памяти уйдет под стек, сколько под кучу. Динамически, в процессе исполнения.Мурик писал(а):И это правильно. Потому что если куча не используется, то для нее можно не выделять память.
Проверка, конечно, нужная, но не особо информативная. Поскольку большинство народа рулит размерами стека и кучи, что называется, "от фонаря". Мало? Добавим. Сделаем в 2-4-8-16 раз больше, и вперед! Вот, как раз, от чрезмерного увеличения стека с кучей в процессе такого отфонарного подбора эта проверка и защищает. То есть, бодрое преодоление трудностей, специально для этой цели придуманных.Мурик писал(а):Явно заданные размеры стека и кучи, позволят определить что переменные дошли до кучи со стеком.
В скрипте линкера есть такая проверка.
Мне кажется, вся эта ситуация - результат некорректного "обратного масштабирования" с "больших" систем на МК. В большой системе всеми этими делами рулит система управления виртуальной памятью, вопросов с размерами стека и кучи просто не возникает. А в большинстве МК ничего такого нет, да даже если и есть, то не используется, по причине отсутствия "большой" операционки и ненадобности оной. Ну, и решили свалить это дело на программиста...
То есть, конечно, еще могут быть дополнительные типы внешней памяти, вроде SDRAM на "продвинутых" STM32, но это, по-любому, требует специальных действий, такую память нельзя использовать таким же образом, как и встроенную SRAM, хотя бы потому, что она тормознее, и уж под стек она точно не годится.
Добавлено after 25 minutes 29 seconds:
И, кстати, я не понимаю, с чего это народ так боится, что стек вдруг переполнится из-за ошибки в программе? Да, если просто не хватает памяти, надо брать кристалл "пожирнее", а вот так, вроде всего хватает, а допустил какую-то ошибку, и стек переполнился? С чего бы это вдруг? Ладно, в программе на асме можно такое накосячить запросто, но для STM32 на асме, обычно, не программируют. А так, единственное, что приходит в голову - зациклившая рекурсия, но рекурсивная программа на МК - это как-то крутовато...
А иначе, стек имеет вполне конечные размеры, из расчета на максимум вложенности, если оно не лезет, значит, как я уже отметил, просто нужен камешек "пожирнее", или нужно менять алгоритм. В общем, неправильно все это...
Впрочем, все это уже обсуждалось, здесь же, ИМХО, осенью.
Кто мешает тебе выдумать порох непромокаемый? (К. Прутков, мысль № 133)
Re: STM32 новичку в ARM что к чему
Можно создать локальный экземпляр структуры на пару КБ или больше и стек переполнен. Маловероятно? Посмотрите на структуры FafFs.afz писал(а):допустил какую-то ошибку, и стек переполнился? С чего бы это вдруг? Ладно, в программе на асме можно такое накосячить запросто, но для STM32 на асме, обычно, не программируют. А так, единственное, что приходит в голову - зациклившая рекурсия
Код: Выделить всё
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;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 что к чему
Это не ошибка. Как говорили лет 20-25 назад, "Это не баг. Это фича!"Мурик писал(а):Обратите внимание на массивы байт и символов. _MAX_SS равно 512, а _MAX_LFN 255.
Собственно, не так это и важно. Ну, легла эта структура в стек, учтите этот факт, т.е. увеличьте размер стека, и вперед! На тех же АВРках и делать ничего не надо, поскольку под стек с кучей отдана вся свободная память, а вот на STM32 придется подкрутить. Ну, и если все равно не лезет, значит нужен камень потолще, тут уж однозначно.Мурик писал(а):Во многих статьях эти экземпляры структур локальные (не знаю чем руководствовались их авторы, неужели не знали размеры структур?).
Это я к тому, что навязанная нам обязанность самостоятельно рулить размерами стека и кучи, в общем-то, бесполезна. Ни отладку она не облегчает, ни от ошибок не защищает, да даже переполнение стека, и то толком не ловится, Hard Fault - это, в общем-то, косвенное свидетельство его переполнения.
Кто мешает тебе выдумать порох непромокаемый? (К. Прутков, мысль № 133)
Re: STM32 новичку в ARM что к чему
Я и не писал что это ошибка. Ошибкой будет создать несколько локальных экземпляров таких структур, что многие делают судя по коду найденному в сети. Даже 1 КБ стека будет мало.afz писал(а):Это не ошибка.
Судя по статьям в сети, их авторы даже не смотрели на структуры и не подозревают сколько нужно стека под них. А после, другие найдя статью копируют код и получают ошибки во время работы из-за переполнения стека. Это я к тому что используя код написанный другими нельзя быть точно уверенным что он будет работать нормально.afz писал(а):Ну, легла эта структура в стек, учтите этот факт, т.е. увеличьте размер стека, и вперед!
- Oxford
- Опытный кот
- Сообщения: 819
- Зарегистрирован: Вт окт 23, 2012 13:17:25
- Откуда: Прокопьевск
- Контактная информация:
Re: STM32 новичку в ARM что к чему
[uquote="WiseLord",url="/forum/viewtopic.php?p=3555253#p3555253"]Нет, это просто много шрифтов.
RLE-сжатие сильно помогает, но всё равно, использование каждого шрифта где-то 5..7кБ добавляет к размеру прошивки.[/uquote]
А зачем столько? Перед пацанами понтонуться? Было бы 200 шрифтов вы бы их все залили.
RLE-сжатие сильно помогает, но всё равно, использование каждого шрифта где-то 5..7кБ добавляет к размеру прошивки.[/uquote]
А зачем столько? Перед пацанами понтонуться? Было бы 200 шрифтов вы бы их все залили.
Инженер R@D
Telegram чат: https://t.me/radiowolf или в поиске приложения @radiowolf. Личка:@cncoxford
Telegram чат: https://t.me/radiowolf или в поиске приложения @radiowolf. Личка:@cncoxford
- Oxford
- Опытный кот
- Сообщения: 819
- Зарегистрирован: Вт окт 23, 2012 13:17:25
- Откуда: Прокопьевск
- Контактная информация:
Re: STM32 новичку в ARM что к чему
Сменные экраны что ли для пользователя? Потому как прошивки компилируются под нужный экран.
Добавлено after 4 minutes 59 seconds:
[uquote="WiseLord",url="/forum/viewtopic.php?p=3556309#p3556309"]В прошивку попадают только те, которые используются с данным разрешением.[/uquote]
Если один шрифт попадает в прошивку человек у вас спрашивал 80кб откуда много, вы ответили что в прошивке шрифтов много.
Скользкий вы человек, переобулись на лету после моего замечания.
Добавлено 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
Telegram чат: https://t.me/radiowolf или в поиске приложения @radiowolf. Личка:@cncoxford
- WiseLord
- Друг Кота
- Сообщения: 4905
- Зарегистрирован: Чт апр 11, 2013 11:19:59
- Откуда: Минск
- Контактная информация:
Re: STM32 новичку в ARM что к чему
В прошивку попадает около 5..6 шрифтов - это килобайт 40, остальное уже код программы. На скриншоте как минимум три разных шрифта видны, откуда Вы один придумали? А это ведь лишь стартовый экран с часами.
Ах да, ещё иконки подобного же формата. Но там лишь с десятка два иконок, от 24x24 до 64x64, в зависимости от разрешения экрана, мелочь, в сравнении со шрифтами.
Ах да, ещё иконки подобного же формата. Но там лишь с десятка два иконок, от 24x24 до 64x64, в зависимости от разрешения экрана, мелочь, в сравнении со шрифтами.



