1921 0 1 февраля, 2013 Опубликовано 1 февраля, 2013 (изменено) · Жалоба Корифеи и Гуру, не бейте сильно! Поясните начинающему. Я правильно понимаю, что файл system_stm32f40x.c запускается автоматически до запуска main.c? Или нет? Где этот файл лежит по умолчанию? В смысле, я перенёс его в каталог проекта, но IAR его не цепляет. И как всё-таки он должен правильно называться: system_stm32f40x.c или system_stm32f4xx.c (в примерах встречается и так, и так). Я понимаю так, что его нужно править под свои потребности (я имею ввиду систему тактирования), так где править-то? наверное, можно и без него, ручками, но я посмотрел - там вроде все основные инициализации есть, чего же ещё. На советы читать первоисточники - отвечаю: да читаю я их, читаю. Да только не всё сразу понимаю. Не позволяет совесть ответить - хотя бы ткните носом в первоисточник, шоб я знал. А? С уважением - новичок. Изменено 1 февраля, 2013 пользователем 1921 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Edit2007 3 1 февраля, 2013 Опубликовано 1 февраля, 2013 · Жалоба В смысле, я перенёс его в каталог проекта, но IAR его не цепляет. Просто перенести в каталог - пол дела, надо его еще в проект добавить, как обычный *.c файл. (включать его через #include тоже можно, но не принято) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
shmur 0 1 февраля, 2013 Опубликовано 1 февраля, 2013 · Жалоба Сам файл не "запускается", из него просто вызывается функция SystemInit, и вызывается она обычно из обработчика Reset_Handler, который по умолчанию находится в каком-нибудь cstartup.s: Reset_Handler LDR R0, =SystemInit BLX R0 LDR R0, =пользовательская точка входа (например, main или __iar_program_start) BX R0 В общем то здесь можно убрать вызов SystemInit и вызвать его потом собственноручно или вообще не вызывать :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
1921 0 1 февраля, 2013 Опубликовано 1 февраля, 2013 · Жалоба Просто перенести в каталог - пол дела, надо его еще в проект добавить, как обычный *.c файл. (включать его через #include тоже можно, но не принято) Не, ну разумеется я его приаттачил, и хедер его тоже. А вот в дизассемблере не увидел ничего, кроме ресетов. И регистры RCC-совские нулёвые, когда доходишь до main. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
KRS 0 1 февраля, 2013 Опубликовано 1 февраля, 2013 · Жалоба А с чего вы взяли что какие то функции из этого файла до main выполнятся? У вас свой стартап или стандартный? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SSerge 4 1 февраля, 2013 Опубликовано 1 февраля, 2013 · Жалоба Есть ещё startup_stm32f4xx.s, который тоже нужно включить в проект. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vlad_new 1 1 февраля, 2013 Опубликовано 1 февраля, 2013 · Жалоба Ну чуток не так. Вызывается _main, а не main. Вообще то до сишного мэйна ещё переменные инициализируются. :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
1921 0 1 февраля, 2013 Опубликовано 1 февраля, 2013 · Жалоба Есть ещё startup_stm32f4xx.s, который тоже нужно включить в проект. Никакого. Включить - это как? Простите за тупой вопрос? Прописать его в обработчике прерываний как reset? Как его заставить выполняться до main? Я вообще-то думал, что IAR без спроса ищет этот system и подключает его. Выходит, не так. Может, подскажете, как грамотно организовать стартап? Ну не знаю я ARMов, но уж больно привлекает их периферия и быстродействие! Ну чуток не так. Вызывается _main, а не main. Вообще то до сишного мэйна ещё переменные инициализируются. :) Эт я видел в дизассемблере. А вот настроек HSE не видел. Значит, не нашёл он этот system, видимо, его где-то прописать надо? Так. Прикрутил штатный стартап - насколько понял, это как раз обработчик ресета со ссылкой на этот самый систем. Я только одного не понял - это что, вовсе не обязательно прикручивать эти примочки? Сдаётся мне, ручками побыстрее было бы. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vlad_new 1 1 февраля, 2013 Опубликовано 1 февраля, 2013 · Жалоба Эт я видел в дизассемблере. А вот настроек HSE не видел. Значит, не нашёл он этот system, видимо, его где-то прописать надо? Видимо надо. Например добавить его в свой проэкт. Судя по переписке Вы чуток не тем занялись и забрели в тупик. Возьмите любой проэкт в качестве примера и просто сделайте так же или используете его для своих нужд. А что откуда вызывается со временем сами поймете. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SSerge 4 1 февраля, 2013 Опубликовано 1 февраля, 2013 · Жалоба Включить это правая кнопка в окне проекта -> 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 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться