|
|
  |
Скрипт линкера для Cortex-M3 |
|
|
|
Feb 2 2012, 05:58
|

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

|
Пытаюсь разобраться в скрипте линкера, возник вопрос. В комплекте scmRTOS идут два скрипта: stm32f10x_flash_md.ld и stm32f10x_flash_md_kgp.ld. Они немного отличаются:
Насколько я понял, дело касается расположения конструкторов и деструкторов. Не подскажете, чем обусловлены эти правки?
--------------------
Good News Everyone!
|
|
|
|
|
Feb 2 2012, 07:27
|

Гуру
     
Группа: Модераторы
Сообщений: 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)
|
|
|
|
|
Feb 2 2012, 08:44
|

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

|
Цитата(Pavel V. @ Feb 2 2012, 11:58)  В комплекте scmRTOS идут два скрипта: stm32f10x_flash_md.ld и stm32f10x_flash_md_kgp.ld. Они немного отличаются: Возьмите скрипты поновее здесь. Насчёт разницы Сергей правильно объяснил, в то время как раз переезжали конструкторы, и в одном компиляторе они уже переехали, а в другом - ещё нет.
--------------------
Если бы я знал, что такое электричество...
|
|
|
|
|
Feb 2 2012, 10:22
|

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

|
Ребята, спасибо огромное! Это первый скрипт линкера, в котором я смог разобраться  Остальные варианты, что мне попадались, представляют собой какое-то адское месиво. А в какую секцию помещаются деструкторы?
--------------------
Good News Everyone!
|
|
|
|
|
Feb 2 2012, 11:17
|

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

|
Цитата(Сергей Борщ @ Feb 2 2012, 14:28)  А фиг его знает  В мелкопроцессорных устройствах до вызова деструкторов глобальных объектов дело никогда не доходит, значит и линковать их не нужно. Да, действительно  Однако, в других примерах, которые я смотрел, секции .fini_array и .dtors (похоже, именно в них должны помещаться деструкторы) присутствуют. Осталось теперь отладку добить через J-Link и можно праздновать окончательный переход на GCC.
--------------------
Good News Everyone!
|
|
|
|
|
Feb 2 2012, 14:08
|

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

|
QUOTE (Pavel V. @ Feb 2 2012, 13:17)  Да, действительно  Однако, в других примерах, которые я смотрел, секции .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)
|
|
|
|
|
Feb 2 2012, 18:33
|

Гуру
     
Группа: Модераторы
Сообщений: 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)
|
|
|
|
|
Feb 4 2012, 06:03
|

Местный
  
Группа: Свой
Сообщений: 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!
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|