Hardware Design and Development Tools / Technologies
Software Development Tools
Architecture Model
Before we go to the software implementation, we prepare the architecture in the UML model. For such modeling, we use different tools.
A long time ago, we started with Rational Rhapsody, and now we are using PlantUML, Microsoft Visual Studio, Microsoft Visio, Lucid Chart, and Enterprise Architect.
We adjust the architecture appropriately, whether we build on an operating system – Linux or Windows – or bare-metal firmware.
Project Management Systems
For the software development process, we use a tool family made by Atlassian. We have long experience with JIRA, which is used for bug tracking, where we often utilize Agile process flows based on Kanban or Scrum.
And we exploit the main advantage of JIRA, which is its close connection to the Bitbucket repository.
Version Control Systems
For the revision control system, we started with SVN a few years ago. During the last years, we have migrated to toolchains based on Git, which brings the benefit of flexible branching and merging (when compared to SVN). We push data to a remote Bitbucket repository that offers powerful infrastructure and integration with other tools by Atlassian.
We have been using Continuous Integration (CI) technologies like Jenkins Server.
Coding Tools
Our colleagues are not forced to use specific tools. Most of them like using VS Code or MS Visual Studio; others like Atom, Eclipse, or any simple Linux-based editors.
Almost all the tools offer the full power of a remote-target debugger and various plug-in packages.
We utilize static code analysis tools like Clang for the source files.
Programming Languages
Most of programming languages we use have strong support for both Linux and Windows operating systems.
Some of us like Python for its flexibility and no need to compile, especially for fast software prototyping or test scripts.
For the web-based applications, we have good experience with JavaScript, TypeScript, and various web frameworks like ReactJS, and Express supported by runtimes like NodeJS and Electron.
On the other hand, the colleagues who are deeply involved in the lower-level ARM Cortex embedded firmware applications are good in C or C++.
Device Drivers
Some projects require PCIe cards for a host PC. Such computers mostly run on Windows; therefore, we support our customers by the development of Windows drivers.
We have detailed experience with the older Windows Driver Kit (WDK) and newer Kernel-Mode Driver Framework (KMDF).
Of course, we create drivers for embedded Linux as well – in most cases, for the peripherals that are not a part of the individual SOM (system on module).
Technologies and tools overview