Перейти к содержанию
    

Включение в проект system_stm32f40x.c

Корифеи и Гуру, не бейте сильно!

Поясните начинающему.

Я правильно понимаю, что файл system_stm32f40x.c запускается автоматически до запуска main.c?

Или нет? Где этот файл лежит по умолчанию? В смысле, я перенёс его в каталог проекта, но IAR его не цепляет. И как всё-таки он должен правильно называться: system_stm32f40x.c или system_stm32f4xx.c (в примерах встречается и так, и так). Я понимаю так, что его нужно править под свои потребности (я имею ввиду систему тактирования), так где править-то? наверное, можно и без него, ручками, но я посмотрел - там вроде все основные инициализации есть, чего же ещё.

На советы читать первоисточники - отвечаю: да читаю я их, читаю. Да только не всё сразу понимаю.

Не позволяет совесть ответить - хотя бы ткните носом в первоисточник, шоб я знал. А?

С уважением - новичок.

Изменено пользователем 1921

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В смысле, я перенёс его в каталог проекта, но IAR его не цепляет.

Просто перенести в каталог - пол дела, надо его еще в проект добавить, как обычный *.c файл. (включать его через #include тоже можно, но не принято)

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Сам файл не "запускается", из него просто вызывается функция SystemInit, и вызывается она обычно из обработчика Reset_Handler, который по умолчанию находится в каком-нибудь cstartup.s:

Reset_Handler
        LDR     R0, =SystemInit
        BLX     R0
        LDR     R0, =пользовательская точка входа (например, main или __iar_program_start)
        BX      R0

В общем то здесь можно убрать вызов SystemInit и вызвать его потом собственноручно или вообще не вызывать :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Просто перенести в каталог - пол дела, надо его еще в проект добавить, как обычный *.c файл. (включать его через #include тоже можно, но не принято)

Не, ну разумеется я его приаттачил, и хедер его тоже. А вот в дизассемблере не увидел ничего, кроме ресетов. И регистры RCC-совские нулёвые, когда доходишь до main.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А с чего вы взяли что какие то функции из этого файла до main выполнятся?

У вас свой стартап или стандартный?

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ну чуток не так. Вызывается _main, а не main. Вообще то до сишного мэйна ещё переменные инициализируются. :)

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Есть ещё startup_stm32f4xx.s, который тоже нужно включить в проект.

Никакого.

Включить - это как? Простите за тупой вопрос? Прописать его в обработчике прерываний как reset? Как его заставить выполняться до main? Я вообще-то думал, что IAR без спроса ищет этот system и подключает его. Выходит, не так.

Может, подскажете, как грамотно организовать стартап? Ну не знаю я ARMов, но уж больно привлекает их периферия и быстродействие!

 

Ну чуток не так. Вызывается _main, а не main. Вообще то до сишного мэйна ещё переменные инициализируются. :)

Эт я видел в дизассемблере. А вот настроек HSE не видел. Значит, не нашёл он этот system, видимо, его где-то прописать надо?

 

Так. Прикрутил штатный стартап - насколько понял, это как раз обработчик ресета со ссылкой на этот самый систем. Я только одного не понял - это что, вовсе не обязательно прикручивать эти примочки? Сдаётся мне, ручками побыстрее было бы.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Эт я видел в дизассемблере. А вот настроек HSE не видел. Значит, не нашёл он этот system, видимо, его где-то прописать надо?

Видимо надо. Например добавить его в свой проэкт. Судя по переписке Вы чуток не тем занялись и забрели в тупик. Возьмите любой проэкт в качестве примера и просто сделайте так же или используете его для своих нужд. А что откуда вызывается со временем сами поймете.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Включить это правая кнопка в окне проекта -> Add -> Add Files.

Или Project->Add Files..

Или просто перетащить нужный файл из обзирателя в окошко проекта в IAR-e.

 

Кроме того в свойствах проекта нужно установить много чего, в том числе для какого ядра или конкретного контроллера компилировать, подключаемые библиотеки и пр. (Project->Options->General Options), пути для поиска инклюд-файлов (*.h) на вкладке Project->C/C++ Compiler->Preprocessor, там-же предопределённые символы.

На вкладке Project->Options->Linker установить подходящий .icf файл.

 

Посмотрите примеры, хоть из того-же STM32F...._StdPerif_Lib

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...