Regarding Embedded Software we use almost exclusively eclipse-based tools. For a long time, there were obvious limitations especially related to program debugging. Meanwhile this is no longer an argument for not utilizing the superiority of Eclipse as a development platform compared to other (proprietary) platforms. Moreover, Eclipse - which has been pushed forward with the help of IBM - represents a de facto standard. With it, a sheer variety of project types can be managed. One can e.g. consider embedded projects that also incorporates PC-based simulation of the same application.
Further, git represents a truly valuable tool for version control of software projects, but also for e.g. documentation (Word-diffs). Originally, git emerged from unsatifying performance and license issues of a version control system used with kernel development. Linus Torvalds ‘himself’ created git. Meanwhile, git has conquered the world of version control systems. A special characteristic is the distributed nature of git. There must not be a ‘central’ server and so called clients. Instead every project contributor in a git supported project has a full copy of the project’s history. As such, the history is accessible immediately, and this simplifies e.g. checkouts of certain project states, e.g. for hotfix work. Moreover, any individual programmer can create his own series of commits, and he can clean up commits afterwards just before submitting or pushing it to elsewhere.
here, a very good description of a possible git workflow can be found. According to preferences, we also use Mercurial, also a distributed system, slightly simpler in handling, traditionally more Windows-friendly and it supports traditional commit numbering (for those, who are used to this).
A word to programming language: because embedded systems are our main concern, we mostly use C. In many cases, the gcc compiler is used - often using optimized libraries. Here it also applies that gcc wasn’t considered as serious by many people, but this is no longer true. Main reason: its usage in Linux kernel development. Some language-extensions that are introduced in gcc improve readability, especially related to so called board files, that mainly consists of so called struct-initialisations. It is remarkable, that such extensions have found their way in recent C language norms.
For Rapid Application Development of e.g. PC-based simulation environments we use Tcl/Tk-scripting. From today’s point of view not really top of the line, but alternatives aren’t really better.