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

 
 
 
Reply to this topicStart new topic
> Скрипт линкера для Cortex-M3
Pavel V.
сообщение Feb 2 2012, 05:58
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 211
Регистрация: 3-06-06
Пользователь №: 17 742



Пытаюсь разобраться в скрипте линкера, возник вопрос.

В комплекте scmRTOS идут два скрипта: stm32f10x_flash_md.ld и stm32f10x_flash_md_kgp.ld. Они немного отличаются:

Прикрепленное изображение


Насколько я понял, дело касается расположения конструкторов и деструкторов. Не подскажете, чем обусловлены эти правки?


--------------------
Good News Everyone!
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Feb 2 2012, 07:27
Сообщение #2


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



QUOTE (Pavel V. @ Feb 2 2012, 07:58) *
Насколько я понял, дело касается расположения конструкторов и деструкторов. Не подскажете, чем обусловлены эти правки?
В предыдущих версиях gcc конструкторы жили в секции .ctors, в текущих - в секции .init_aray. В ваших скриптах в одном раскомментирована одна секция, во втором - вторая. Зачем - загадка. Видимо следы экспериментов автора с разными версиями компилятора. Расположение этих секций относительно остальных секций в .text значения не имеет. Я обычно вставляю в скрипт оба варианта, хотя уже давно не пользуюсь версией, использующей *.ctors:
CODE
    __ctors_start = .;
    KEEP(SORT(*)(.ctors))
    KEEP(SORT(*)(.init_array))
     __ctors_end = .;



--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Feb 2 2012, 08:44
Сообщение #3


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

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



Цитата(Pavel V. @ Feb 2 2012, 11:58) *
В комплекте scmRTOS идут два скрипта: stm32f10x_flash_md.ld и stm32f10x_flash_md_kgp.ld. Они немного отличаются:

Возьмите скрипты поновее здесь.
Насчёт разницы Сергей правильно объяснил, в то время как раз переезжали конструкторы, и в одном компиляторе они уже переехали, а в другом - ещё нет.


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
Pavel V.
сообщение Feb 2 2012, 10:22
Сообщение #4


Местный
***

Группа: Свой
Сообщений: 211
Регистрация: 3-06-06
Пользователь №: 17 742



Ребята, спасибо огромное! Это первый скрипт линкера, в котором я смог разобраться sm.gif Остальные варианты, что мне попадались, представляют собой какое-то адское месиво.

А в какую секцию помещаются деструкторы?


--------------------
Good News Everyone!
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Feb 2 2012, 10:28
Сообщение #5


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



QUOTE (Pavel V. @ Feb 2 2012, 12:22) *
А в какую секцию помещаются деструкторы?
А фиг его знает sm.gif В мелкопроцессорных устройствах до вызова деструкторов глобальных объектов дело никогда не доходит, значит и линковать их не нужно.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
Pavel V.
сообщение Feb 2 2012, 11:17
Сообщение #6


Местный
***

Группа: Свой
Сообщений: 211
Регистрация: 3-06-06
Пользователь №: 17 742



Цитата(Сергей Борщ @ Feb 2 2012, 14:28) *
А фиг его знает sm.gif В мелкопроцессорных устройствах до вызова деструкторов глобальных объектов дело никогда не доходит, значит и линковать их не нужно.

Да, действительно sm.gif Однако, в других примерах, которые я смотрел, секции .fini_array и .dtors (похоже, именно в них должны помещаться деструкторы) присутствуют.

Осталось теперь отладку добить через J-Link и можно праздновать окончательный переход на GCC.


--------------------
Good News Everyone!
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Feb 2 2012, 14:08
Сообщение #7


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



QUOTE (Pavel V. @ Feb 2 2012, 13:17) *
Да, действительно sm.gif Однако, в других примерах, которые я смотрел, секции .fini_array и .dtors (похоже, именно в них должны помещаться деструкторы) присутствуют.
У меня тоже присутствовали. Пока безобидный проект при сборке под линухом чуток другой версией гцц вдруг не потащил за собой поддержку файловых операций и всего-прочего на несколько десятков К.

QUOTE (Pavel V. @ Feb 2 2012, 13:17) *
Осталось теперь отладку добить через J-Link и можно праздновать окончательный переход на GCC
OpenOCD через JTAG работает, swd пилят потихоньку.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Feb 2 2012, 16:57
Сообщение #8


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

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



Цитата(Сергей Борщ @ Feb 2 2012, 20:08) *
OpenOCD через JTAG работает, swd пилят потихоньку.

Вот тут проскочило сообщение, что SWD уже работает. (Сам пока не пробовал.)


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Feb 2 2012, 18:33
Сообщение #9


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



QUOTE (AHTOXA @ Feb 2 2012, 18:57) *
Вот тут проскочило сообщение, что SWD уже работает.
Это радует. А я за списком рассылки слежу, там писали что вбросили что-то в реп, но автор активно трудится на вычленением этого ужаса в отдельную библиотеку и введением отдельного транспорта. JTAG через J-Link работает, это я использую. А SWD мой древний MT-Link не умеет, а когда у меня руки дойдут собрать нормальный, глядишь, уже и в OpenOCD все устаканется.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
Pavel V.
сообщение Feb 4 2012, 06:03
Сообщение #10


Местный
***

Группа: Свой
Сообщений: 211
Регистрация: 3-06-06
Пользователь №: 17 742



Цитата(Сергей Борщ @ Feb 2 2012, 18:08) *
OpenOCD через JTAG работает, swd пилят потихоньку.

Я пока использую родной GDB-Server от Segger-а, у них есть версия в т.ч. под Линукс (которую я и использую). В целом отладка работает, но сопровождается периодическими необъяснимыми вылетами.

OpenOCD тоже пробовал, но под ним отладку вообще запустить не удалось. Может быть вы мне поможете с конфигурацией?

Процессор у меня LPC1768, OpenOCD запускаю с параметрами типа -f /interface/jlink.cfg -f /target/lpc1768.cfg. Отладчик запускается, процессор распознается.

Но ни один из найденных вариантов инициализации отладки так и не заработал. Прикручивать пытаюсь к Eclipse.


--------------------
Good News Everyone!
Go to the top of the page
 
+Quote Post

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

 


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


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