Кто любит RISC в жизни, заходим, не стесняемся.
Ответить

Re: Ассемблер для STM32. Сложно ли, стоит ли пытаться?

Пн ноя 23, 2020 19:23:10

Вы придумываете проблемы на ровном месте. Пишите грамотный код и результат будет предсказуемым без чтения листингов. Хотя, их чтение таки полезно хотя бы иногда, для общего понимания. Применение асма и ассемблерных вставок заставляет обкладывать код директивами условной компиляции, определяющими тип компилятора. В случае с __set_MSP() и другими интринсиками это сделали разработчики CMSIS, что позволяет мне их свободно использовать. Не потому что это сделал кто-то другой, а потому что это сделано правильно и позволяет их использовать независимо от типа компилятора.

Есть места, где без асм тяжело и даже невозможно. Но на кортексах это скорее исключение. И ваш пример с переходом на прошивку к таковым не относится. Там просто нереально получить нерабочий код. Чуть менее оптимальный возможно, но всё равно рабочий. Конкретно это место не требует марания кода асмом.

Re: Ассемблер для STM32. Сложно ли, стоит ли пытаться?

Пн ноя 23, 2020 21:13:44

Я как раз не люблю проблемы на ровном месте, особенно в МК. И поэтому предпочитаю понимать кто, как, где и почему обещал, что если сделать вот так, то обязательно будет вот это, а не что-нибудь еще. Это логичный способ получить предсказуемый код без мин замедленного действия и странных сюрпризов, вроде бы.

Если я сказал "volatime asm" - компилятор уже не имеет права умничать, это должно быть именно так как указано (в этом фрагменте). Если это не так - это уже баг компилятора. И вот тут я уже в своем праве закатать разработчикам компилятора баг, и отругаться в коменте что вон те костыли - из-за бага XXYYZZ компилера версии такой-то, а не потому что програмер скурил что-то лишнее.

Применение асма и ассемблерных вставок заставляет обкладывать код директивами условной компиляции, определяющими тип компилятора

1) Только если я целился в несколько компилеров. Для МК актуально с большими оговорками и местами.
2) В МК есть много других вещей специфичных для компилера. Даже просто положить вон то в конкретную секцию - компилерспецифично. При желании можно сделать относительно симпатично, типа SECTION(x) который где-то в одном месте задефайнен для gcc, для iar, и кого там еще. А основной код соответственно везде одинаковый.
3) Естественно такого счастья как по мне должен быть минимум, как раз чтобы в случае чего не переписывать половину кода. Но вот мелкую фигню 3-5 команд я не обломлюсь переписать и под принципиально другой процессор.
4) А прикиньте, у допустим RISCV нет никакого CMSIS самого по себе. И ядро другое. Зато у китайцев уже есть типа-STM32 у которого оторвали ядро ARM, приделали RISCV, и по моему прикольно придумано. И в свете назревающей покупкой nvidia фирмы arm мне кажется что уже пора начинать учиться чему-то такому.

Но на кортексах это скорее исключение.
Вот тут я полностью соглашусь, по минимуму я могу F1xx стартануть вообще без либ, интринсиков и асма. И все же CPSID I какое-нибудь ну вот не делается сишными абстракциями, а без него быстро выключить прерывания нельзя. И то что его в интринсик или билтин перепрятали - все же не отменяет этот факт. А раз так, почему-бы мне немного не научиться этому? С пониманием что этот код конечно придется переписать на другой процессор, что его должен быть минимум, etc. Зато это предсказуемо, побайтово, и не должно зависеть от версии, флагов и соседнего кода.

Re: Ассемблер для STM32. Сложно ли, стоит ли пытаться?

Пн ноя 23, 2020 21:32:23

Даже просто положить вон то в конкретную секцию - компилерспецифично.
Уже давно нет.
Код:
__attribute__((section("name")))

Re: Ассемблер для STM32. Сложно ли, стоит ли пытаться?

Вт ноя 24, 2020 01:51:13

Уже давно нет.
Увы, но __attribute__((section("name"))) - вроде бы не закреплено ни в каком стандарте, или я что-то проспал. И если кто это не умеет или делает не так, ему ничего и не предъявишь особо вроде.

Re: Ассемблер для STM32. Сложно ли, стоит ли пытаться?

Вт ноя 24, 2020 04:25:55

Вы уже в который раз ссылаетесь на возможность кому-то что-то предъявить. Вас она греет, когда на столе проект со сроком выполнения "вчера"? Вы предпочитаете его выполнить, получить деньги и перейти к следующему или "предъявить" и сказать заказчику "сорри, я не виноват"?

Re: Ассемблер для STM32. Сложно ли, стоит ли пытаться?

Вт ноя 24, 2020 12:41:28

