All streams
Search
Write a publication
Pull to refresh
2
0
Максим @mctMaks

инженер-программист

Send message
QT_QPA_EGLFS_

Этот самый EGLFS вещь полезная и интересная, но с одним не достатком — информации маловато будет.

Есть документация на сайте самого Qt, легко ищется по связке «qt eglsf» или «qt embedded linux». Но при этом, возникает чувство что не все описано. Или описание не подробное.
Там же часть параметров можно внутри кода прописать, часть через переменные в самом linux. Может кто знает, где ещё можно почитать про этого зверя?
На некоторых можно настроить этот интервал вручную, так вот при максимальном значении картинка очень заметно портится.


Onyx book Kopernik. куплена в год её выхода на рынок, отключил полную перерисовку текста совсем. Читал много на ней и по долгу, особых артефактов не заметил. Иногда даже картинки выводил.

E-ink на stm32l0-disco. Картинка после примерно месяца-двух без питания на плате «осыпается». Начинает проглядывать подложка. Перерисовка экране не помогает, он теперь выглядит грязно серым.

Так что я бы не обобщал все экраны, очень много факторов зависит от качества исполнения. Ну и вишенка на торте, это время полного обновления для 3х цветного дисплея. Китайцы писали что время будет близкое к 10 секундам для такого разрешения. если мне не изменяет память
так вот как в фильмах увеличивая изображение с уличной камеры на банкомате в миллион раз получают фото сверхвысокой детализации. надо ж, оказывается не все киношники выдумывают.
во истину математика творит чудеса…
что уж мелочится, сразу радужным…
конфликт может быть в ОС с драйверами, там же по PID\VID идентификация идет. Что мешает зайти на сайт usb.org, найти список вендоров и взять VID производителя МК, используемого вами, оттуда. А PID уже придумать свой, но взять из диапазона 0xA000 — 0xFF00. Я сомневаюсь, что он занят.

для привлечения я думаю, достаточно взять чьи-нибудь PID\VID, собрать партию в миллион миллионов штук. В итоге, Вас смогут заметить и предъявить иск в нарушении прав, потери прибыли и чем-нибудь ещё.
+1. Удобная вещь, учитывая что:
  • умеет в цветовую дифференциацию штанов уровней логгирования;
  • в ней есть простенький способ отображения переменных на графике
  • она берет на себя организацию буферизации
  • ну и бонусом, достаточно высокая скорость работы
  • чуть не забыл, аппаратный детектор наличия отладчика. если его нет, то данные начинают скипаться и лог автоматически отключается.


При этом платим только за вызов функции конфигурации, отдаем немного ОЗУ под буфера и несколько сотен микроампер добавочного потребления.
Основные затраты, что на разработку, что на поддержку берет на себя бизнес-логика устройства, а не разовая настройка периферии.

относительно это. Иногда изменение настройки периферии существенно меняет «бизнес-логику» проекта в целом. Даже при однократной настройке по включению устройства.

В добавок, сопровождение проекта это ведь не только про устранение найденных багов, но и иногда добавление новой «фичи». А это в свою очередь может привести к пересмотру задействованной периферии и её переконфигурации. В итоге: да, казалось бы 10% от всего кода, но пришлось большую часть переписывать.

Я думаю, что у каждого есть такой случай в практике, а то и не один.

Вообще когда начинают считать стоимость разработки или поддержки применительно к настройке периферии, то это вызывает удивление.

ИМХО, Больше удивление вызывает, когда немного поковырявшись с настройками периферии реализуешь аппаратно большую часть того, что было реализовано программно. Опять же, способ настройки может сказаться и при разработке схемы. А это уже экономия на компонентах. Так что, учитывать надо все :)
А для встроенного загрузчика (тот что системный и через разные интерфейсы доступен) как правильно обходить данную защиту? Или он дефакто её отключает?
К сожалению имею пробел в данной области, хотелось бы восполнить
у max'ов есть не приятный момент, связанный с автоподстройкой. АРУ внутри чипа иногда дает «ступеньки» в сигнале при появлении внешней засветки. Исходя из этого, корпус для девайса делается не светопрозрачный и по максимуму закрывать от боковых «засветов».

