jcxz 242 31 августа, 2022 Опубликовано 31 августа, 2022 · Жалоба 17 часов назад, VladislavS сказал: А на асме как индус один раз написал, так оно и есть. А кто заставляет использовать индусский асм? Если кто-то использует чей-то быдлокод - это его выбор. И набыдлокодить и на си можно. А вот от ляпов, навороченных си-компилятором - никак не избавиться. Каким бы грамотным ни был программист. Так что этот ваш аргумент - притянут за уши. Здесь как раз преимущество асма - можно написать как угодно оптимально (зависит только от умения программиста). В случае же с си - больше зависит от умений уже компиляторо-писаталей, а не от талантов программиста. 17 часов назад, VladislavS сказал: Зачем там асм вообще непонятно. А зачем там си? вообще непонятно.... 3 часа назад, VladislavS сказал: Ещё один довод не в пользу асма. Прекрасный "довод"! Некто наваял что-то на си, да так коряво, что даже запустить никак правильно не может. А виноват почему-то ассемблер. У вас реально - расизм. Как уже заметили выше.... 17 часов назад, VladislavS сказал: компилятор может паттерн копирования распознать и memcpy применить. 1. Ключевое слово тут "может". Может применить, а может и нет. Как фишка ляжет. А если нужна максимально быстрая инициализация при старте устройства? Например хотя-бы - быстрое заполнение всей памяти неким шаблоном? Будете гадать - применит ли компилятор LDMIA/STMIA с максимальным числом регистров или будет тупо через один регистр колупаться? 2. А если нужны некие не совсем тривиальные операции с SP в стартапе? Как будете выкручиваться в си-функции? 3. Или например - ваше приложение запускается из другого (либо из бутлоадера, либо ваше приложение - оверлей) и ему передаются аргументы в регистрах >= R4 (в точке вызова по RESET-вектору). Опять - как на си? А вот на асме всё вышеперечисленное совершенно однозначно решается. И работает независимо от причуд си-компилятора. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
VladislavS 39 31 августа, 2022 Опубликовано 31 августа, 2022 · Жалоба 40 минут назад, jcxz сказал: А кто заставляет использовать индусский асм? Да возьмите хотя бы эту тему. У ТС такой стартап и править его ни-ни. И так у подавляеющего большинсва - что было в dfp, то и используют. А править либо не умеют, либо боятся, либо лень, либо.... 1 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Arlleex 187 31 августа, 2022 Опубликовано 31 августа, 2022 · Жалоба Я, например, всегда правлю стартап стандартный, никогда в голом виде не использую. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 242 31 августа, 2022 Опубликовано 31 августа, 2022 · Жалоба А я не правлю, я просто свой пишу: от одного Cortex-M до другого - различия главным образом в таблице прерываний. Остальное большую часть просто копируется. Дел на несколько минут. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
oldbrowze 0 31 августа, 2022 Опубликовано 31 августа, 2022 · Жалоба 12 часов назад, VladislavS сказал: Ещё один довод не в пользу асма. Благодарю. Переделал весь проект под компиляцию через CMake, к тому же использовал ваш С-ный стартап. Проблема, к сожалению, осталась. Использовав явный вызов конструкторов с ключом -nostartfiles: for (void(**fConstr)() = __preinit_array_start; fConstr < __preinit_array_end; (*fConstr++)()) ; for (void(**fConstr)() = __init_array_start; fConstr < __init_array_end; (*fConstr++)()) ; Использовав тот же вызов __libc_init_array() , но уже без ключа - ничего не помогает Я еще не сильно разобрался в этой отладке, поэтому, к сожалению, по асм-листингу пробежаться не смогу... 23 часа назад, VladislavS сказал: 1. Компилятор не добавляет в init_array нужный вам конструктор. 2. Стартап (посредством libc_init_array) не вызывает его. Может будете добры и подскажете, как решать эти проблемы? Да и спасибо вам за помощь! Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
VladislavS 39 31 августа, 2022 Опубликовано 31 августа, 2022 · Жалоба 1 час назад, oldbrowze сказал: как решать эти проблемы? Сделать минимальный проект с этим классом, чтобы проблему было проще исследовать. Попробовать заменить компилятор. Что-нибудь из последнего, что они для embedded специально собирали, 10.3-2021.10 к примеру. Использовать нормальную IDE с отладкой. Какая версия стандарта С++ задана при компиляции? Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 242 31 августа, 2022 Опубликовано 31 августа, 2022 · Жалоба В 31.08.2022 в 21:19, oldbrowze сказал: же использовал ваш С-ный стартап. Проблема, к сожалению, осталась. Печалька. Оказывается си-стартап - не панацея. Как гуру обещали. Кто бы мог подумать! В 31.08.2022 в 21:19, oldbrowze сказал: как решать эти проблемы? Начать с поиска вашего конструктора в листинге. Определить - есть он там или нет? Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
VladislavS 39 1 сентября, 2022 Опубликовано 1 сентября, 2022 · Жалоба 6 часов назад, jcxz сказал: Печалька Если бы вы в эту тема пришли помочь ТС, а не прокачать ЧСВ, то заметили бы какая проблема идёт пунктом номер один вот в этом сообщении Стартап на С позволил убедиться, что libc_init_array тут не причём. Ибо поставить такой эксперимент с асмовым стартапом ТС не мог. А вы вместо того чтобы привести код вызова конструкторов вручную на асме развели зачем-то полемику на отвлечённую тему. И какое отношение к теме имели ваши экзерсисы с листингами асма вообще непонятно. Ну оптимизировали вы одну команду в своём коде и что? От этого у автора конструктор заработал? 1 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 242 1 сентября, 2022 Опубликовано 1 сентября, 2022 · Жалоба В 01.09.2022 в 06:31, VladislavS сказал: развели зачем-то полемику на отвлечённую тему. И это говорит человек, последовательно, раз за разом В 30.08.2022 в 16:32, VladislavS сказал: чаще всего ассемблерного .s, либо нормальный на С. В 30.08.2022 в 16:46, VladislavS сказал: Не вижу ни одного довода в пользу стартапа на asm для кортексов. В 30.08.2022 в 17:01, VladislavS сказал: А можно вот так сделать, чтобы один стартап под GCC, IAR и Keil был. На асме такое как? В 31.08.2022 в 08:23, VladislavS сказал: Ещё один довод не в пользу асма. упорно старающийся увести тред в сторону от темы??? В сторону мерянья пипетками на тему "startup_c круче чем startup_asm" И которому в конце-концов удалось это - ТС таки пошёл пинать колёса В 31.08.2022 в 21:19, oldbrowze сказал: к тому же использовал ваш С-ный стартап И ожидаемо у него ничего не вышло. В 01.09.2022 в 06:31, VladislavS сказал: И какое отношение к теме имели ваши экзерсисы с листингами асма вообще непонятно Не надо передёргивать! Мои листинги были ответом на ваше конкретное сообщение о "великой си-оптимизации". Специально отквочивал ваши слова, на которые отвечал - ознакомьтесь. PS: Может всё-таки ТС осознает, что его проблема не в том, на чём написан его startup? 1 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
oldbrowze 0 1 сентября, 2022 Опубликовано 1 сентября, 2022 · Жалоба 19 часов назад, VladislavS сказал: Сделать минимальный проект с этим классом, чтобы проблему было проще исследовать. Спасибо большое за совет! Это привело меня к решению! Поскольку на чистом проекте статические конструкторы вызываются, проблема с неверными ключами и всей прочей ерундой отпали. Решение было на поверхности: очевидно, что раз мой конструктор(тело) взаимодействует с периферией, эту периферию надо было затактировать!!!! Операции на включения тактирования были вынесены в отдельную функцию, которая вызывалась в main(), но поскольку конструктор вызывался еще до того, как периферия была затактирована, у меня ничего не выходило. Добавил атрибут конструктор на функцию и, о чудо, всё заработало!!! Спасибо огромное @VladislavS за огромную помощь и дельные советы! Пришлось попробовать нечто новое - CMake!) Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться