• В чём различие между FASM и FASM G?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    https://flatassembler.net/docs.php?article=fasmg говорит нам:
    What is flat assembler g?
    It is an assembly engine designed as a successor of the one used in flat assembler 1, one of the recognized assemblers for x86 processors. This is a bare engine that by itself has no ability to recognize and encode instructions of any processor, however it has an ability to become an assembler for any CPU architecture. It has a macroinstruction language that is substantially improved compared to the one provided by flat assembler 1 and it allows to easily implement instruction encoders in form of customizable macroinstructions. This approach has a great flexibility at the cost of performance.

    Т.е. fasm g -- это ассемблерный движок, нацеленный на то, чтобы стать ассемблером для любой архитектуры за счёт использования встроенного языка обработки макросов.
    Т.е. как будто бы ответы на твои вопросы -- "не зависит", "отдельный", "предназначен для того же и большего".
    Ответ написан
    Комментировать
  • Что делать если не знаешь как реализовать что-либо при написании программы?

    @EvgeniiR
    https://github.com/EvgeniiR
    Я такой человек который предпочитает полагаться на свои знания, да и вообще на самого себя (Ну, то есть могу взять и изобрести велосипед, как говорится)

    Синдром неприятия чужого кода. Пройдёт )

    Ведь невозможно абсолютно всё держать в голове и при необходимости запрограммировать что угодно или я что-то не так понимаю?

    Есть базовые вещи и понимание как что-то делать или как что-то сделано, а есть кучи либ и инструментов выполняющих +/- те же задачи документацию по которым можно загуглить за пару минут и прочитать за пару часов. Запоминать нужно первое.

    В гуглении нет никаких проблем и ничего предосудительного ни для кого. Совсем.
    Тем более при изучении инструментов/фреймворков и т.п.

    Для базовых вещей(паттерны, дизайн и т.п.), конечно, стоит начать с книг.
    Ответ написан
    Комментировать
  • Что нужно знать для программирования железа?

    @lamerok
    Вообще, если вы хотите быть именно программистом, то знание как паять и деталей схемотехники не нужны. Обычно в более менее приличных конторах разделяют схемотехника и программиста. Но в небольших конторах, это может совмещаться, однако это сильно влияет на качество.
    Поэтому если вы хотите быть специалистом высокого класса, то лучше разделить две эти вещи, схемотехника и программирование.

    В целом программирования для микроконтроллеров можно как и любую другую разработку разделить на уровни.
    Для простоты скажем это Уровень железа (Hardware Abstact Level (HAL)) и уровень приложения (Application или Business Level)

    Для того, чтобы заниматься уровнем железа необходимо:
    1. В первую очередь знать как работает микроконтроллер, и всякая периферия от простых портов, UART, ADC, SPI и до USB, Ethernet и Bluetooth. Для этого необходимо почитать соответствующую литературу, можно статьи, коих много в интернете.
      И после этого ознакомления, самое главное, необходимо изучить оригинальные спецификации на все это, потому что только там есть правда.
    2. Необходимо знать язык программирования, для начала Си, но лучше сразу начать с С++ :). Ассемблер вам понадобиться в настоящих приложениях очень редко, только если, вы скажем, захотите написать свою RTOS . Т.е. особо без надобности изучать ассемблер не надо, но как работает ПО прошитое в микроконтроллер и сам микроконтроллер вы знать должны (Стек, как происходит вызов функций, как выполняется прерывание, как создаются динамические объекты, что такое куча и т.д.)



    Для того, чтобы заниматься уровнем приложения:
    1. строго говоря можно про аппаратуру знать постольку поскольку, например, если у вас уже написал HAL для UART, то вам не надо знать, какие там регистры используются для установки четности или скорости, вы просто будете вызывать соответствующие функции HAL

    2. однако тут необходимо знать дополнительно много всего, включая С++ и, например, паттерны проектирования, Операционные системы реального времени, парадигмы программирования ( к примеру, ООП, метапрограммирование) и т.д.



    В общем и целом, если контора небольшая то, для "программирования железа" необходимо уметь все от разработки схем и оптимизации кода на ассемблере до Метапрограммирования... Таких людей в жизни я не видел. Есть люди которые знают это все, но знания очень поверхностные, есть которые хорошо знают одну часть, но не очень другую.

    Обычно все таки людей разделяют на схемотехника и программиста, который делает все от HAL до бизнес логики.

    В идеале, должны быть 3 человека, схемотехник, программист низкого уровня (HAL, стеки, драйвера), программист бизнес логики
    Ответ написан
    Комментировать
  • Что нужно знать для программирования железа?

    Moskus
    @Moskus
    Если отвечать формально, то, конечно, нет - для программирования уметь паять не нужно. Но так обычно случается, что хороший специалист по низкоуровневому программированию в процессе учёбы осваивает некоторые смежные навыки. Тем более, именно паять - не так уж и сложно. Наличие таких смежных навыков существенно повышает уровень подготовки и ускоряет процесс разработки, особенно, если работать в маленькой компании, где ценятся широкие, а не узкие специалисты.
    Ответ написан
    Комментировать