Embedded SW/Firmware Engineer
Information
- Rating
- 54-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
Вот еще что нужно.
Распиновка главного разъёма:
Если на плате есть главный разъём (что повсеместно в автомобильных ECU), то надо создать подробную таблицу пинов этого разъёма. В этой таблице надо указать тип разъёма, номер пина, название пина, направления в котором движется сигнал по отношению к электронной плате. Такая таблица необходима для создания жгута к которому будет пристёгнута эта электронная плата.
Если человек не дружит с математикой, то ему лучше не идти в программирование.
hate speech
В современных микроконтроллерах (FC7300х) дерево рельсов тактирования выглядит примерно так:
выглядит, как Мюнхенский железнодорожный вокзал.
Разобраться, что к чему совсем не тривиальная задача.
Поймите, рассчитывать PLL коэффициенты надо именно внутри прошивки. На лету.
Проблема в том, что на микроконтроллере не запускаются программы для Windows.
А рассчитывать PLL коэффициенты надо именно внутри прошивки. На лету.
Да. Это учитывается.
Уже есть, называется.
Gravity Timer Productivity Cube Timer LED Display Sensor Flipping Countdown Cooking Study Digital Timer Kitchen Accessories
Получится отличный продукт, если добавить вибрацию по истечению времени.
Можно будет использовать в открытых офисах.
Да, конечно. Это рабочее окружение для отладки высокоточной GNSS навигации. Сантиметровая точность. Тарелка это ground plate. Для уменьшения помех на антенне
Подробности про это можно почитать тут.
Высокоточная навигация GNSS RTK / Habr https://share.google/W1EixI43dxuGhd5hn
Это чтобы квадрокоптеры на автопилоте могли гранаты в дымовые трубы забрасывать
Типичное будничное рабочее место программиста-микроконтроллеров. Романтика...
вот ещё
Оказывается это костыль от вендора.
Надо было в ассемблерном коде к таблице векторов прерываний прописать префикс ,"a",%progbits.
Без этого бинарный таблицы векторов просто не включались в бинарный файл . Флаг “а” указывает, что секция allocable (выделяемая). Это значит, что секция безусловно должна быть загружена в память перед пуском прошивки. Слово %progbits указывает, что секция содержит исполняемый код. Это отличает секцию от секций, которые содержат только отладочные символы или другие неисполняемые символы.
По сути был баг в коде SDK. Там забыли указать, что таблица это исполняемый код (как в STM32) и что таблицу надо безусловно загружать в бинарь. Вместо этого FlagChip-ы положили main-ы в секции из середины pflash, чтобы бинарь растянуть. При этом компоновщик прописывал таблицы только, если в бинаре есть место.
Пришлось включать MPU и накладывать ограничения, чтобы починить этот баг.
Вообще ARM молодцы, что в таблицу векторов прерываний добавили в произвольные места нули.
Это дает возможность просканировать на предмет этого паттерна всю память и найти эти самые таблицы векторов прерываний динамически.
Это особенно полезно в многоядерных прошивках.
А у RISC-V такого нет. Запустил приложение и скрестил пальцы, чтобы не зависло.
Существует ли какая-нибудь консольная утилита, которая берет .hex файл, опциями указываешь ей физический адрес, размер массива и чтобы утилита выдавала массив hex данных по указанному адресу, что лежит в этом hex файле?
Вообще ARM молодцы, что в таблицу векторов прерываний добавили в произвольные места нули.
Это дает возможность просканировать на предмет этого паттерна всю память и найти эти самые таблицы векторов прерываний динамически.
Это особенно полезно в многоядерных прошивках.
И как вы часто stm32 в ARM режиме прошивали?
Да знал я ответ. Просто хотел чтобы текст дополнили.
Что значит ,"a",%progbits
в ассемблерном коде рядом с именем таблицы векторов прерываний?
Скрытый текст
Почему в ARM-Cortex-Mx процессорах фактический адрес функций на единицу больше, чем то значение адреса функции, что указано в *.map файле? Вот .map файл:
реальность:
Адреса функций нечетные. При этом в Flash памяти бинарный код лежит по четным адресам.