- LTO wrapper failed. Error: offset out of range. Дорос мой проект до такого размера (код около 11-16кБ, в зависимости от оптимизаций), когда LTO перестала работать с таким сообщением. Nikolay_Po(2200 знак., 14.02.2020 11:25 - 11:28, ARM, полностью)
- Решение тут (опять нарвался, пришлось искать на Сахаре свою же
тему): 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, ссылка)
- на электрониксе похожее обсуждали 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)
- Предложу посмотреть --> 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)
- Кстати, если LTO используется только для тестирования, можно
включить -mslow-flash-data. Компилятор перестанет использовать LDR
для констант (заменит их на MOVW/MOVT) и, будем надеяться,
перестанет конфликтовать с ассемблерными вставками. - SciFi(20.05.2023 18:59)
- Предлагаю попробовать вариант, взятый из статьи по ссылке: SciFi(120 знак., 20.05.2023 18:46, ссылка)
- Возможно еще -S надо добавить - AlexBi(20.05.2023 15:15)
- Подниму старую тему: ради интереса включил 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)
- И что бы вы думали? С тщательно пропатченным gcc-8.2.1-1.7-20190524 от Liviu Ionescu всё работает! Nikolay_Po(533 знак., 14.02.2020 11:37)
- Посоветуйте как корректно сравнить переменные типа uint64_t в GCC
для 32 бит ARM(Cortex-A7). Банальное if(var64_1 > var64_2) ..
работает неверно. - Rainman62(10.09.2023 17:20, ARM, полностью)
- Статический анализ ИАР дает кучу предупреждений, в том числе на
массово используемые макросы. Это реально снять предупреждения или
все ветряные мельницы? VLLV(191 знак., 08.09.2023 10:33, ARM, полностью)
- Норот, никто не юзал WCHlink-овский свисток, как УСБ-КОМ? Вроде
где-то видел дажэ окошко терминала в MRS, щас глянуть негде, вот и
спрашиваю. - mse homjak(07.09.2023 13:42, ARM, полностью)
- Работает и со всяческими сторонними терминалами. - Гyдвин(07.09.2023 15:54)
- А в самой MRS терминал есть? Я про это, собсно. - mse homjak(07.09.2023 16:30)
- Есть. Да еще "закудрявленный". Надо ткнуть "мониторчик" в
тулбаре... Гyдвин(1 знак., 07.09.2023 18:43, картинка)
- О! Пасибо! - mse homjak(07.09.2023 19:41)
- Самих чипов переходников штук 6 типов, софт один ко всем годится?
Хочу переход с развязкой сделать USB -> RS232 / RS485.
Переключение тумблером. Чисто для задач фирмы. Иногда что то
заземлить забывают:-) - Visitor(07.09.2023 19:18)
- Там в MRS можно открыть несколько окон терминалов - для любых COM
портов в системе. - Гyдвин(07.09.2023 21:48)
- Лет 5 назад я для коллег наделал изолированных
USB<->RS485-2W/-4W/RS422/RS232 на FT232RL. Выбор типа
порта на DIP-switch (там небольшая логика присутствует). Коллегам
импонирует, что ни под Виндой, ни под Линуксом с ними нет проблем с
драйверами. Единственно, что нумерация портов в Линуксе от порядка
подключения переходников зависит. Но это проблема самого Линукса,
как я понимаю. За все время на 2х переходниках разъем microUSB
оторвали от частого перетыкания. В reZident(42 знак., 07.09.2023 20:33)
- нужно ввести простое правило - всякий желающий что-то к чему-то
подключить должен сперва взяться обеими двумя руками за корпуса
ентих изделий. - Alex68(07.09.2023 20:08)
- Камент: Если втыкать плату в устройство - да, так и делаю. А если
соединять [кабелем] разные устройства, то лучше - организовать
контакт экрана кабеля с корпусом через ладонь одной руки. Я так
думаю! (С) Мимино. Отбивка темы переводом строки - опять не работает. - Toчкa oпopы(07.09.2023 20:44)
- Вспомнился случай. У коллеги что-то подключали на столе и он
пожаловался, что все устройства которые он подключает к обычному
ИБП 24В 1,2А "током бьются". Я предположил, что у него комп не
заземлен, но нет - ввод один, гирлянда из удлинителей в которых
розетки с заземляющим контактом. И проблема только с устройствами,
которые подключаются к этому конкретному ИБП. Разгадка оказалась
очень простой - удлинитель с 6 гнездами, 5 гнезд с заземляющим
контактом, а 6-е гнездо reZident(217 знак., 07.09.2023 20:23)
- :-) Это беру на вооружение! А я до сих пор никак не научу
предварительную диагностику блока делать "послюнявленным пальцем". - alexem(07.09.2023 20:20)
- StarFive [JH7110] SoC начинает выходить в свет. RISC-V 6 ядер. Evgeny_CD(25 знак., 06.09.2023 12:23 - 13:39, ARM, ссылка, ссылка, полностью)
- Еще плата Evgeny_CD(1 знак., 06.09.2023 21:32, ссылка)
- Суки! Т от 0° и выше - Evgeny_CD(06.09.2023 13:41)
- Малинка, малинка, такая вечеринка... - =AlexD=(06.09.2023 13:16)
- Ядров все-таки шесть. Четыре "толстых", одно "тонкое" и одно
32-битное "тощее", чиста на поржать. - LightElf(06.09.2023 12:58)
- Пример платы Evgeny_CD(1 знак., 06.09.2023 12:26, ссылка)
- Мануал доступен по ссылке из головного поста, качается очень
медленно - 34Мбайта - Evgeny_CD(06.09.2023 12:25)
- ДШ Evgeny_CD(1 знак., 06.09.2023 12:24, ссылка)
- В dsPIC-ах и PIC24 имеются инструкции вида add W0, [W1], [W2] . Это позволяет работать с массивами через указатели. Вероятно в
ARM-ах тоже имеется косвенная адресация. Вопрос состоит в том, как
написать на Си для ARM строку кода в некоем цикле так, чтобы он был
откомпилирован в инструкцию использующую косвенную адресацию, а не
загрузку данных в РОН, арифметику, выгрузку данных из РОНа. Пусть
это будет ранее упомянутая сумма, где W1 - указатель на массив A, my504(29 знак., 06.09.2023 11:52, ARM, полностью)
- Как уменьшить размер прошивки с GCC для risc-v? Ключ оптимизации
-Os выбран, опция -ffunction-sections в компиляторе и --gc-sections
в линковщике стоят, всё равно жирно получается. Peter_M(46 знак., 05.09.2023 10:48, ARM, полностью)
- [STM32MP2]. Cortex-A35. BGA 0.8 Evgeny_CD(2 знак., 29.08.2023 17:59, ARM, ссылка, ссылка, полностью)
- Жаль, что они взяли самое младшее ядро (в своем классе) Cortex-A35.
Надо читать, какие опции SIMD туда вкрячат. У всех 64 битных Cortex
SIMD 128 битый, 2 DP за за раз в том числе. Двухядерный камень,
полагаю, просто отменит простые DSP с таковой 500 МГц. - Evgeny_CD(29.08.2023 19:17)
- Ага, OpenSTLinux is provided with Microsoft Azure RTOS components,
enabling real-time performance. Но это может быть только в
отношении Cortex-M33 Evgeny_CD(1 знак., 29.08.2023 19:04, ссылка)
- Подробности. USB 3.0 тоже будет! Evgeny_CD(1 знак., 29.08.2023 18:54, ссылка)
- Ключевой момент - наличие PCIe 2.0. Значит, можно подцепить мост
PCIe <-> PCI 32 бита 66 МГц, и подцеплять дешевые
китайские FPGA GoWin, Efinix без трансиверов. И будет ваще круто! - Evgeny_CD(29.08.2023 18:44)
- Нам остается только надеяться, что документация будет столь же
подробная, как на STM32MP1. Это откроет дорогу достаточно массовому
использованию 64 битных RTOS. GPU под RTOS, конечно, не будет, да и
фиг ним. С NPU вопрос открытый. У NXP есть MCU с открытым
интерфейсом к NPU, можно писать и грузить свой код. Возможно, здесь
будет похожее. И тогда будет щастье :) - Evgeny_CD(29.08.2023 18:41)
- Linux 6.5 будет поддерживать - Evgeny_CD(29.08.2023 18:00)
- Вопрос про GCC по инициализации переменных в .bss и .data il-2(671 знак., 29.08.2023 13:41, ARM, полностью)
- JLink V8 от starterkit.ru + STM32H743. The firmware of the
connected debug probe (S/N : 58001333) does not support the
connected core : Cortex-M7. Please make sure that a current debug
probe model is used and it is running the latest firmware ... Можно
обновить прошивку? Или легко не отделаться? - Rainman62(29.08.2023 09:35, ARM, полностью)
- Производительность Cortex-M* на FFT Evgeny_CD(1 знак., 23.08.2023 12:59, ARM, ссылка, полностью)
- Вопросы от меня продолжаются. ))) Снова AT32F407. При одновременном
реквесте (от одного источника) двух каналов (стримов) ДМА возникает
какой то конфликт, из-за которого код улетает на зацикливание
(строка 359 стартап файла). ЧЯДНТ?: my504(1 знак., 22.08.2023 13:08, ARM, картинка, полностью)
- Какой смысл имеет предупреждение о невыравненном доступе, если
указатель приводится к uint8_t ? memcpy(p, (uint8_t*)&fl_buf[0].val.time[0],4); Функция может начать копировать пачками по 4 байта? - VLLV(21.08.2023 17:29, ARM, полностью)
- Еще вопрос по F407. Есть TIM4, который должен запускать TIM2 и
TIM5, но с разными задержками. Штатную межтаймерную синхронизацию я
запустил по цепочке TIM4CH2===>TIM5. my504(352 знак., 21.08.2023 14:37, ARM, полностью)
- Нашел... Я тотальный косяк. Короче. Объявил константу, адрес
которой писал в ДМА, как локальную - прямо перед строкой
инициализации адреса памяти в ДМА. Грешным делом полагал, что раз
это константа, то она все равно во флеше. Она и была во флеше,
только как то так, что ДМА в результате слала в периферию не 1, а
ноль.... - my504(21.08.2023 16:33)
- Там надо static. Без этого будет временная переменная в стеке. - SciFi(21.08.2023 16:38)
- Ага. Ещё рекомендую "volatile" добавить. Дескать, она изменчива, на
всякий случай перечитай из флеш заново. Но будет тормозить
исполнение доступом к памяти. - Nikolay_Po(21.08.2023 17:08)
- Компилерское volatile не должно влиять на растасовку по адресам,
чем занимается линкер. Если работало в частном случае, значит
где-то в скрипте или сам линкер чухал доп.атрибут и решал что надо
быть отнести данный адреск к той или иной области, в данном случае
FLASH. - RxTx(21.08.2023 18:48)
- Вредные советы. Читать из флеш будет DMA, и ему всё равно, напишете
volatile или нет. - SciFi(21.08.2023 17:10)
- Успех будет лишь в том случае, если адрес константы будет даден
правильный. А если вдруг компилятор решил (допустим, оптимизация на
скорость) оставить константу в ОЗУ? И даст контроллеру ПДП адрес из
ОЗУ, с которым тот не совладает? Volatile заставляет компилятор,
при обращении к константе, обращаться именно к флэш. А значит, и
адрес для ПДП будет взят и передан верный. - Nikolay_Po(21.08.2023 17:14)
- Это не так работает. В заповедях написано, что переменная static
живёт от начала работы программы и до конца. Если взят её адрес,
переменную нельзя выкидывать. Всё, больше там ничего нет. Вы просто
транслируете распространённые мифы. - SciFi(21.08.2023 17:18)
- ну, кстати, Николай интересные вещи говорит ) статик не означает,
что переменная обязательно во флэше расположится - 0men(21.08.2023 17:29)
- Так компилятор и не выкинет переменную (константу), и адрес
сохранит. Просто модифицирует адресную арифметику под ту область
памяти, куда ему удобно эту константу положить. К примеру, GCC с
-O3 -flto, может хранить константы в ОЗУ лишь потому, что для
чтения ПЗУ нужна особая процедура, увеличивающая время выполнения
кода (к примеру, в AVR). И я не мог заставить программу читать
серийный номер прямо из ПЗУ, до тех пор, пока не объявил константу
volatile. - Nikolay_Po(21.08.2023 17:25)
- Проверил еще раз. Нет, показалось. Адрес в ОЗУ. А если static, то
во флеше. Спасибо. - my504(21.08.2023 16:50)
- Но у меня был const uint16_t startTMR2 = 0x1; И ее адрес был во флеше - он начинался с 0x0800.... - my504(21.08.2023 16:43)
- Для начала проверить, что он стартует, если отладчиком туда
записать что надо. Может, банально тактирование на таймер не
подано. Или таймер неправильно сконфигурирован и не считает. - SciFi(21.08.2023 14:43)
- Вопрос по таймерам F407. Есть 3 канала шаговых движков работающих в
микростеппинге 1/256. Частота высокая. Ездят далеко, импульсов
много (больше 65536). Хочется генерить STEP-импульсы не программно,
а таймерами. Импульсы надо а) считать б) выдавать их с заданной
частотой (вообще в идеале переменной). Как вообще выдать N
импульсов в режиме Master-Slave таймерами понятно, и ST-шная
аппнота есть и др. Вопрос в том как подсчитать > 65536
импульсов? RxTx(792 знак., 21.08.2023 17:38, ARM, полностью)