Job Description
We are looking for a versatile and skilled Software Engineer to join our team and contribute to the development of robust systems with software across Windows, Linux, and embedded environments. The ideal candidate will have strong C/C++ programming skills, experience with Board Support Packages (BSPs), and a solid understanding of low-level embedded development. This role includes both application and system-level programming, with opportunities to work closely with hardware teams.
Responsibilities
- Develop and maintain software applications and system components on Windows (MFC) and Linux platforms.
- Design and implement embedded software, including device drivers, hardware abstraction layers, and BSPs.
- Work with cross-compilation toolchains and environments targeting embedded hardware.
- Support bring-up and debugging of embedded systems using JTAG and in-circuit debuggers.
- Collaborate with hardware engineers to define software-hardware interfaces.
- Optimize code for performance, memory, and real-time constraints.
- Maintain code documentation and participate in design and code reviews.
- Ensure software quality through testing and validation procedures.
Requirements
- B.Sc. or M.Sc. in Computer Engineering, Computer Science, or a related field.
- 3+ years of experience in C/C++ development on Windows and/or Linux.
- Hands-on experience with embedded software development, especially BSP-level work.
- Strong knowledge of operating system concepts, device drivers, and interfacing with hardware.
- Familiarity with cross-compilation, GNU toolchains, and embedded Linux development.
- Comfortable working with version control systems (e.g., Git) and build tools (e.g., Make, CMake).
Nice to Have
- Experience with ColdFire and Cyclone (e.g., NXP, Altera/Intel SoCs).
- Experience with RTOS, real-time constraints, and bootloaders.
- Experience in cross-platform development and system porting.
- Knowledge of scripting languages (Python, Bash) and automation tools.
- Familiarity with network protocols, file systems, and memory management.