Pavel V. 0 2 февраля, 2012 Опубликовано 2 февраля, 2012 · Жалоба Пытаюсь разобраться в скрипте линкера, возник вопрос. В комплекте scmRTOS идут два скрипта: stm32f10x_flash_md.ld и stm32f10x_flash_md_kgp.ld. Они немного отличаются: Насколько я понял, дело касается расположения конструкторов и деструкторов. Не подскажете, чем обусловлены эти правки? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 119 2 февраля, 2012 Опубликовано 2 февраля, 2012 · Жалоба Насколько я понял, дело касается расположения конструкторов и деструкторов. Не подскажете, чем обусловлены эти правки?В предыдущих версиях gcc конструкторы жили в секции .ctors, в текущих - в секции .init_aray. В ваших скриптах в одном раскомментирована одна секция, во втором - вторая. Зачем - загадка. Видимо следы экспериментов автора с разными версиями компилятора. Расположение этих секций относительно остальных секций в .text значения не имеет. Я обычно вставляю в скрипт оба варианта, хотя уже давно не пользуюсь версией, использующей *.ctors: __ctors_start = .; KEEP(SORT(*)(.ctors)) KEEP(SORT(*)(.init_array)) __ctors_end = .; Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AHTOXA 14 2 февраля, 2012 Опубликовано 2 февраля, 2012 · Жалоба В комплекте scmRTOS идут два скрипта: stm32f10x_flash_md.ld и stm32f10x_flash_md_kgp.ld. Они немного отличаются: Возьмите скрипты поновее здесь. Насчёт разницы Сергей правильно объяснил, в то время как раз переезжали конструкторы, и в одном компиляторе они уже переехали, а в другом - ещё нет. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Pavel V. 0 2 февраля, 2012 Опубликовано 2 февраля, 2012 · Жалоба Ребята, спасибо огромное! Это первый скрипт линкера, в котором я смог разобраться :) Остальные варианты, что мне попадались, представляют собой какое-то адское месиво. А в какую секцию помещаются деструкторы? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 119 2 февраля, 2012 Опубликовано 2 февраля, 2012 · Жалоба А в какую секцию помещаются деструкторы?А фиг его знает :) В мелкопроцессорных устройствах до вызова деструкторов глобальных объектов дело никогда не доходит, значит и линковать их не нужно. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Pavel V. 0 2 февраля, 2012 Опубликовано 2 февраля, 2012 · Жалоба А фиг его знает :) В мелкопроцессорных устройствах до вызова деструкторов глобальных объектов дело никогда не доходит, значит и линковать их не нужно. Да, действительно :) Однако, в других примерах, которые я смотрел, секции .fini_array и .dtors (похоже, именно в них должны помещаться деструкторы) присутствуют. Осталось теперь отладку добить через J-Link и можно праздновать окончательный переход на GCC. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 119 2 февраля, 2012 Опубликовано 2 февраля, 2012 · Жалоба Да, действительно :) Однако, в других примерах, которые я смотрел, секции .fini_array и .dtors (похоже, именно в них должны помещаться деструкторы) присутствуют.У меня тоже присутствовали. Пока безобидный проект при сборке под линухом чуток другой версией гцц вдруг не потащил за собой поддержку файловых операций и всего-прочего на несколько десятков К. Осталось теперь отладку добить через J-Link и можно праздновать окончательный переход на GCCOpenOCD через JTAG работает, swd пилят потихоньку. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AHTOXA 14 2 февраля, 2012 Опубликовано 2 февраля, 2012 · Жалоба OpenOCD через JTAG работает, swd пилят потихоньку. Вот тут проскочило сообщение, что SWD уже работает. (Сам пока не пробовал.) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 119 2 февраля, 2012 Опубликовано 2 февраля, 2012 · Жалоба Вот тут проскочило сообщение, что SWD уже работает.Это радует. А я за списком рассылки слежу, там писали что вбросили что-то в реп, но автор активно трудится на вычленением этого ужаса в отдельную библиотеку и введением отдельного транспорта. JTAG через J-Link работает, это я использую. А SWD мой древний MT-Link не умеет, а когда у меня руки дойдут собрать нормальный, глядишь, уже и в OpenOCD все устаканется. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Pavel V. 0 4 февраля, 2012 Опубликовано 4 февраля, 2012 · Жалоба OpenOCD через JTAG работает, swd пилят потихоньку. Я пока использую родной GDB-Server от Segger-а, у них есть версия в т.ч. под Линукс (которую я и использую). В целом отладка работает, но сопровождается периодическими необъяснимыми вылетами. OpenOCD тоже пробовал, но под ним отладку вообще запустить не удалось. Может быть вы мне поможете с конфигурацией? Процессор у меня LPC1768, OpenOCD запускаю с параметрами типа -f /interface/jlink.cfg -f /target/lpc1768.cfg. Отладчик запускается, процессор распознается. Но ни один из найденных вариантов инициализации отладки так и не заработал. Прикручивать пытаюсь к Eclipse. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться