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

 
 
> Стартап и скрипт линкера из CMSIS для Sourcery CodeBench
koluna
сообщение Jun 6 2013, 08:09
Сообщение #1


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

Группа: Участник
Сообщений: 1 040
Регистрация: 3-01-07
Пользователь №: 24 061



Всем привет!

Помогите разобраться, пожалуйста.
Стартап и скрипт взял из CMSIS 3.01 (\Device\ARM\ARMCM3\Source\GCC): gcc_arm.ld, startup_ARMCM3.S (приложил к теме).
Подцепляю к простейшему тестовому проекту.
При сборке линкер ругался сначала на отсутствие libnosys.a (ее действительно нет в дистрибе компилятора) - убрал ее из списка в скрипте. Ошибка пропала.
Но так и не нашел, что это за либа, для чего нужна и почему ее нет...
Потом линкер ругался на отсутствие "_start". Странно, откуда эта метка в стартапе и почему так называется? Поставил вместо нее "main" - все собралось. Ошибок нет.
Но осадок сомнения остался - уже две ошибки в этих двух файлах... кто знает, что там еще? Надеялся, что все заработает "из коробки".
Пока не зашивал, не уверен в работоспособности, будем пробовать.
Насколько можно верить этим файлам? Что еще в них придется корректировать (ну, кроме размеров RAM, ROM, размеров стека и кучи)?
Прикрепленные файлы
Прикрепленный файл  GCC.zip ( 3.82 килобайт ) Кол-во скачиваний: 14
 


--------------------
Благодарю заранее!
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
koluna
сообщение Jun 7 2013, 14:44
Сообщение #2


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

Группа: Участник
Сообщений: 1 040
Регистрация: 3-01-07
Пользователь №: 24 061



AHTOXA, есть вопросы по Вашему стартапу, прошу помочь разобраться sm.gif

Строки 12-23.
Что это? Где определено? В доке на компилятор не нашел.

Строки 207-454.
(intfunc)((unsigned long)&_estack) - для чего это вначале таблицы векторов?

Строки 465-487.
Тут, вроде, более менее понятно.
Инициализируем инициализируемые переменные своими значениями, инициализируем нулями неинициализируемые переменные, инициализируем железо (что конкретно только не понятно пока), инициализируем внешнюю память, если она есть, вызываем конструкторы.
init_HW() - это что-то типа SystemInit() из system_stm32f10x.c в SPL?
Вызов init_HW() до вызова конструкторов т. к., конструкторы могут работать с железом?
Видимо в scmRTOS есть реализованная функция init_HW()? sm.gif



--------------------
Благодарю заранее!
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Jun 7 2013, 16:59
Сообщение #3


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



Цитата(koluna @ Jun 7 2013, 20:44) *
Строки 12-23.
Что это? Где определено? В доке на компилятор не нашел.

Это переменные из линкерного скрипта. Границы секций.
Цитата(koluna @ Jun 7 2013, 20:44) *
Строки 207-454.
(intfunc)((unsigned long)&_estack) - для чего это вначале таблицы векторов?

Ну, у нас таблица указателей на функции, а первый элемент в ней - адрес стека. Приходится преобразовывать тип, чтобы компилятор не ругался.

Цитата(koluna @ Jun 7 2013, 20:44) *
Строки 465-487.
Тут, вроде, более менее понятно.
Инициализируем инициализируемые переменные своими значениями, инициализируем нулями неинициализируемые переменные, инициализируем железо (что конкретно только не понятно пока), инициализируем внешнюю память, если она есть, вызываем конструкторы.
init_HW() - это что-то типа SystemInit() из system_stm32f10x.c в SPL?
Вызов init_HW() до вызова конструкторов т. к., конструкторы могут работать с железом?
Видимо в scmRTOS есть реализованная функция init_HW()? sm.gif

Да, всё именно так. Просто сначала я придумал название init_HW(), а потом в ST придумали SystemInit() sm.gif Можете заменить одно на другое.
(Если что, то функцию init_HW() можно посмотреть здесь).


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
koluna
сообщение Jun 7 2013, 19:53
Сообщение #4


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

Группа: Участник
Сообщений: 1 040
Регистрация: 3-01-07
Пользователь №: 24 061



Цитата(AHTOXA @ Jun 7 2013, 20:59) *
Это переменные из линкерного скрипта. Границы секций.


Я потом посмотрел скрипт, увидел их там и понял... к тому же они используются для инициализации переменных и вызова конструкторов.
Просто названия у них не особо очевидные...
Кстати, это именно переменные, которые определяются в скрипте и глобальны для всей программы?

Не совсем понятно что это. Вроде, одно и тоже... но зачем тогда два идентификатора?
Код
extern unsigned long _etext;
extern unsigned long _sidata;


Тут правильно?
Код
extern unsigned long _sdata; // Начало секции размещения инициализированных данных (RAM)
extern unsigned long _edata; // Ее конец
extern unsigned long _sbss; // Начало секции размещения неициализированных данных (RAM)
extern unsigned long _ebss; // Ее конец
extern unsigned long _estack; // Конец стека (конец RAM)
extern unsigned long __ctors_start__; // Начало секции размещения конструкторов (FLASH)
extern unsigned long __ctors_end__; // Ее конец
extern unsigned long __dtors_start__; // Начало секции размещения деструкторов (FLASH)
extern unsigned long __dtors_end__; // Ее конец


