Functional duties
:
 * Work in an international (Germany, Italy, Russia, USA) team of developers on the firmware for geodetical-grade GNSS receivers with a rich functionality.
 * Working during normal CET working hours
 * Attending physical office will be required occasionally (the schedule is defined based on the local office policy and agreement with the technical team leader)
 * Requirement analysis, designing solutions, effort estimation, actual implementation
 * Program architecture development, support of existing implementation and adding new functionality
 * Work is on Linux
 * Depending on the skills and individual preference
 working on tasks ranging from business logic development to low level system programming, for example:
 * Extending programmable API intended for customers and external software developers
 * Collaboration with teams of our Linux system developers, RTOS developers, microcontrollers firmware developers on delivering functionality
 * Supporting networking functionality
 * Adding functionality to u-boot bootloader including device initialization
 * Working on firmware update feature in u-boot
 * Work with HW teams on testing procedures for various HW subsystems
 * Development application-specific message exchange protocols (IMU, digital radio and others)
 * Development of internal messaging APIs to communicate with peripheral devices via SPI, i2c buses (like IMU).
 * Working on various runtime defects (work with stack traces, hardware breakpoints and hardware debuggers)
 * Performance optimization
 * Providing help for engineers working on implementing the mathematical algorithms in code
Requirements
:
 * Experience working in a team in a shared code ownership environment, responsibility and wide knowledge of the programming
 * Long term commitment to the work
 * Bacheloror Master'sdegree
 * Good English at least B1
 * Experience in C++ development from 3 years.
 * Experience with basic development tools and version control (git + pull requests), issue-tracking, continuous integration, continuous delivery, refactoring, and static and runtime code checking.
 * Ability to understand existing program architecture and existing source code
 * Experience with cmake
 * Staticcode analysis
 * Automatedunit testing
Nice to haves:
 * Understanding GNSS
 * Experience with bare-metal and/or RTOS (FreeRTOS) development
 * Experience with microcontrollers programming
 * Interrupt-driven programming, understanding multitasking in microcontrollers and in RTOS, understanding how cashes work
Ingegnere Software (C++/Sistemi Real Time)
Mansioni principali:
• Collaborare con un team internazionale di sviluppatori (Germania, Italia, Russia, USA) allo sviluppo del firmware per ricevitori GNSS di precisione geodetica con funzionalità avanzate
• Lavorare durante le normali ore di ufficio CET
• Presenza fisica in ufficio occasionalmente richiesta (secondo il calendario definito dalla politica dell'ufficio locale e in accordo con il responsabile tecnico del team)
• Analisi dei requisiti, progettazione di soluzioni, stima degli effort, implementazione effettiva
• Sviluppo dell'architettura del programma, supporto all'implementazione esistente e aggiunta di nuove funzionalità
• Lavoro su ambiente Linux
• In base alle competenze e alle preferenze individuali, attività che spaziano dallo sviluppo della logica di business alla programmazione di sistema low-level,
ad esempio:
o Estensione dell'API programmabile destinata a clienti e sviluppatori software esterni
o Collaborazione con i team di sviluppatori del nostro sistema Linux, sviluppatori RTOS e sviluppatori firmware per microcontrollori per il rilascio di funzionalità
o Supporto alle funzionalità di rete
o Aggiunta di funzionalità al bootloader u-boot inclusa l'inizializzazione dei dispositivi
o Lavoro sulla funzionalità di aggiornamento firmware in u-boot
o Collaborazione con i team HW sulle procedure di testing per vari sottosistemi hardware
o Sviluppo di protocolli di scambio messaggi specifici per applicazioni (IMU, radio digitale e altri)
o Sviluppo di API di messaggistica interna per comunicare con dispositivi periferici tramite bus SPI, i2c (come IMU)
o Risoluzione di vari difetti a runtime (lavoro con stack trace, breakpoint hardware e debugger hardware)
o Ottimizzazione delle performance
o Supporto agli ingegneri che implementano gli algoritmi matematici in codice
Requisiti:
• Esperienza nel lavorare in team in ambiente di proprietà del codice condivisa, senso di responsabilità e ampia conoscenza della programmazione
• Impegno a lungo termine nel lavoro
• Laurea triennale o magistrale
• Buon livello di inglese almeno B1
• Esperienza nello sviluppo C++ di almeno 3 anni
• Esperienza con strumenti di sviluppo di base e controllo versione (git + pull request), issue-tracking, integrazione continua, consegna continua, refactoring, e verifica statica e runtime del codice
• Capacità di comprendere l'architettura esistente del programma e il codice sorgente esistente
• Esperienza con cmake
• Analisi statica del codice
• Testing unitario automatizzato
Requisiti preferenziali:
• Conoscenza dei sistemi GNSS
• Esperienza con sviluppo bare-metal e/o RTOS (FreeRTOS)
• Esperienza nella programmazione di microcontrollori
• Programmazione guidata da interrupt, comprensione del multitasking nei microcontrollori e negli RTOS, conoscenza del funzionamento delle cache