All streams
Search
Write a publication
Pull to refresh
178
112.8

Embedded SW/Firmware Engineer

Send message

Раньше приходилось работать с больным legacy кодом в IAR.

Новые же проекты я собираю из Make.

Это хорошее предложение.
Но тут такое дело. Компания купила за 40млн руб у OutSourcer(ов) код прошивки и те по глупости нафигачили всё в IAR. В OutSourcer работали ВУЗ(овцы) и они просто ничего не знали кроме IAR. Так как у них в универе была какая-то лаба в IAR.

Теперь от IAR так просто не избавится. Особенно сейчас в перид санкций это совсем не круто зависеть от ЕС. Плюс пришлось уже заплатить 10500 евро Шведам за 3 лицензии этой пресловутой IDE, чтобы хоть как-то работать с горе-Legacy от OutSourcer(ов) (нет модульных тестов, нет UART-CLI, спагетти-код).

Понадобится инфраструктурная неделя длительностью минимум 4 месяцев, чтобы перевести все 53 конфигурации IAR на сборки из Make. Но на эту уже нет ресурсов.

Да и руководство считает, что товар хороший, раз расходы такие большие.

IAR использует xml как исходник

Keil использует xml как исходник

CodeCopposerStudio использует xml как исходник
AtolicTrueStudio в режиме авто генерации make файлов использует xml как исходник

И это при том, что "добавление и исключение сотен .с файлов" не представляет никакой сложности и в IDE. 

Лож! В IDE IAR это большая сложностью.

В MakeFile нет xml для каждого проекта. Как в IDE.
Это значит, что добавление и исключение сотен .с файлов для сотен сборок можно делать одной строчкой в make.

При сборке из Make можно одной строчкой включать/исключать из сотен сборок сотни файлов.

В случае с IDE пришлось бы неделю редактировать *.xml(ки) *.ewp, чтобы сделать что-то подобное. Причем если ошибешься с пробелом или запятой в этих IDE(шных) xml, то проект вообще покорраптится и даже не откроется.

IDE это для школоты и протопитирования, когда 1 конфигурация и 1 сборка.


Если вы собираете сорцы из Makefile, то вы можете инициировать сборки прямо из командной строки. А это значит, что процесс сборки можно автоматизировать. Прикреплять в Jenkins. А утром контролировать результаты сотен сборок, что отработали ночью. Производительность работы с Makefile выше.

В случае с IDE вам придется вручную водить мышку, чтобы стартонуть сборку.

Американский профессор Jacob Sorber, доказывает, что люди, которые привыкли программировать в IDE имеют тенденцию становиться очень слабыми программистами.

https://www.youtube.com/watch?v=Pqf6H1WSbeY

потому, что User(ы) IDE не понимают какой путь проходят исходники с момента написания до попадания в Flash. За них всё делает IDE.

Что сейчас пишут на Fortarn(е)?

Никакой это не специальный оператор.
После автоматического форматирования получится 2 оператора (--, пробел, >).
while (i-- > 0) { ... }

Лучше потому что функции помещаются на один экран.
А для поиска по коду можно обратиться к утилите grep.

Когда Switch разрастается больше 45 строк, то надо делать статические LookUpTable(лы) (LUTы). Элементом LUT(а) может являться указатель на функцию до 45 строк.

static const AdcChannelInfo_t AdcChannelInfoLut[] = {
    {.code = ADC_CHANNEL_0, .adc_channel = ADC_CHAN_0},  
    {.code = ADC_CHANNEL_1, .adc_channel = ADC_CHAN_1},
       ....
    {.code = ADC_CHANNEL_999, .adc_channel = ADC_CHAN_999},
};

uint32_t AdcChannel2HalChan(AdcChannel_t adc_channel) {
    uint32_t code = 0;
    uint32_t i = 0;
    for(i = 0; i < ARRAY_SIZE(AdcChannelInfoLut); i++) {
        if(AdcChannelInfoLut[i].adc_channel == adc_channel) {
            code = AdcChannelInfoLut[i].code;
            break;
        }
    }
    return code;
}

Согласен. С++ не подходит для программирования MК так как С++ запрещает стандартом брать адрес функции main. А это необходимо для run-time проверки, что первичный, вторичный загрузчики и многоядерные сборки Generic(ов) легли в нужные адреса NorFlash(а).

Есть такие понятия как верхняя и нижняя половины обработчика прерываний.

Верхняя половина работает в ISR ставит флаги

Нижняя половина работает в супер цикле и запускает долгие функции обработчики.

что мешает программисту посмотреть маркировку и загуглить даташит?

Маркировка часто не соответствует названию чипа.

На PM6766 он лежит в первых строчках поисковой выдачи, хоть и с большой красной надписью на всех листах

Тот 54страничный перечеркнутый pdf это очередной flyer.
Попробуйте найти карту PMB регистров чипа PM6766.  Например битовую детализацию регистра STATUS_BYTE.

При работе с полной схемотехникой в pdf даже на 11 листах поиск Ctrl+F подтормаживает. Поэтому надо делать блок схемы.

Information

Rating
64-th
Location
Москва, Москва и Московская обл., Россия
Registered
Activity

Specialization

Embedded Software Engineer, DevOps
Senior
Git
Bash
CI/CD
C
Embedded system
Programming microcontrollers
Software development
Algorithms and data structures
System Programming
Development of drivers