-
- Решение тут (опять нарвался, пришлось искать на Сахаре свою же тему): Nikolay_Po(1 знак., 15.09.2023 16:44, ссылка)
- Никогда такого не было, и вот опять! Error: lto-wrapper failed.
Offset out of range. Теперь уже со свежим "Arm GNU Toolchain
12.2.Rel1 (Build arm-12.24)) version 12.2.1 20221205
(arm-none-eabi)". Nikolay_Po(2729 знак., 20.05.2023 11:48)
- Вот тут обсуждают что-то похожее. Инлайн асм конфликтует с
компилятором. И предлагаются способы, как всё это примирить
>>> SciFi(1 знак., 20.05.2023 12:46, ссылка)
- Да, надо с индайн ассемблером рещать GenasSPB(8 знак., 22.05.2023 23:23, , ссылка)
- Находил. Проблема в том, что не могу увидеть, найти файл с кодом, где ошибка. - Nikolay_Po(20.05.2023 13:39)
- на электрониксе похожее обсуждали m16(1 знак., 20.05.2023 12:37, ссылка)
- Спасибо, этой ссылки не видал. Но -save-temps не помогло мне
обнаружить файлы с именами, указанные в сообщении об ошибке. - Nikolay_Po(20.05.2023 13:45)
- Теоретически можно процесс сборки сделать через генерацию asm в
явном виде. Так-то gcc делает это сам и подчищает за собой. - SciFi(20.05.2023 15:55)
- А не проще вообще убрать все ассемблерные файлы? Все равно они не
нужны. Если какую-то операцию нельзя сделать без асма (те же NOP,
WFI и т.п.), можно обойтись дефайнами с асмовыми вставками (но оно
и так есть в CMSIS). - Eddy_Em(20.05.2023 16:07)
- Как я понял, достаточно в ассемблерных вставках заменить "LDR Rn,
=CONST" на MOVW/MOVT. - SciFi(20.05.2023 16:39)
- Хорошо. Вроде продвинулся. Поискал среди файлов - в проекте нет ни
одного чисто ассемблерного файла *.s. Но нашёл ассемблерные вставки
в exception-handlers.c, что-то вроде такого: Nikolay_Po(1014 знак., 20.05.2023 18:18)
- Я бы переписал это безобразие на Си (с интринсиками CMSIS) и не
парился. Вообще асм для кортексов - пОшло. LightElf(66 знак., 20.05.2023 23:43)
- Вариант скиньте, интересно. Насчёт ассемблерных вставок - это было
сделано Liviu Ionescu и сподвижниками для µOS++, только что
поискал, оно по ссылке и, вроде развивается тем же человеком. Nikolay_Po(399 знак., 21.05.2023 01:54, ссылка)
- Ну вот как-то так. Оно под иар, но интринсики в CMSIS одинаковые. LightElf(777 знак., 22.05.2023 17:30)
- Спасибо. Самая большая проблема - я не знаю подробностей работы
GCC, make, линкера и прочих программ инструментария. И не знаю
подробностей работы с отладкой, от чего она зависит и как потом
выпилить в редизе. Nikolay_Po(189 знак., 22.05.2023 20:59)
- Обычно для выпиливания в релизе принято обкладывать макросами LightElf(40 знак., 22.05.2023 21:27)
- Спасибо. Самая большая проблема - я не знаю подробностей работы
GCC, make, линкера и прочих программ инструментария. И не знаю
подробностей работы с отладкой, от чего она зависит и как потом
выпилить в редизе. Nikolay_Po(189 знак., 22.05.2023 20:59)
- Предложу посмотреть --> Vit(2 знак., 21.05.2023 06:51, ссылка, ссылка)
- Спасибо. Занятно. Релиз этой ОСРВ вышел 5 часов назад. Касательно
моего случая - не подходит. У них другая среда разработки, а терять
пару дней на то, чтобы понять, как заставить это взлететь в Eclipse
CDT у меня нет возможности. Но за ссылку спасибо. В текущей части
проекта, многозадачность обеспечивается довольно гибким
контроллером прерываний. Но для следующей части уже присматриваю
ОСРВ. - Nikolay_Po(21.05.2023 09:03)
- Я вообще-то о коде без асма:) Хотя переключалка сама по себе
занятная. - Vit(21.05.2023 10:08)
- Нет, там как у всех. Стартап есть, он в папке third_party.
Например: 3rd_party/nucleo-c031c6/arm/startup_stm32c031xx.s Nikolay_Po(23 знак., 21.05.2023 11:16)
- стартапы си-шные прямо в CMSIS-5 лежат Vit(166 знак., 21.05.2023 11:42, ссылка)
- Спасибо. Посмотрю. Просто в шаблоне проекта, который я использовал, предусмотрены "хардфолты" и "ассерт". Обработчики аппаратных ошибок, я, обычно на последних этапах проекта сам прописываю, ещё не дошёл. А ассерт не использую - у меня структуры данных и проверки при изменении значений, надеюсь, исключают ошибки. Так что, скорее всего, можно создать проект с нуля, со свежим CMSIS и просто перекидать в него мои исходники. Посмотрим, пока не критично, работает и так. - Nikolay_Po(21.05.2023 21:38)
- стартапы си-шные прямо в CMSIS-5 лежат Vit(166 знак., 21.05.2023 11:42, ссылка)
- Нет, там как у всех. Стартап есть, он в папке third_party.
Например: 3rd_party/nucleo-c031c6/arm/startup_stm32c031xx.s Nikolay_Po(23 знак., 21.05.2023 11:16)
- Я вообще-то о коде без асма:) Хотя переключалка сама по себе
занятная. - Vit(21.05.2023 10:08)
- Спасибо. Занятно. Релиз этой ОСРВ вышел 5 часов назад. Касательно
моего случая - не подходит. У них другая среда разработки, а терять
пару дней на то, чтобы понять, как заставить это взлететь в Eclipse
CDT у меня нет возможности. Но за ссылку спасибо. В текущей части
проекта, многозадачность обеспечивается довольно гибким
контроллером прерываний. Но для следующей части уже присматриваю
ОСРВ. - Nikolay_Po(21.05.2023 09:03)
- Ну вот как-то так. Оно под иар, но интринсики в CMSIS одинаковые. LightElf(777 знак., 22.05.2023 17:30)
- Вариант скиньте, интересно. Насчёт ассемблерных вставок - это было
сделано Liviu Ionescu и сподвижниками для µOS++, только что
поискал, оно по ссылке и, вроде развивается тем же человеком. Nikolay_Po(399 знак., 21.05.2023 01:54, ссылка)
- Кстати, если LTO используется только для тестирования, можно включить -mslow-flash-data. Компилятор перестанет использовать LDR для констант (заменит их на MOVW/MOVT) и, будем надеяться, перестанет конфликтовать с ассемблерными вставками. - SciFi(20.05.2023 18:59)
- Предлагаю попробовать вариант, взятый из статьи по ссылке: SciFi(120 знак., 20.05.2023 18:46, ссылка)
- Спасибо! Даже Спасибище! За ссылку на фантастически релевантную и
достоверную информацию от первоисточника. Вручную прошёлся по файлу
со вставками. В четырёх местах заменил. Сработало! Сборка успешна,
правда, проверить в действии смогу только на работе, в понедельник. Nikolay_Po(236 знак., 20.05.2023 20:50)
- И как? Фурычит? - SciFi(22.05.2023 21:01)
- Фурычит, без вопросов. LTO работает, код жмётся и ускоряется,
нареканий к работе кода нет. - Nikolay_Po(30.05.2023 10:31)
- Ура! - SciFi(30.05.2023 10:32)
- Та, забыл что у нас с начала недели пусконаладка на выезде, в офисе
бываю лишь инструмент захватить. Даст Бог до конца недели проверю. - Nikolay_Po(24.05.2023 15:45)
- Коньяк можно проставить непосредственно в пустыню. - Kpoк(30.05.2023 11:44)
- Фурычит, без вопросов. LTO работает, код жмётся и ускоряется,
нареканий к работе кода нет. - Nikolay_Po(30.05.2023 10:31)
- И как? Фурычит? - SciFi(22.05.2023 21:01)
- Спасибо! Даже Спасибище! За ссылку на фантастически релевантную и
достоверную информацию от первоисточника. Вручную прошёлся по файлу
со вставками. В четырёх местах заменил. Сработало! Сборка успешна,
правда, проверить в действии смогу только на работе, в понедельник. Nikolay_Po(236 знак., 20.05.2023 20:50)
- Я бы переписал это безобразие на Си (с интринсиками CMSIS) и не
парился. Вообще асм для кортексов - пОшло. LightElf(66 знак., 20.05.2023 23:43)
- Хорошо. Вроде продвинулся. Поискал среди файлов - в проекте нет ни
одного чисто ассемблерного файла *.s. Но нашёл ассемблерные вставки
в exception-handlers.c, что-то вроде такого: Nikolay_Po(1014 знак., 20.05.2023 18:18)
- Как я понял, достаточно в ассемблерных вставках заменить "LDR Rn,
=CONST" на MOVW/MOVT. - SciFi(20.05.2023 16:39)
- А не проще вообще убрать все ассемблерные файлы? Все равно они не
нужны. Если какую-то операцию нельзя сделать без асма (те же NOP,
WFI и т.п.), можно обойтись дефайнами с асмовыми вставками (но оно
и так есть в CMSIS). - Eddy_Em(20.05.2023 16:07)
- Возможно еще -S надо добавить - AlexBi(20.05.2023 15:15)
- На каком этапе добавить -S? Какому приложению? - Nikolay_Po(20.05.2023 17:51)
- Теоретически можно процесс сборки сделать через генерацию asm в
явном виде. Так-то gcc делает это сам и подчищает за собой. - SciFi(20.05.2023 15:55)
- Спасибо, этой ссылки не видал. Но -save-temps не помогло мне
обнаружить файлы с именами, указанные в сообщении об ошибке. - Nikolay_Po(20.05.2023 13:45)
- Вот тут обсуждают что-то похожее. Инлайн асм конфликтует с
компилятором. И предлагаются способы, как всё это примирить
>>> SciFi(1 знак., 20.05.2023 12:46, ссылка)
- Подниму старую тему: ради интереса включил LTO и то же получил Error: offset out of range Компилятор gcc-arm-none-eabi-9-2019-q4-major-win32 с сайта АРМ. Есть ли в природе сборка arm-gcc-9 или 10, которая
"могёт"? - Cидopгeк(01.04.2020 15:52)
- Во-первых, не факт, что это бага. А во-вторых, нет ли по ссылке
решения? >>> - SciFi(01.04.2020 15:56, ссылка)
- Спасибо! Таки, да, виноват не компилер. Инлайн-ассемблерный код в
ядре FreeRTOS (port.c) транслируется в короткие джампы, которые "не
достают" до места назначения, если включена LTO. И, да, по ссылке
есть решение (по крайней мере, проект транслируется). - Cидopгeк(01.04.2020 16:16 - 16:25)
- Как в анекдоте про две новости, хорошую и плохую: хорошая -
бинарник с 213 уменьшился до 181 килобайта. Плохая - будучи залита
в железо, программа падает в WWDG_IRQHandler, хотя вотчдог не
использую. Пойду гуглить ... - Cидopгeк(01.04.2020 16:23)
- Если там 200 КБ реального кода, LTO может поднять из глубин тонны
навоза :-) - SciFi(01.04.2020 16:26)
- Кода там килобайт 100, остальное JQuery.js. Насчет тонн навоза,
согласен. Вопрос, как его отлаживать? - Cидopгeк(01.04.2020 16:39)
- Хороший вопрос... Ответ: долго и мучительно. Или забить на LTO. - SciFi(01.04.2020 16:39)
- Если б то был мой код, чес.слово, полез бы искать. Но там в
основном FreeRTOS + LwIP с альтернативным WEB-сервером, так что
наверное забью. - Cидopгeк(01.04.2020 16:44)
- Ставь только -Os и всё, больше никаких параметров не передавай. Компилятор сам решит чем там лучше оптимизировать, т,к. ряд флагов противоречивы или даже не совместимы. Для "релиза" вполне себе компактно и работоспособно. - POV(20.05.2023 17:54)
- Кстати, есть у меня прошивки с LTO, там же lwip, но нету freertos. Кода из исходников где-то на 80 КБ вместе с lwip. Так что можно считать, что lwip держится молодцом, наверное. - SciFi(01.04.2020 16:52)
- Если б то был мой код, чес.слово, полез бы искать. Но там в
основном FreeRTOS + LwIP с альтернативным WEB-сервером, так что
наверное забью. - Cидopгeк(01.04.2020 16:44)
- Хороший вопрос... Ответ: долго и мучительно. Или забить на LTO. - SciFi(01.04.2020 16:39)
- Кода там килобайт 100, остальное JQuery.js. Насчет тонн навоза,
согласен. Вопрос, как его отлаживать? - Cидopгeк(01.04.2020 16:39)
- Если там 200 КБ реального кода, LTO может поднять из глубин тонны
навоза :-) - SciFi(01.04.2020 16:26)
- Как в анекдоте про две новости, хорошую и плохую: хорошая -
бинарник с 213 уменьшился до 181 килобайта. Плохая - будучи залита
в железо, программа падает в WWDG_IRQHandler, хотя вотчдог не
использую. Пойду гуглить ... - Cидopгeк(01.04.2020 16:23)
- Спасибо! Таки, да, виноват не компилер. Инлайн-ассемблерный код в
ядре FreeRTOS (port.c) транслируется в короткие джампы, которые "не
достают" до места назначения, если включена LTO. И, да, по ссылке
есть решение (по крайней мере, проект транслируется). - Cидopгeк(01.04.2020 16:16 - 16:25)
- Во-первых, не факт, что это бага. А во-вторых, нет ли по ссылке
решения? >>> - SciFi(01.04.2020 15:56, ссылка)
- И что бы вы думали? С тщательно пропатченным gcc-8.2.1-1.7-20190524 от Liviu Ionescu всё работает! Nikolay_Po(533 знак., 14.02.2020 11:37)
- не устану цитировать светоча "ты некомпетентен, обвиняешь святой gcc в своей тупости, вон из профессии" (с) fk0 - POV_(14.02.2020 12:54, )
- А без LTO какой размер? Может просто его выключить? - Andreas(14.02.2020 11:50)
- Так и поступал. Хватало, но объём обработки большой и с LTO запасов по-больше, поспокойнее. Например, O2 без LTO уже недостаточно (или пришлось бы ухудшать ТТХ прибора). - Nikolay_Po(14.02.2020 11:58)
- А в грамммах сколько c Os ? - Andreas(14.02.2020 11:59)
- Что вы хотите узнать? У меня данные с АЦП нужно забирать быстро, они постоянно затираются следующими через DMA. И без оптимизации (правда, безотносительно LTO), происходят накладки. Nikolay_Po(820 знак., 14.02.2020 12:28)
- Спасибо, это и интересовало. Выходит около 1% экономии, но при этом потенциальные проблемы с LTO. И эти проблемы были давно и возникают вновь. Может это и говорит о неполноценности gcc, но вариантов особо нет, да и когда-то в иаре у меня были Andreas(144 знак., 14.02.2020 12:37)
- Обычно разгонять надо в одном-двух местах. Делаю в этих местах "#pragma GCC optimize("O2")" и "#pragma GCC reset_options". Потому что -O2 на весь проект обычно сильно раздувает код, и хочется -Os. - SciFi(14.02.2020 12:32)
- А почему не везде Os ? - Andreas(14.02.2020 12:39)
- Разгон же. АЦП, ПДП. Измерения показали, что без разгона в нужных местах не успевает. Такое редко бывает. Сам склонен всех ругать за преждевременную оптимизацию. - SciFi(14.02.2020 12:48)
- А почему тогда не Ofast ? Я обычно скоростные дела в отдельные файлы выношу и с fast компилю. Но мысль насчет прагмы только на отдельные функции тоже ничего, но у меня что-то не вышло так, уже не помню почему. - Andreas(14.02.2020 13:49)
- На самом деле у меня было так, что всё успевало. Но я решил попробовать увеличить передискретизацию ещё в два раза. И получилось, но лишь на оптимизациях. Пока держу темп. - Nikolay_Po(14.02.2020 13:13)
- Разгон же. АЦП, ПДП. Измерения показали, что без разгона в нужных местах не успевает. Такое редко бывает. Сам склонен всех ругать за преждевременную оптимизацию. - SciFi(14.02.2020 12:48)
- А почему не везде Os ? - Andreas(14.02.2020 12:39)
- Что вы хотите узнать? У меня данные с АЦП нужно забирать быстро, они постоянно затираются следующими через DMA. И без оптимизации (правда, безотносительно LTO), происходят накладки. Nikolay_Po(820 знак., 14.02.2020 12:28)
- А в грамммах сколько c Os ? - Andreas(14.02.2020 11:59)
- Так и поступал. Хватало, но объём обработки большой и с LTO запасов по-больше, поспокойнее. Например, O2 без LTO уже недостаточно (или пришлось бы ухудшать ТТХ прибора). - Nikolay_Po(14.02.2020 11:58)
- Разница между gcc 8 и 9 будет в 100500 раз больше, чем любые тшательные патчи. Ну и для пользы человечества можно было бы направить жалобу куда надо. Правда, велика вероятность, что в gcc 10 уже пофиксили. Но это не точно. - SciFi(14.02.2020 11:42)
- Возможно, что-то похожее на, см. ссылки Nikolay_Po(290 знак., 14.02.2020 12:03)
- А корявый тулчейн откуда взят? - evgeniy1294(14.02.2020 13:51)
- У самого АРМ. - Nikolay_Po(14.02.2020 13:56, ссылка)
- На всякий случай скачал заново, распаковал (прежнюю папку переименовал) и указал в пути тулчейна. Результат с LTO: Nikolay_Po(1957 знак., 14.02.2020 14:04)
- Я использую gcc-9.2 из community-репозитория арча, проблемы такой в нем нет (возможно, нужно проверить тщательнее, но багрепортов не видел). Мейнтейнеры собирают его из апстрима gcc. evgeniy1294(94 знак., 14.02.2020 14:46 - 14:48)
- В ЛС скинул ссылку на архив проекта. - Nikolay_Po(14.02.2020 15:59)
- Вот это вот мне выплюнул мой тулчейн. evgeniy1294(14.02.2020 16:19)
- Ну вот же оно, тот же результат: Nikolay_Po(1776 знак., 14.02.2020 16:21)
- Сейчас потыкаю другие тулчейны - evgeniy1294(14.02.2020 16:27)
- Этот у меня собирает: Nikolay_Po(183 знак., 14.02.2020 17:35)
- arm-kgp-eabi от 12 января проект собрал. Ещё я нашел багу)): файл dsp.h, строка 95 - добавить extern. evgeniy1294(14.02.2020 19:20 - 19:23)
- Ох нихрена себе его раздуло! Nikolay_Po(434 знак., 14.02.2020 19:28)
- Пинай Клёна, ему может быть интересна эта лабораторная мышка. - evgeniy1294(14.02.2020 20:14)
- Ох нихрена себе его раздуло! Nikolay_Po(434 знак., 14.02.2020 19:28)
- Я не успел остальные проверить, вызвали на совещание). Мне кажется, Klen может сказать, в чем проблема. - evgeniy1294(14.02.2020 17:47)
- arm-kgp-eabi от 12 января проект собрал. Ещё я нашел багу)): файл dsp.h, строка 95 - добавить extern. evgeniy1294(14.02.2020 19:20 - 19:23)
- Этот у меня собирает: Nikolay_Po(183 знак., 14.02.2020 17:35)
- Сейчас потыкаю другие тулчейны - evgeniy1294(14.02.2020 16:27)
- Ну вот же оно, тот же результат: Nikolay_Po(1776 знак., 14.02.2020 16:21)
- Вот это вот мне выплюнул мой тулчейн. evgeniy1294(14.02.2020 16:19)
- В ЛС скинул ссылку на архив проекта. - Nikolay_Po(14.02.2020 15:59)
- Я использую gcc-9.2 из community-репозитория арча, проблемы такой в нем нет (возможно, нужно проверить тщательнее, но багрепортов не видел). Мейнтейнеры собирают его из апстрима gcc. evgeniy1294(94 знак., 14.02.2020 14:46 - 14:48)
- На всякий случай скачал заново, распаковал (прежнюю папку переименовал) и указал в пути тулчейна. Результат с LTO: Nikolay_Po(1957 знак., 14.02.2020 14:04)
- У самого АРМ. - Nikolay_Po(14.02.2020 13:56, ссылка)
- А корявый тулчейн откуда взят? - evgeniy1294(14.02.2020 13:51)
- Возможно, что-то похожее на, см. ссылки Nikolay_Po(290 знак., 14.02.2020 12:03)