Увы, но __attribute__((section("name"))) - вроде бы не закреплено ни в каком стандарте, или я что-то проспал.

Видимо не просто проспал, но даже не желаешь просыпаться. Поиском по ключевым словам можно найти всё что угодно.
https://gcc.gnu.org/onlinedocs/gcc-3.2/ ... butes.html

Re: Ассемблер для STM32. Сложно ли, стоит ли пытаться?

Вт ноя 24, 2020 15:21:28

Что ещё для счастья надо?
МХО Есть каста программистов, которые не понимают в электронике (но считают что понимают хорошо и достаточно для них), и программу рассматривают узко, как математические функции, обработка данных. Для них существует только контроллер с числовым входом и выходом. Таким людям язык Си самое оно и больше ничего не надо. И эти люди просто не могут понять задачи выходящие за рамки "программы в вакууме". И с пеной у рта кричат что кроме Си ничего не надо, а все кто не согласен неадекваты или тупые.

Re: Ассемблер для STM32. Сложно ли, стоит ли пытаться?

Сб ноя 28, 2020 10:16:36

Вы уже в который раз ссылаетесь на возможность кому-то что-то предъявить. Вас она греет, когда на столе проект со сроком выполнения "вчера"?
Это критерий оценки соответствия стандартам кода и компиляторов. Если некий компилер это не умеет - что дальше? Я свалюсь им как снег на голову и скажу что это, дескать, плохо? Плохо почему? Потому что он - не GCC? Я такие даже видел :)
Вы предпочитаете его выполнить, получить деньги и перейти к следующему или "предъявить" и сказать заказчику "сорри, я не виноват"?
С таким отношением как мне кажется сайты-визитки - и быстрее и безопаснее! А если надо вчера - либ на пару мегов насовать и за 10 минут готово, красота.
Видимо не просто проспал, но даже не желаешь просыпаться. Поиском по ключевым словам можно найти всё что угодно.
https://gcc.gnu.org/onlinedocs/gcc-3.2/ ... butes.html
Что-то я решительно не вижу где там написано что __attrubute__ является стандартом. Зато вижу обратные рассуждения про _Pragma, с коментом что это дескать более неудобно. И ведь хрен поспоришь, доки и GCC неплохие. И обычно не врут. Конечно как любителю опенсорса льстит что GCC в фаворе, но истина все ж дороже.
p.s. а ты случайно не какой-то из древних реверсеров или типа того? Ник какой-то. Как будто я его видел. Давно.

МХО Есть каста программистов, которые не понимают в электронике (но считают что понимают хорошо и достаточно для них), и программу рассматривают узко, как математические функции, обработка данных. Для них существует только контроллер с числовым входом и выходом. Таким людям язык Си самое оно и больше ничего не надо. И эти люди просто не могут понять задачи выходящие за рамки "программы в вакууме". И с пеной у рта кричат что кроме Си ничего не надо, а все кто не согласен неадекваты или тупые.
Говоря за себя - я полагаю что для каждой задачи хорош свой инструмент. Иногда и немного и ассемблер на сабже не смотрится дурно. Но писать на нем более-менее серьезную прошивку для ARM - а ну его в болото: на асме общая логика этого плохо ухватывается. А отладить математику типа крипто на стороне компа кстати удобно - мощные инструменты типа asan/ubsan есть, проверят что код не говно. Это намного лучше чем непонятный трэш с выносом памяти пытаться в дебагере осмыслить, особенно когда состояние сильно урыто. На стороне МК так инструментировать сложно - оно много хлама в рантайм добавляет. Да и статические анализаторы для си умные стали, иногда дельно спрашивают - а что это у вас тут за подозрительная штука? На ассемблере так не получится. И да, на cortex M можно без напрягов сделать на сях и чисто управляющую задачу. Ну я до кучи шаговик покрутил, нормально вполне. Куда железнее? Там математики в понимании математивов - вообще нет :). Cortex'ы на си здорово оптимизированы.

p.s. однако на мой вкус асм у cortex M весьма логичный и приятный, получше многих других.

Re: Ассемблер для STM32. Сложно ли, стоит ли пытаться?

Сб ноя 28, 2020 11:48:35

Что-то я решительно не вижу где там написано что __attrubute__ является стандартом.

Стандарты бывают разными: языка программирования, спецификаций, форматы линкера, а в данном случае самого компилятора GCC. Для других компиляторов есть свои стандарты, и всё это между собой не совместимо. Просто нужно копать в одном направлении, а не везде по чуть чуть.

Re: Ассемблер для STM32. Сложно ли, стоит ли пытаться?

Сб ноя 28, 2020 22:09:35

