Embedded Software Engineer
As an Embedded Software Engineer you will be part of the operating system team that belongs to an R&D division of u-blox’s Positioning product center. The team is responsible for providing reliable, scalable and secure real-time operating system for a wide variety of u-blox positioning products. We design, implement, test, document and maintain low-level platform software that boots up the system and manages its resources. That includes, amongst other things: startup, power management, task scheduling and communication, exception and interrupt handling setup, memory management, security services and device drivers.Our software runs on embedded processors integrated with several RAM and ROM blocks, specialized signal processing acceleration units and other custom HW, as well as standard peripheral blocks within System-on-a-Chip products. We work closely with several hardware and software teams to help bring up new chips, prototype and implement features, perform system-level testing and optimization. We also cooperate with architecture, product and application engineering teams, receiving feedback about and improving our software.You will be part of an international multi-site team. In your daily work you’ll be using Scrum and the following tools to cooperate: Jira, Phabricator, git, wiki. You will mainly program in C but also will use assembler for ARM (Thumb2), C++, Perl and Python where necessary. You have a general understanding of digital electronics and are able to use, e.g., a Lauterbach debugger and various lab equipment, such as oscilloscopes, signal analyzers, programmable power supplies, etc. for debugging purposes.The position shall be based in Tampere, Finland. There shall be occasional travel to other u-blox sites within Europe.Your Responsibilities
- Participate in design, implementation, testing and optimization of operating system software for new and existing platforms of u-blox positioning products
- Review and refactor code, fix issues, collaborate with product and application engineering teams to help improve software
- Create and maintain technical documentation for developed software modules and features
- Take part in design of new SoC platforms, provide input from OS perspective
Your Skills and Experience
- BSc., MSc or specialist diploma in computer science, electrical engineering or equivalent studies
- Familiarity with ARM architecture and SoC technology
- Basic knowledge of digital electronics and experience with lab equipment
- Knowledge of computer architecture in general, as well as of widely used embedded peripheral interfaces, such as UART, SPI, I2C
- Hands-on knowledge of low-level embedded software development with real-time operating systems using the C programming language
- Sound analytical and problem-solving skills
- Fluency in written and spoken English
- Solid experience with git, Linux command-line environment and basic development tools (make, gcc- and clang-based toolchains, doxygen, etc.)
Bonus Point
- Knowledge in GNSS technology
- Other programming and scripting languages, such as C++ and Perl
- Experience in PCB or FPGA design
- Knowledge in software testing, test automation, continuous integration concepts, as well as agile methodology
Please apply with your CV and motivation letter.