Код
Ну, у нас таблица указателей на функции,  а первый элемент в ней - адрес стека. Приходится преобразовывать тип, чтобы компилятор не ругался.


С преобразованием-то понятно, а вот с тем что первый элемент адрес стека - нет, видимо, так для ARM надо. Перечитаю про прерывания sm.gif

Спасибо большое за консультации.
В общем, параллельно надо в скрипт линкера вникать sm.gif


--------------------
Благодарю заранее!
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Jun 7 2013, 21:39
Сообщение #5


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



Цитата(koluna @ Jun 8 2013, 01:53) *
Кстати, это именно переменные, которые определяются в скрипте и глобальны для всей программы?

Да. Линкер знает их адреса (из скрипта). В любом месте программы вы можете объявить переменную с таким именем. (Здесь нам нужна не сама переменная, а её адрес. Хотя я видел, как в линкерном скрипте объявляли регистры процессора. В этом нет особого смысла, но это возможноsm.gif ).

Цитата(koluna @ Jun 8 2013, 01:53) *
Не совсем понятно что это. Вроде, одно и тоже... но зачем тогда два идентификатора?
Код
extern unsigned long _etext;
extern unsigned long _sidata;

Там есть какой-то перечень предопределённых имён, которые нужны встроенным стартапам. Так что в скрипте объявляются разные возможные варианты, например, end и __end. Памяти они не занимают, так что не жалко.

Цитата(koluna @ Jun 8 2013, 01:53) *
Тут правильно?

Да, всё так.


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
koluna
сообщение Jun 10 2013, 12:41
Сообщение #6


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

Группа: Участник
Сообщений: 1 040
Регистрация: 3-01-07
Пользователь №: 24 061



Цитата(AHTOXA @ Jun 8 2013, 01:39) *
Да. Линкер знает их адреса (из скрипта). В любом месте программы вы можете объявить переменную с таким именем. (Здесь нам нужна не сама переменная, а её адрес. Хотя я видел, как в линкерном скрипте объявляли регистры процессора. В этом нет особого смысла, но это возможноsm.gif ).


Кстати, а для чего в программе могут понадобиться такие переменные?

Цитата
Там есть какой-то перечень предопределённых имён, которые нужны встроенным стартапам. Так что в скрипте объявляются разные возможные варианты, например, end и __end. Памяти они не занимают, так что не жалко.


А где, кстати, перечень? Может быть так много имен для совместимости?