Стандарты принимаются стандартизирующими организациями и одинаковы для всех. В этом весь их смысл. А собственный креатив авторов компилятора - стандартом, соответственно, не является. Как максимум "стандартом де-факто", но при всем уважении к GCC даже это было бы слишком громким заявлением: я видел компиляторы где это делалось иначе. И это не нарушало никакие стандарты. А так максимум что стандартизировано применительно к мк - разве что nostdlib какой-нибудь, но, увы, это не все что было надо.

Re: Ассемблер для STM32. Сложно ли, стоит ли пытаться?

Сб ноя 28, 2020 22:50:30

__attribute__((section("name"))) поддерживают, как минимум, gcc, iar и arm compiler. По состоянию на сегодня это все основные компиляторы под ARM.

Re: Ассемблер для STM32. Сложно ли, стоит ли пытаться?

Вс ноя 29, 2020 02:02:03

Да и собственно фирма ARM чуть ли не выбросила уже свой компилер в пользу GCC. Однако вот именно стандартом оно от этого все же не становится - никто не назовет обозначение стандарта и стандартизирующую организацию ратифицировавшую это. Разработчики GCC просто однажды сделали как им было удобно, GCC стал довольно популярен, остальные собезьянили. Но не все и не везде. И эти разработчики даже не обещали что никогда не будут менять например этот интерфейс, или там что еще.

А так то у gcc довольно много дельных расширений есть. Некоторые даже в стандарты попали постепенно. Но, увы, опять же далеко не все. Ну вон у них например case с диапазоном в switch. Очень клево и удобно - но, к сожалению нестандартно. Хотя конечно идея устроить проприетарщикам вендорлок на gcc выглядит стебно, что сказать. На самом деле я порой грешу нестандартными 0b1001100... - ну, блин, слишком уж удобно и наглядно для микроконтроллеров чтобы не использовать такое, хорошо визуально показывает структуру всяких битовых штук - и вообще все что я видел минимально разумевшее C99-like такое все же сжирало.

Re: Ассемблер для STM32. Сложно ли, стоит ли пытаться?

Вс ноя 29, 2020 02:06:15

Не gcc единым… Тот же шланг успешно развивается. Уже сейчас у него значительно более вменяемые сообщения об ошибках и предупреждениях, нежели у gcc! Разве что с ARMянами пока не очень (судя по слухам). Но, возможно, версии к 12 шланг полноценно сможет и на этом поприще с gcc конкурировать.
По крайней мере, на ПК уже вовсю расходятся истории успеха о замене gcc на шланг в той же генте! И ядро уже полноценно собирается шлангом…

Re: Ассемблер для STM32. Сложно ли, стоит ли пытаться?

Вс ноя 29, 2020 02:18:04

Собственно clang собезьянил с gcc почти все особенности и расширения. А так пусть себе развивается где-нибудь там, его эппл и гугл поделили на двоих, микроконтроллеры эту сладкую парочку особо не интересуют, зато за обоими этими фирмами никогда не ржавело кинуть своих адептов с поддержкой тех или иных технологий и проектов, при том резко и внезапно. Гентушникам что, они к этому привычные, там вся система такая что может резко и внезапно помереть.

Re: Ассемблер для STM32. Сложно ли, стоит ли пытаться?

Вс ноя 29, 2020 03:39:00

iddqd, Eddy_Em, господа хорошие! Да прекратите вы рассуждать на темы в которых не разбираетесь. ARM Compiler это и есть LLVM и CLANG.

iddqd, двоичные литералы через 0b в стандарте C++14 ещё ввели.

Eddy_Em, берёшь Keil и пользуешься Clang "из коробки".

Re: Ассемблер для STM32. Сложно ли, стоит ли пытаться?

Вс ноя 29, 2020 09:43:20

примеры для тестирования stm32 clang/gcc. В линуксе просто установить из репозитория clang и llvm
https://github.com/dwelch67/stm32_sampl ... LEO-F401RE
з.ы. для blink получается clang бинарник больше чем gcc

Re: Ассемблер для STM32. Сложно ли, стоит ли пытаться?

Вс ноя 29, 2020 10:23:20

Неудачный код для тестирования компиляторов. Вы его загоняете в рамки того что написали в асме. Без вызова ассмеблерных функций компилятор сделает код лучше.

Re: Ассемблер для STM32. Сложно ли, стоит ли пытаться?

Вс ноя 29, 2020 10:36:53

оно в обоих листингах одинаково
Код:
bl   8000050 <GET32>

Re: Ассемблер для STM32. Сложно ли, стоит ли пытаться?

Вс ноя 29, 2020 10:37:45

Ну и где компилятору себя проявить, если вы всё за него на асме написали?

Re: Ассемблер для STM32. Сложно ли, стоит ли пытаться?

Вс ноя 29, 2020 10:43:30

ну дык написал - уже на блинке проявилось, кому не лень может посмотреть почему (для этого ссылка). Мне лень
Ответить