Так вот, Keil c st-link v2 это китайское чудо прошивает нормально, а вот Atollic отказывается.
STM32 новичку в ARM что к чему
Для информации: получил blue-pill с Ali. Оказалось, что там вкрячен не STM32F103, а SC32F103.
Так вот, Keil c st-link v2 это китайское чудо прошивает нормально, а вот Atollic отказывается.
Так вот, Keil c st-link v2 это китайское чудо прошивает нормально, а вот Atollic отказывается.
Никакая контра не уйдёт от нас
- Реклама
- Сообщения: 3386
- Зарегистрирован: Пн окт 11, 2010 19:00:08
Стек и куча не могут быть в одной области памяти. Откуда студия знает сколько из свободной памяти нужно выделить под стек, а сколько под кучу?afz писал(а):Студия отдает под стек и кучу всю свободную оперативку.
И это правильно. Потому что если куча не используется, то для нее можно не выделять память. Явно заданные размеры стека и кучи, позволят определить что переменные дошли до кучи со стеком.afz писал(а):чтобы программист сам указывал размеры стека и кучи.
В скрипте линкера есть такая проверка.
Код: Выделить всё
/* Set stack top to end of RAM, and stack limit move down by
* size of stack_dummy section */
__StackTop = ORIGIN(RAM) + LENGTH(RAM);
__StackLimit = __StackTop - SIZEOF(.stack_dummy);
PROVIDE(__stack = __StackTop);
/* Check if data + heap + stack exceeds RAM limit */
ASSERT(__StackLimit >= __HeapLimit, "region RAM overflowed with stack")Ссылку на продавца можно?prinv писал(а):Оказалось, что там не STM32F103, а SC32F103.
[uquote="Мурик",url="/forum/viewtopic.php?p=3555110#p3555110"]Ссылку на продавца можно?[/uquote]
Ссылка
Ссылка
Никакая контра не уйдёт от нас
- Сообщения: 3386
- Зарегистрирован: Пн окт 11, 2010 19:00:08
В заголовке и описании упоминается что на плате SC32F103C8T6. Так что продавец предупредил об этом.
В МК 128 КБ флеша как в STM32?
В МК 128 КБ флеша как в STM32?
У меня тоже блюпилл, но там стоит настоящий СТМ32. Однако для С8Т6 вроде как заявлено 64 кБ флеша, а мой СТ-Линк в Кейле показал его как 128 кБ.
Станислав
- Реклама
[uquote="Мурик",url="/forum/viewtopic.php?p=3555119#p3555119"]В заголовке и описании упоминается что на плате SC32F103C8T6. Так что продавец предупредил об этом.
В МК 128 КБ флеша как в STM32?[/uquote]
Это понятно, что в тексте упоминается, но сначала-то идёт STM32
Да пофиг, за 100 рублей
В МК 64KB - это же C8, а не CB
Добавлено after 8 minutes 54 seconds:
[uquote="СКАЗОЧНИК",url="/forum/viewtopic.php?p=3555126#p3555126"]У меня тоже блюпилл, но там стоит настоящий СТМ32. Однако для С8Т6 вроде как заявлено 64 кБ флеша, а мой СТ-Линк в Кейле показал его как 128 кБ.[/uquote]
Блин, и у меня Кейл показывает 128К, а ST-Link Utility - 64K.
Думаю, что Кейл гонит.
В МК 128 КБ флеша как в STM32?[/uquote]
Это понятно, что в тексте упоминается, но сначала-то идёт STM32
Да пофиг, за 100 рублей
В МК 64KB - это же C8, а не CB
Добавлено after 8 minutes 54 seconds:
[uquote="СКАЗОЧНИК",url="/forum/viewtopic.php?p=3555126#p3555126"]У меня тоже блюпилл, но там стоит настоящий СТМ32. Однако для С8Т6 вроде как заявлено 64 кБ флеша, а мой СТ-Линк в Кейле показал его как 128 кБ.[/uquote]
Блин, и у меня Кейл показывает 128К, а ST-Link Utility - 64K.
Думаю, что Кейл гонит.
Никакая контра не уйдёт от нас
Я о том же, но ... кажется понял я уже чего это такое.
Все правильно. 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.
Станислав
Показывает-то 64К, и по даташиту 64К. Но большой шанс, что реально там внутри 128к. По крайней мере, в тех BluePill, с которыми сейчас разбираюсь я, после небольших манипуляций с фалом для линкера и конфигом для OpenOCD я вполне себе все 128кБ использую. Последние 8кБ использую для эмуляции EEPROM, а так размеры прошивки уже к 75кБ подобрались, и всё ОК работает..
- Сообщения: 2089
- Зарегистрирован: Вс июн 19, 2016 09:32:03
[uquote="WiseLord",url="/forum/viewtopic.php?p=3555231#p3555231"]По крайней мере, в тех BluePill, с которыми сейчас разбираюсь я, после небольших манипуляций с фалом для линкера и конфигом для OpenOCD я вполне себе все 128кБ использую.[/uquote]
Зачем что-то править для 103C8, если можно просто изначально исходить из того, что это 103CB? Тем более в других мк может быть больше не только флеша, но и RAM, плюс добавляется какая-то периферия.
Зачем что-то править для 103C8, если можно просто изначально исходить из того, что это 103CB? Тем более в других мк может быть больше не только флеша, но и RAM, плюс добавляется какая-то периферия.
Скажите лучше мне, что такое КУЧА?
А потом скажите, что такое "Сущности"? Я прочитал об этом где-то, разглядывая блок-схему тактирования МК. Там эти "сущности" были выделены серым цветом (квадратики такие с коэффициентом деления). Я скачал новый RM, но у него все в одном цвете.
Прошу прощения за глупые вопросы.
Добавлено after 40 seconds:
Не, про первое я уже нашел. А вот про Сущности
А потом скажите, что такое "Сущности"? Я прочитал об этом где-то, разглядывая блок-схему тактирования МК. Там эти "сущности" были выделены серым цветом (квадратики такие с коэффициентом деления). Я скачал новый RM, но у него все в одном цвете.
Прошу прощения за глупые вопросы.
Добавлено after 40 seconds:
Не, про первое я уже нашел. А вот про Сущности
Станислав
Reflector
Тот же OpenOCD умеет детектировать тип МК по его ID регистрам и просто так не даёт записать прошивку размером более 128кБ, если он определил размер банка памяти как 64кБ. Поэтому конфиг OpenOCD приходится подправлять.
И другие утилиты не факт что позволят записать больше "официального" размера.
Тот же OpenOCD умеет детектировать тип МК по его ID регистрам и просто так не даёт записать прошивку размером более 128кБ, если он определил размер банка памяти как 64кБ. Поэтому конфиг OpenOCD приходится подправлять.
И другие утилиты не факт что позволят записать больше "официального" размера.
Последний раз редактировалось WiseLord Ср янв 23, 2019 17:02:11, всего редактировалось 1 раз.
И мне Кейл без взлома не даст больше 32 накатать. ))) Но я еще и 500 байт не сделал... то, что у вас уже под 80 кБайт - это очень крутой проектище.
Станислав
Нет, это просто много шрифтов.
RLE-сжатие сильно помогает, но всё равно, использование каждого шрифта где-то 5..7кБ добавляет к размеру прошивки.
RLE-сжатие сильно помогает, но всё равно, использование каждого шрифта где-то 5..7кБ добавляет к размеру прошивки.
- Сообщения: 2089
- Зарегистрирован: Вс июн 19, 2016 09:32:03
[uquote="WiseLord",url="/forum/viewtopic.php?p=3555247#p3555247"]Тот же OpenOCD умеет детектировать тип МК по его ID регистрам и просто так не даёт записать прошивку размером более 128кБ, если он определил размер банка памяти как 64кБ. Поэтому конфиг OpenOCD приходится подправлять.[/uquote]
У меня кода-то были похожие проблемы, как раз с OpenOCD, но я давно от него отказался, т.к. как минимум он очень медленный... Но ладно OpenOCD, остается еще скрипт линкера, а в случае дополнительной периферии еще и хедеры, их то смысла править нет никакого.
У меня кода-то были похожие проблемы, как раз с OpenOCD, но я давно от него отказался, т.к. как минимум он очень медленный... Но ладно OpenOCD, остается еще скрипт линкера, а в случае дополнительной периферии еще и хедеры, их то смысла править нет никакого.
- Сообщения: 3386
- Зарегистрирован: Пн окт 11, 2010 19:00:08
В C8 и CB один и тот же кристалл, а значит одинаковый объем памяти.prinv писал(а):В МК 64KB - это же C8, а не CB
https://ru.wikipedia.org/wiki/Куча_(память)СКАЗОЧНИК писал(а):Скажите лучше мне, что такое КУЧА?
Для STM32 есть много бесплатных IDE без ограничений.СКАЗОЧНИК писал(а):И мне Кейл без взлома не даст больше 32 накатать.
Сижу ковыряюсь в блок схеме по тактированию МК. Скажите пожалуйста (я еще не дочитал до таймеров в RM0008 и это будет не скоро), судя по схеме, у таймеров нету своих делителей? Т.е. если я хочу сделать таймер медленнее, то мне надо сделать медленнее всю шину?
Или про делители таймеров отдельно написано?
Прошу прощения за очередной глупый вопрос...
Или про делители таймеров отдельно написано?
Прошу прощения за очередной глупый вопрос...
Станислав
- Сообщения: 2089
- Зарегистрирован: Вс июн 19, 2016 09:32:03
[uquote="СКАЗОЧНИК",url="/forum/viewtopic.php?p=3555326#p3555326"]Прошу прощения за очередной глупый вопрос...[/uquote]
Переключиться в RM на описание таймеров дело нескольких секунд, про делители там, естественно в самом начале написано, итого можно было самому во всем разобраться быстрее, чем написать запрос на форуме
Переключиться в RM на описание таймеров дело нескольких секунд, про делители там, естественно в самом начале написано, итого можно было самому во всем разобраться быстрее, чем написать запрос на форуме
Не, я так не могу. Хочу с живыми людьми пообщаться, хоть и виртуально. Тем более, у меня слепой метод набора текста и не составляет большой трудности написать здесь пару строчек.
Да и когда в одного все это читаешь (тем более на английском, с которым не совсем плохо, но и не хорошо у меня), голова начинает отключаться. Надо на что-то отвлекаться.
За ответ спасибо.
Добавлено after 10 minutes 52 seconds:
А еще там нарисовано, что ядро, память и ДМА тактируются от шины АНВ. И с максимально-настроенной частотой. однако там же нарисована интересная штуковина типа Clock Enable. И у всей периферии такие же. Понятно, что вокруг все выключено изначально и надо будет включить тактирование того, что используем.
Но ядро и память??? Они тоже изначально выключены?
Станислав
А зачем ей знать? Куча растет снизу вверх, стек сверху вниз. Если они встретятся, конечно, будет катастрофа, но,чаще всего, в тех задачах, которые решают на АВР-ках, этого не происходит. И ни у кого голова не болит... В отличие от STM32, где дефолтные размеры стека и кучи указаны маленькими и сплошь и рядом народ вдруг с паническим воплем "почему у меня hard fault" лезет в конференции, на что получает стандартный ответ "Стек увеличь".Мурик писал(а):Стек и куча не могут быть в одной области памяти. Откуда студия знает сколько из свободной памяти нужно выделить под стек, а сколько под кучу?
Правильно, но не поэтому. А, может быть, и совсем неправильно. Отдай стеку с кучей всю память, оставшуюся свободной после статических переменных и программа сама разберется, сколько из этой памяти уйдет под стек, сколько под кучу. Динамически, в процессе исполнения.Мурик писал(а):И это правильно. Потому что если куча не используется, то для нее можно не выделять память.
Проверка, конечно, нужная, но не особо информативная. Поскольку большинство народа рулит размерами стека и кучи, что называется, "от фонаря". Мало? Добавим. Сделаем в 2-4-8-16 раз больше, и вперед! Вот, как раз, от чрезмерного увеличения стека с кучей в процессе такого отфонарного подбора эта проверка и защищает. То есть, бодрое преодоление трудностей, специально для этой цели придуманных.Мурик писал(а):Явно заданные размеры стека и кучи, позволят определить что переменные дошли до кучи со стеком.
В скрипте линкера есть такая проверка.
Мне кажется, вся эта ситуация - результат некорректного "обратного масштабирования" с "больших" систем на МК. В большой системе всеми этими делами рулит система управления виртуальной памятью, вопросов с размерами стека и кучи просто не возникает. А в большинстве МК ничего такого нет, да даже если и есть, то не используется, по причине отсутствия "большой" операционки и ненадобности оной. Ну, и решили свалить это дело на программиста...
То есть, конечно, еще могут быть дополнительные типы внешней памяти, вроде SDRAM на "продвинутых" STM32, но это, по-любому, требует специальных действий, такую память нельзя использовать таким же образом, как и встроенную SRAM, хотя бы потому, что она тормознее, и уж под стек она точно не годится.
Добавлено after 25 minutes 29 seconds:
И, кстати, я не понимаю, с чего это народ так боится, что стек вдруг переполнится из-за ошибки в программе? Да, если просто не хватает памяти, надо брать кристалл "пожирнее", а вот так, вроде всего хватает, а допустил какую-то ошибку, и стек переполнился? С чего бы это вдруг? Ладно, в программе на асме можно такое накосячить запросто, но для STM32 на асме, обычно, не программируют. А так, единственное, что приходит в голову - зациклившая рекурсия, но рекурсивная программа на МК - это как-то крутовато...
А иначе, стек имеет вполне конечные размеры, из расчета на максимум вложенности, если оно не лезет, значит, как я уже отметил, просто нужен камешек "пожирнее", или нужно менять алгоритм. В общем, неправильно все это...
Впрочем, все это уже обсуждалось, здесь же, ИМХО, осенью.
Кто мешает тебе выдумать порох непромокаемый? (К. Прутков, мысль № 133)
- Сообщения: 3386
- Зарегистрирован: Пн окт 11, 2010 19:00:08
Можно создать локальный экземпляр структуры на пару КБ или больше и стек переполнен. Маловероятно? Посмотрите на структуры 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