--------------------
Благодарю заранее!
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- koluna   Стартап и скрипт линкера из CMSIS для Sourcery CodeBench   Jun 6 2013, 08:09
- - Непомнящий Евгений   Я в свое время сам писал и скрипт и стартап. Чем-т...   Jun 6 2013, 08:22
|- - koluna   Цитата(Непомнящий Евгений @ Jun 6 2013, 12...   Jun 6 2013, 08:42
- - koluna   Кто-нибудь выскажет свое мнение? Или мир разделилс...   Jun 6 2013, 11:58
|- - _Артём_   Цитата(koluna @ Jun 6 2013, 14:58) И нет ...   Jun 6 2013, 17:32
|- - koluna   Цитата(_Артём_ @ Jun 6 2013, 21:32) Скрип...   Jun 6 2013, 18:27
|- - AHTOXA   Попробуйте скрипты и стартап от scmRTOS. Я точно з...   Jun 6 2013, 18:29
- - koluna   AHTOXA, спасибо большое! Но мне хотелось бы вс...   Jun 7 2013, 10:59
|- - AHTOXA   Цитата(koluna @ Jun 10 2013, 18:41) Кстат...   Jun 10 2013, 18:56
|- - koluna   Цитата(AHTOXA @ Jun 10 2013, 22:56) Ну ма...   Jun 11 2013, 07:46
- - koluna   Вопросы по Вашему скрипту. Зачем вообще придумали...   Jun 12 2013, 14:58
|- - AHTOXA   Ничего себе, сколько вопросов Сразу предупреждаю, ...   Jun 12 2013, 18:45
|- - koluna   Цитата(AHTOXA @ Jun 12 2013, 22:45) Ничег...   Jun 13 2013, 07:40
|- - AHTOXA   Цитата(koluna @ Jun 13 2013, 13:40) Зачем...   Jun 13 2013, 08:36
|- - Непомнящий Евгений   Цитата(koluna @ Jun 13 2013, 11:40) Зачем...   Jun 13 2013, 08:43
- - koluna   Вот здесь зачем выравнивание перед таблицей вектор...   Jun 13 2013, 18:41
|- - Сергей Борщ   QUOTE (koluna @ Jun 13 2013, 21:41) Вот з...   Jun 13 2013, 19:12
||- - Terminator   Цитата(Сергей Борщ @ Jun 14 2013, 02:12) ...   Jun 14 2013, 01:51
||- - koluna   Цитата(Сергей Борщ @ Jun 13 2013, 23:12) ...   Jun 14 2013, 13:41
|- - AHTOXA   Цитата(koluna @ Jun 14 2013, 00:41) Вот з...   Jun 13 2013, 19:48
|- - koluna   Цитата(AHTOXA @ Jun 13 2013, 23:48) Ох, д...   Jun 14 2013, 18:25
|- - AHTOXA   Цитата(koluna @ Jun 15 2013, 00:25) Ааа.....   Jun 14 2013, 19:19
|- - koluna   Цитата(AHTOXA @ Jun 14 2013, 23:19) Начал...   Jun 15 2013, 10:27
|- - AHTOXA   Цитата(koluna @ Jun 15 2013, 16:27) Недов...   Jun 15 2013, 10:57
|- - koluna   Цитата(AHTOXA @ Jun 15 2013, 14:57) Давай...   Jun 15 2013, 19:56
|- - AHTOXA   Цитата(koluna @ Jun 16 2013, 01:56) Как я...   Jun 15 2013, 20:26
|- - koluna   Цитата(AHTOXA @ Jun 16 2013, 00:26) Нет. ...   Jun 16 2013, 07:25
|- - AHTOXA   Цитата(koluna @ Jun 16 2013, 13:25) Так, ...   Jun 16 2013, 10:00
- - Сергей Борщ   QUOTE (AHTOXA @ Jun 13 2013, 22:48) А чем...   Jun 14 2013, 19:50
|- - AHTOXA   Цитата(Сергей Борщ @ Jun 15 2013, 01:50) ...   Jun 15 2013, 05:43
- - Сергей Борщ   QUOTE (AHTOXA @ Jun 15 2013, 13:57) Но у ...   Jun 15 2013, 22:03
|- - AHTOXA   Цитата(Сергей Борщ @ Jun 16 2013, 04:03) ...   Jun 15 2013, 22:33
|- - Сергей Борщ   QUOTE (AHTOXA @ Jun 16 2013, 01:33) 128 с...   Jun 15 2013, 23:15
|- - AHTOXA   Цитата(Сергей Борщ @ Jun 16 2013, 05:15) ...   Jun 16 2013, 19:48
- - koluna   О счетчике позиций. Может быть вот это: Код__exid...   Jun 17 2013, 14:51
|- - Сергей Борщ   QUOTE (koluna @ Jun 17 2013, 17:51) было ...   Jun 18 2013, 07:54
|- - AHTOXA   Вот ведь дилемма... С одной стороны, "возможн...   Jun 18 2013, 08:46
- - koluna   Не совсем разобрался с адресацией: абсолютная и от...   Jun 18 2013, 11:02
|- - AHTOXA   Цитата(koluna @ Jun 18 2013, 17:02) Вот в...   Jun 18 2013, 13:00
- - koluna   Цитата(AHTOXA @ Jun 18 2013, 17:00) Нет. ...   Jun 18 2013, 13:25
|- - AHTOXA   Цитата(koluna @ Jun 18 2013, 19:25) Знаю....   Jun 18 2013, 16:58
|- - koluna   Цитата(AHTOXA @ Jun 18 2013, 20:58) А фиг...   Jun 18 2013, 17:43
|- - AHTOXA   Да, всё так.   Jun 18 2013, 17:54
|- - Сергей Борщ   QUOTE (koluna @ Jun 18 2013, 20:43) Вот и...   Jun 18 2013, 18:34
- - koluna   Пока так и не понял, "--gc-sections" раб...   Jun 18 2013, 15:52
- - koluna   Мучает меня вопрос по секциям все-таки... .init_...   Jun 18 2013, 18:37
|- - AHTOXA   Цитата(koluna @ Jun 19 2013, 00:37) .init...   Jun 18 2013, 19:44
|- - koluna   Цитата(AHTOXA @ Jun 18 2013, 23:44) Можно...   Jun 19 2013, 07:41
|- - AHTOXA   Цитата(koluna @ Jun 19 2013, 13:41) Наско...   Jun 19 2013, 08:04
|- - koluna   Цитата(AHTOXA @ Jun 19 2013, 12:04) Емним...   Jun 19 2013, 09:44
|- - Сергей Борщ   QUOTE (koluna @ Jun 19 2013, 12:44) Кстат...   Jun 19 2013, 10:02
|- - koluna   Понятно, спасибо. А с деструкторами все-таки что?...   Jun 19 2013, 12:31
|- - Сергей Борщ   QUOTE (koluna @ Jun 19 2013, 15:31) А с д...   Jun 19 2013, 13:11
- - koluna   Судя по всему для EABI, по аналогии с конструктора...   Jun 19 2013, 14:10
- - koluna   Что такое common-символы (секция COMMON)? Из доки ...   Jun 19 2013, 18:30
- - koluna   И все-таки хотелось бы немного поговорить и о скри...   Jun 20 2013, 16:26
- - koluna   Посмотрел у себя файлы crt* в папках компилятора: ...   Jun 21 2013, 20:50


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

 


RSS Текстовая версия Сейчас: 28th June 2025 - 16:51
Рейтинг@Mail.ru


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