ну и бонусом, частота дискретизации у них плавает, так как не во всем моделях предусмотрен внешний кварц. из практики, вместо 1кГц имели с датчика примерно 998 Гц. вроде мелочь, но синхронизировать с другим потоком оказалось не просто.

а так идея годная и актуальная ;)
у себя делал так (проект под Segger Embedded Studio), когда хотел «выгнать» РТОС в отдельный регион:
__attribute__((section(".bss2"))) static uint8_t ucHeap[ configTOTAL_HEAP_SIZE ];

непосредственно в файле heap_4.h для контроллера stm32l471.

Там ОЗУ на 2 сегмента поделена по диапазону адресов:
<root name="STM32L471RG">
  <MemorySegment name="FLASH" start="0x08000000" size="0x00100000" access="ReadOnly" />
  <MemorySegment name="RAM" start="0x20000000" size="0x00018000" access="Read/Write" />
  <MemorySegment name="RAM2" start="0x10000000" size="0x00008000" access="Read/Write" />
</root>


Особых проблем с работой РТОС не заметил
для лучшего понимания и удовлетворения праздного любопытства, embedded — программисты (особенно те, что для MCU) входят в engineering managment?
тоже интересно, а что они будут транслировать то? Пункт управления и экран с демонстрацией текущей стадии посадки?
по работе делали браслет с вибриком внутри. в ТЗ писали " наличие тактильного воздействия", в уточнении писали что нужен вибрик. Так что, мотор для тактильного воздействия = тактильный мотор ))
Попробую на досуге.
SES использует либо GCC компилятор, либо свой собственный. При этом, GCC который они интегрировали к себе, Ваш анализатор не видит. Я уже писал как-то Вам по этому поводу.
Для каких IDE не хватает плагина?

Свой вариант: Segger Embedded Studio. В крайнем случае любая другая для embedded.
Вроде немцы позволяют подключать плагины внешние. Среда-то не плохая в целом, а вот нормального анализатора не имеет.
Относительно, зависит от того с чем сравнивать. Ну и от цели, которую перед собой поставили. Настройка и работа с периферией в МК это процентов 5-10% от объема всего кода. Остальное логика, обработка данных. При проектировании да, стоит подумать над тем как эффективней использовать, а не настраивать.

Если сравнивать настройку через SPL\HAL (без оптимизации), то препроцессор может дать выигрыш в производительности. Т.к. большая часть кода будет запускаться не в рантайме.

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

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

ИМХО, Ну и сейчас тенденция миграции на С++ при программирование под МК стала более заметной. Так что использование препроцессора, это скорее как один из этап развития.
код запускался во встроенном симуляторе. В настройках проекта:
Heap Size = 0;
Main Stack Size = 2048;
Process Stack Size = 0;

Linker = SEGGER;
Ну вот например, тренировался на этом шаблоне:
class Singleton {
public:
  static Singleton* instance() { return inst_; }
  void run()  { }

private:
  Singleton() {}
  static Singleton* inst_;
};
Singleton* Singleton::inst_ =  new Singleton();


Расход памяти можно посмотреть тут:


То есть формально куча не создана, но указатель на нее у segger'а есть. Они относительно недавно, в этом году, меняли и линкера, и компилятора своего. Из-за этого перестали собираться проекты, созданные в ранних версиях. После выхода патча стало легче, но старые проекты восстанавливать все равно пришлось
у меня из нудных проблем, это временная синхронизация BLE устройств. При чем особо не решенная. Но вряд-ли кто-нибудь решит поделится своим решением в данной области.

Подробного описания периферии, принципов ее работы, эмуляцию и запуск на аппаратном модуле.

Могу рассказать про свой опыт работы с nrf52840. Достаточно интересная периферия с возможностью каскадирования внутри чипа через модуль PPI (Programmable peripheral interconnect — программируемое подключение периферии). Вроде занятная штука, но интересно ли будет?
а чего хочется увидеть, хоть примерно? Без сарказма вопрос.
вот и мне было интересно почему он. В настройках проекта указал, что размер heap = 0. Но тем не менее при переопределении виртуальной функции в памяти образовался регион, дословно не помню, но сочетание seggerHeap там было. Искать концы было лень, так как это была «песочница» для обкатки шаблона.

Information

Rating
Does not participate
Location
Таганрог, Ростовская обл., Россия
Date of birth
Registered
Activity