BOOM
01.Март.2023 03:48:17
1
Все началось с с этого поста: Интересное на AliExpress и других маркетплейсах - #303 от пользователя BOOM
Так как господа модераторы не хотят ничего переносить из той темы в отдельную, создал эту тему. Предлагаю тут и продолжить.
Итак , остановились на том, что выяснили что используемый микроконтроллер в “синей таблетке” имеет реальные 256кб FLASH-памяти, и должен иметь 64кб ОЗУ.
Как определить реальный объем ОЗУ?
Ссылка на товар на AliExpress: STM32F103C8T6 .
Расколупать камень и посмотреть литографию под микроскопом.
Компилятору подсунуть другой чип с бОльшим объёмом памяти, чтоб он стэк изначально выше поставил, и попробовать заработает или нет программа.
А зачем вообще знать что памяти больше, чем написано?
там память может “заворачиваться” на меньшие адреса, так не проверишь
Ну…не знаю, не уверен, сегодня попробую
BOOM
01.Март.2023 04:43:11
6
Не знаю, @b707 “подбил” к продолжению темы “исследования APM32F103CCT6/T7”… ))
И мне не нужно знать бОльше, хотелось бы узнать - не меньше ли 64кб (и на сколько)? ))
Тот объем ОЗУ, что в ST-Link Utility определяется - правильный? Или он от ID = 0x414 “берется”?
А нет никакой разницы что там программа определила, важно что откомпилированном коде.
Создавать массивы размером 1К и заполнять их порядковым номером массива.
После заполнения нового 1К - проверять не изменилось ли содержимое старых массивов…
Это понятно, вопрос как стэк не затереть или проскочить при выделении памяти?
ну так взять адрес регистра стека, а еще лучше переменной STACK_HEAD и не писАть в этот блок
Код должен быть простым - без вызовов процедур и функций.
DetSimen
Из-за зеркалирования он может оказаться совсем не там где мы думаем.
это будет непросто, как то ведь понадобиться сообщить юзеру на каком этапе/адресе память закончилась.
Итак, с дефолтными настройками на чип с 20 КБ памяти, нашел в файлах map и list следующие значения (не уверен конечно что это верхняя граница стэка):
LOAD f:/st/stm32cubeide_1.4.0/stm32cubeide/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.10.3-2021.10.win32_1.0.100.202210260954/tools/bin/../lib/gcc/arm-none-eabi/10.3.1/thumb/v7-m/nofp/crtn.o
0x0000000020005000 _estack = (ORIGIN (RAM) + LENGTH (RAM))
0x0000000000000200 _Min_Heap_Size = 0x200
0x0000000000000400 _Min_Stack_Size = 0x400
LoopForever:
b LoopForever
8000bca: e7fe b.n 8000bca <LoopForever>
ldr r0, =_estack
8000bcc: 20005000 .word 0x20005000
ldr r0, =_sdata
8000bd0: 20000000 .word 0x20000000
BOOM
01.Март.2023 05:56:38
15
20kb - это для STM32F103C8T6, а в этом мк должно быть 64kb…
После того как мы нашли “затирание” мы же перестанем писать в память и тогда уже можно смело пользоваться стеком - мы же больше не портим значения !
да понятно все, я пока ищу где в компиляторе исправить размер памяти чтоб протестировать с ьОльшим объемом
поменял на 32 КБ памяти, чуда не произошло Китайцы лишней памяти не доложили
LoopForever:
b LoopForever
8000bca: e7fe b.n 8000bca <LoopForever>
ldr r0, =_estack
8000bcc: 20008000 .word 0x20008000
to BOOM - так что все индивидуально - пробуйте/тестируйте на своем чипе, может вам и повезет.
BOOM
01.Март.2023 06:46:56
20
Я бы рад, если разъясните - что Вы сделали и как это проделать мне?