реклама на сайте
подробности

 
 
> startup.s для Cortex M4
vanek18
сообщение Jun 4 2015, 05:58
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 15
Регистрация: 30-01-15
Пользователь №: 84 841



Добрый день! Подскажите пожалуйста, в startup.s для Cortex-M4 в обработчике сброса написано следующее:
CODE
Reset_Handler PROC
EXPORT Reset_Handler [WEAK]
IMPORT __main
IMPORT SystemInit

LDR R0, =SystemInit
BLX R0
LDR R0, =__main
BX R0
ENDP
Почему SystemInit без подчеркивания,а __main с ними...и что вообще значат эти два подчеркивания?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
esaulenka
сообщение Jun 4 2015, 06:30
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 032
Регистрация: 13-03-08
Из: Маськва
Пользователь №: 35 877



Для кейла надо:
1) найти меню Install Pack, Select Pack (зелёные кнопки с квадратами). Установить этот самый pack под используемый процессор.
2а) при создании нового проекта нужный стартап подключится автоматически
2б) для готового проекта скопировать стартап отсюда: C:\Keil_v5\ARM\Pack\Keil\STM32F1xx_DFP\1.1.0\Device\Source\ARM\startup_stm32f10x_ld.s (путь поправить в соответствии с используемым контроллером).
Там же рядом лежат полезные файлы - описание регистров, пример инициализации clock'ов.

А __main() - штука нужная. Эта библиотечная функция инициализирует глобальные переменные, которые используются в Си-шном коде. Потом оттуда вызывается пользовательский main()


--------------------
Тут обсуждается творческий порыв, а не соответствие каким-либо стандартам ©
Go to the top of the page
 
+Quote Post
vanek18
сообщение Jun 4 2015, 09:08
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 15
Регистрация: 30-01-15
Пользователь №: 84 841



Цитата(esaulenka @ Jun 4 2015, 07:30) *
А __main() - штука нужная. Эта библиотечная функция инициализирует глобальные переменные, которые используются в Си-шном коде. Потом оттуда вызывается пользовательский main()

Ясно понятно. А где эта функция __main описана? Или где вообще про нее почитать можно?
Go to the top of the page
 
+Quote Post
HardEgor
сообщение Jun 4 2015, 10:36
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 2 223
Регистрация: 3-03-06
Из: Tomsk
Пользователь №: 14 925



Цитата(vanek18 @ Jun 4 2015, 15:08) *
Ясно понятно. А где эта функция __main описана? Или где вообще про нее почитать можно?


Скорее всего где-то в стандарте CMSIS описано. Еще подробности должны быть в хэлпе Keil.
Вот из хэлпа:
ARM Compiler toolchain v5.02 for µVision Linker Reference

-- cut here --

--startup=symbol, --no_startup
This option enables the linker to use alternative C libraries with a different startup symbol if required.

Syntax
--startup=symbol
By default, symbol is set to __main.

--no_startup does not take a symbol argument.

Default
The default is --startup=__main.

Usage
The linker includes the C library startup code if there is a reference to a symbol that is defined by the C library startup code. This symbol reference is called the startup symbol. It is automatically created by the linker when it sees a definition of main(). The --startup option enables you to change this symbol reference.

If the linker finds a definition of main() and does not find a reference to (or definition of) symbol, then it generates an error.

If the linker finds a definition of main() and a reference to (or definition of) symbol, and no entry point is specified, then the linker generates a warning.


-- cut here --
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 21st July 2025 - 07:34
Рейтинг@Mail.ru


Страница сгенерированна за 0.0138 секунд с 7
ELECTRONIX ©2004-2016