Fake STM32F103C8T6 / APM32F103CCT6/T7 (64kb ОЗУ / 256kb FLASH), device ID: 0x414

стэк на 32КБ RAM не работает, программа не запускается.
ЗЫ. Я конечно не на 100 % уверен, предложите свой вариант проверки :slight_smile:

В Arduino IDE не знаю, но подозреваю что там тоже есть константа - размер памяти - изменить ее и протестировать готовую программу.

я делал в STM32CubeIDE, он бесплатный, скачайте и поставьте.

Да, есть. Но поменять размер памяти недостаточно, еще нужно чтобы границы областей памяти под данные и под стек были настроены правильно. В Ардуино ИДЕ это делается внутри конфиг-файла линкера в каталоге variants под каждую плату.
Если не настроить - будут проблемы. У Кларка в его аддоне размер памяти для F4xx был настроен верно, а границы - нет. В результате программы запускались, но при попытке динамического выделения памяти висли. Я писал об этом на старом форуме, можно найти, если интересно.

Так что, возможно, проверка памяти не такое простое дело.

написать функию которая будет просто напрямую писать в адресс RAM, например начиная с RAM_START + 60КB и пока не вывалиться в с Hard_Fault .
RAM_START можно узнать из DataSheet.

*((uint32_t*)(RAM_START + 60 * 1024 + i)) = i;

там она стек затрет и не вывалится, а зависнет

это что? и как это выловить?

я конечно из любопытства напишу код, чисто инициализация, без использования вызовов подпрограмм, но как сообщить юзеру что все хорошо или все плохо и на каком адресе все сломалось, ума не приложу.

думаю от IDE зависит + насколько корректно программист аддона все написал/предусмотрел изменения памяти.

во всяком случае при уменьшении размера памяти до 16 КБ все норм работает, при увеличении больше 20 КБ соотвественно нет.

поставить break point в функции hard_fault(и других faultах) в файле stm32 … _it.c

а разве это не будет означать что мы вышли за дозволенные границы ?

  1. я пишу в CMSIS, этот файл не используется + для чистоты эксперимента никаких прерываний и вызовов функций быть не должно!
  2. чип ch32f103 не прошивается через IDE, поскольку чистокровный китаец, соотвественно никаких точек остановки для отладки поставить не получиться, точнее они никогда в жизни не отработают.

так выше же и так уже стэком вышли и он завис.

Интересно где точно эта граница и как эту границу сообщить пользователю.

это неважно на чем, вы пишите . в файле …startup.asm должны быть прописаны указатели на фукции для разного рода системных прерываний .файл _it.c их только реализует. можете сами их реализовать если файла _it.c нет.

то есть заказывали stm32 a пришел ch32 ? нафига тогда морозиться , сейчас память не так указана ,а потом окажется что таймера не 32ух битные а 8ми , без ШИМ

в cubeide думаю вряд ли выйдет прошить со всякими подменами id.

как насчет пробывать в Keil или IAR , они потдерживаються ?у производителя есть официальная среда разработки ?

не я это начал :upside_down_face: спортивный интерес.

Keil или IAR может и поддерживается, но я повторюсь:
Что бы последовательно писать во всю память для получения потолка необходимо писать код без использования вызовов подпрограмм/функций/прерываний, что накладывает сильные ограничения на вывод полезной информации из МК.

так нам ненадо всю память записывать , надо найти границу , начиная с ,например 14к (Если всего 16к) .
как только завалитесь на stack своей писаниной - бинго

без подпрограмм и функций - не будет априори . main() не фунция ? функция

с другой стороны , начало стека определяеться компилятором ,но он его знает только по тому что написал пользователь хмм сранное курица и яйцо

ну можт тогда постепенно увеличивать размер RAM в файле линкера. когда все свалиться ,там и граница

хотя нафига гадать ?

вот
http://en.szhxmos.com/uploads/soft/2101/CH32F103C8T6.pdf

Отладки нет что ли ??? Поставить точку останова в том месте где уже есть результат и в отладчике увидеть результат !!!

это уже выше проверено, да, выше нет RAM судя по всему

аналогично выше кусок ассемблера - там тупо константа

нет отладки.

как я понял ,он не может запустить в режиме дебаг , потому что ide не может нормально определить чип или сам st-link не хочет с ним работать . только прошивать