Successful Endeavours - Electronics Designs That Work!

Search Results for 'C Programming Language'


Top Programming Languages

Each of the past 3 years IEEE Spectrum have conducted a survey of the Top Programming Languages. This year they have done it again and the results are in. The overall winner is Python with C taking out the Embedded Software category.

Here is the overall list covering all development platforms considered.

Top Programming Languages 2017

Top Programming Languages 2017

So Python is the winner and for the first time. It’s continued rise in usage is a testimony to the usefulness of the language and the ecosystem that sits around it. But the top 4, Python, C, Java and C++ are a long way ahead of the rest overall.

Top Embedded Programming Languages

And for Embedded Software development we have.

Top Embedded Programming Languages 2017

Top Embedded Programming Languages 2017

There has been some discussion around whether Arduino is a Language since it is a platform with a development tool set built around C and some libraries. But this is a compilation of responses from software development practitioners and so they obviously think it is.

The surprise for me is Haskell. Functional Programming is still in its infancy and there is a lot we don’t fully get about it so I was surprised to see it ranking so highly. What would be really useful is to also get an understanding of what types of problems/solutions/applications the programming was being applied to rather than just the language the solution was implemented in.

Of interest is the correlation with the languages we use here at Successful Endeavours. Here is our short list:

  • C
  • C++
  • Python
  • PHP
  • Perl
  • VHDL
  • Assembly
  • HTML
  • Arduino

The previous results can be found in

Successful Endeavours specialise in Electronics Design and Embedded Software Development, focusing on products that are intended to be Made In AustraliaRay Keefe has developed market leading electronics products in Australia for more than 30 years. This post is Copyright © 2017 Successful Endeavours Pty Ltd.

Programming languages

It is 2016 and we are a long way from the 1970s. So of course the world has moved on. Today’s programming has advanced significantly and we have super low powered systems of extraordinary capacity and easy to program securely. Surely!

Or should that be surely?

So here are the IEEE top programming languages for 2016.

Top Programming Languages 2016

Top Programming Languages 2016

This isn’t the first time we have done this. If you go back to Top Programming Languages 2015 you will see that C was second and Java was first. This year, C is first. A 1970s language is back to being first for all programming in 2016. Why?

It is called the Internet of Things or IoT.

So is this a step backward?

In 2016 devices shipped in the product category known as the Internet of Things exceeded all other mainstream electronics device categories. Take all mobile phones, tablet computers and iPads, desktop computers, netbooks, laptops, servers and general computing devices combined, and this is less than the value of products shipped in the category of the Internet of Things.

And this is what is driving the use of the C programming Language. For these small, low powered, low cost, essential to our future devices, have to be programmed in something that lets you get close to the hardware so you can manage it, and also operate in a high level language. My hat goes off to Dennis Richie and KenTompson who developed this language in the early 1970s and gifted it to us all. Their vision has carried an entire civilisation forward.

Ken Thompson and Dennis Ritchie

Ken Thompson and Dennis Ritchie

So more than 40 years later, I am still very grateful for their foresight, vision and competence in creating the most used computing language on earth today.

Successful Endeavours specialise in Electronics Design and Embedded Software Development, focusing on products that are intended to be Made In Australia. Ray Keefe has developed market leading electronics products in Australia for more than 30 years. This post is Copyright © 2016 Successful Endeavours Pty Ltd.

Top Programming Languages

We previously look at the Top Programming Languages for 2014 and IEEE Spectrum have released the same information for 2015.

Top 10 Programming Languages 2015

Top 10 Programming Languages 2015

One interesting thing is that use of C, the oldest of the top 5 languages, is increasing.

You can read the full article at The 2015 top ten programming languages including how they assessed which languages are used. They also have a App you can purchase if you want finer detail and to always be up to date.

Successful Endeavours specialise in Electronics Design and Embedded Software Development. Ray Keefe has developed market leading electronics products in Australia for nearly 30 years. This post is Copyright © 2015 Successful Endeavours Pty Ltd.

Top Programming Languages

A recent survey of the most used Software Languages, also known as the Top Programming Languages,  has revealed what most would have guessed as to the most popular Software Development Languages in use. The survey was published on IEEE Spectrum and usefully allows you to look at the statistics for 4 types of software development in any combination you want to. The categories used for the breakdown of the statistics are:

  • Web
  • Mobile
  • Enterprise
  • Embedded

Web Development Languages

The most popular Web Development Language was Java followed by Python, C# and PHP. I was surprised that Python ranked so highly. I understand the Google use it but hadn’t realised it had become so prevalent. So I learnt something new from that part. This is one of the advantages of being part of the professional body like IEEE. The world we live keeps changing and expanding and this is one way to stay up with those changes.

Mobile Software Development

For Mobile Software Development the winner was again Java with C, C++ and C# coming next. So here we are still very C oriented even on the most modern platform around. And of course Java is also very C like in its structure having been developed to address some system level issues such as memory management and garbage collection that C requires you to handle manually.

Enterprise Software Development

Enterprise Software Development sees Java again a the winner with C, C++, Python and C# coming next. Again Python is higher than I expected but the rest makes sense. Given that this area represents one of the core infrastructure requirements of modern scale-able companies it is interesting to see how narrow we still are with the Software Languages we use.

Embedded Software Development

And finally to the world we mostly deal with, Embedded Software Development. The clear winner here is C followed by C++ and Assembler. I took a snapshot of the complete rankings. Embedded C remains the primary language for software development in embedded systems.

Top Programming Languages - an IEEE published survey

Top Programming Languages

You can see the full survey results at Top Programming Languages

The overall winner was Java when you take all 4 categories into account and that isn’t hard to accept given Java was the Top Programming Language in 3 of the 4 categories. So if you are thinking about what Software Languages you should learn, it depends on where you want to work and what you want to work on. For Embedded Software Development, it is still C and C++. For everything else, Java is core with C, C++, C# and Python all playing a part.

Successful Endeavours specialise in Electronics Design and Embedded Software Development. Ray Keefe has developed market leading electronics products in Australia for nearly 30 years. This post is Copyright © 2014 Successful Endeavours Pty Ltd

Doug Engelbart

There are lot’s of people who have done enormous service to the world through their inventiveness and willingness to share with other. A good example is Dennis Richie who I gave a tribute to in 2011 and who gave us the C Programming Language, one of the most used computing languages even today.

Doug Engelbart holding an early computer mouse

Doug Engelbart holding an early computer mouse

I recently came across Doug Engelbart who passed away 4 years ago and is responsible for inventing many of the ideas behind modern computing including:

  • Father of the mouse
  • Videoconferencing
  • Hyperlinks
  • WYSIWYG word processor
  • Multi-window user interface
  • Shared documents
  • Shared database
  • Documents with images & text embedded
  • Keyword search
  • Instant Messaging
  • Synchronous Collaboration
  • Asynchronous Collaboration
  • and much more

The Mother of all Demos

The Mother of all Demos was a 90 minute presentation he put together in 1968 to demonstrate, for the first time, some of the above inventions. Below is a video with selected highlights.

This was the beginning of Interactive Computing and a critical breakthrough on the way to the Graphical User Interface and eventually the WIMP (Windows, Icons, Mouse, Pointer) Operating System concepts.

You can read more about his contributions at:

The First Mouse

And now for a look at the First Mouse. This one predated the 3 button version used in the Mother of all Demos.

Again I am very grateful for those who have gone before us and shared and collaborated so freely that we might all benefit together.

Successful Endeavours specialise in Electronics Design and Embedded Software Development, focusing on products that are intended to be Made In AustraliaRay Keefe has developed market leading electronics products in Australia for more than 30 years. This post is Copyright © 2017 Successful Endeavours Pty Ltd.

Dennis Ritchie: farewell and thank you

With the recent passing of Steve Jobs, the world has had a reason to reflect on the significant impact some people have. Someone who made everything Steve Jobs did possible also passed away recently. On the 12 October 2011, Dennis Ritchie, the father of The C Programming Language, died at his home in Berkley Heights, New Jersey.

Beginning in 1970 and with the help of Ken Thompson, Dennis Ritchie began the design and construction of a new programming language. It was based on a language developed by Ken Thompson dubbed B. So the next language was called C. And the reason they wanted to create a new language? They wanted to write the kernel for the powerful multi-user operating system UNIX. that was to replace MULTICS which Bell Labs were ending their involvement with in 1969, the same year man first stepped on the moon. And in doing so, Dennis Ritchie and Ken Thompson created the framework on which all our modern computer and communications infrastructure are based.

Dennis Ritchie

Dennis Ritchie

The C Programming Language

The importance of The C Programming Language cannot be underestimated. Not only did it make UNIX possible, but it made UNIX possible on multiple computing platforms. It was also the foundation for higher level languages such as C++ and Java as well as most of the core infrastructure of the Internet is based on programs written in C.

A few additional reasons why C is so important:

  • Microsoft used it to create their initial software offerings
  • UNIX is the origin for OSX and iOS
  • 80% of all embedded software is still written in C
  • Our business writes the Embedded Software we create in C
The C programming language, Brian Kernighan & Dennis Ritchie

The C programming language, Brian Kernighan & Dennis Ritchie

The C Programming Language, Brian Kernighan & Dennis Ritchie, was the language manual for C and was so well written that it made picking up the language easy and was one of the reasons for the rapid uptake of the language.

So much of our modern world depends on the work of Dennis Ritchie. And I along with many others are grateful. He may not have been the public figure that Steve Jobs was, but he is leaving a larger and more enduring legacy.

Here are some further accolades for Dennis Ritchie:

And finally the 1998 USA National Medal for Science and Technology received by Dennis Ritchie and Ken Thompson for their creation of the UNIX operating system and The C Programming Language.

And Ken Thompson and Dennis Ritchie explain what was behind the development of the UNIX operating system

We stand on the shoulders of giants. And Dennis Ritchie was a giant amongst giants.

Ray Keefe has been developing high quality and market leading electronics products in Australia for nearly 30 years.  For more information go to his LinkedIn profile at Ray Keefe. This post is Copyright © 2011  Successful Endeavours Pty Ltd

Software Design

This continues on from my posts on Software Architecture and Operating Systems. The basis of Software Design for Embedded Systems is ensuring that you implement the required features within the available hardware. A lot of people forget that second point. I have found there are many more opinions on what you “Should Do” than there are helpful ways of assessing what you “Can Do” and how likely it is to be successful. Way too much of the conversation is like the picture below.

Software Programming

Software – You’re Doing It Completely Wrong!

Unlike a typical Computer Science project, there are hard and fast restrictions on the system resources in a Small Embedded System. Some of the constraints to consider are:

  • RAM
  • FLASH or program storage space
  • Clock Speed for both the peripherals and the main processor
  • Power Consumption
  • IO and peripherals
  • Latency requirements

 If we have selected and Operating System then we also have constraints from that choice:

  • How to tasks or modules communicate?
  • How is data protected from simultaneous access by foreground and background tasks?
  • What is the worst case latency for a task or interrupt response?
  • Can I meet the peak execution demand with the processor, Software Architecture and Operating System?
  • What design methodology will I use?
  • How will I test?

Software Design Methodology

This is also a pretty big area. For now we will focus on the primary methods that are used to manage more complex projects.

State Machine

The first and most important is the State Machine, originally known as the Finite State Machine. It was an invention of Hewlett Packard and many were surprised that Intel beat them to the first microprocessor given that the State Machine was one of the breakthrough concepts that made that possible. At it’s core, a State Machine defines the states a system or sub-system can be in and the conditions under which it moves from one state to another. Below is a State Machine for estimating the charge left in a rechargeable battery. We design a lot of battery powered equipment so this is a common design element for us.

 

Finite State Machine

State Machine

One big advantage of a State Machine is that it can be easily designed to operate in a polled environment where very little processor time is required until a transition condition is achieved. This allows very complex systems to operate without needing a larger processor.

Test Driven Development

Test Driven Development is the next important Software Design Methodology to consider. In this case the system is analysed and the test requirements identified. The tests are written and then the code is written and debugged until it passes the tests. If requirements change, then update the tests to match and debug until the code passes. Code is refactored once is passes all tests.

The big advantage of Test Driven Development is that you think about test up front and that generally leads to simpler designs that are easier to maintain. You also always have a full test suite to ensure changes made don’t have side effects that cause other features to misbehave. The tests pick this up automatically.

The big disadvantage is that you might write tests then decide to change direction and have to recreate those. These is also interaction between the system call structure and the test suite so you need to do more detailed design up front. But particularly in mission critical applications, always having an up to date test suite is a big advantage.

Rapid Application Development

The final consideration is whether you will use a visual coding or modelling system. For Windows Software we are big fans of the Embarcadero toolset, formerly under the Borland brand. These support Rapid Application Development or RAD as it is known. The tools create forms and provide the software skeleton to go with them automatically managing class members and access functions for you. This way you can focus on the application specific code. We find their C++ toolset one of the most productive to create application with.

These systems are generally used on general purpose computing platforms and larger embedded systems rather than a Small Embedded System.

However the concept behind them support rapid prototyping and minimal code writing to get to a working demonstration. Rapid Application Development is primarily about doing this. Get to a prototype fast then find out what the problems are. You can think of this as Risk Identification. Identifying and eliminating risks early is one of our core strategies for delivering projects on time and budget and is covered in more detail in our Project Management Methodology.

Modelling

Another common approach is the Unified Modelling Language or UML. This uses an open standard for a visual model to drive the code generation. You get the model right and the tool produces the Embedded C code for you. This is also important for reusability. The models are processor independent so in theory you can use them on any processor the toolset supports. They support state based design most easily but can be hard work for highly algorithmic processes or communications processing engines.

Regardless of the Software Design Methodology selected, the coding must still be done with care. But selecting the right Software Design approach makes that a much more likely process.

Successful Endeavours specialise in Electronics Design and Embedded Software Development. Ray Keefe has developed market leading electronics products in Australia for nearly 30 years.  This post is Copyright © 2012  Successful Endeavours Pty Ltd

Electronics Manufacturers are the people we serve

A common question we are asked is what sort of Electronics Manufacturers do we Develop Products for?

So I thought I would compile 3 lists:

  • The first is a list of the Electronics and Embedded Software product types we have worked on
  • The second list is a list of the industries we have Developed Products for
  • And the third list is the Technologies we have worked with so far

I might have to regularly update this third list since knowledge and technology are constantly expanding.  Before I do the lists I’d like to present a video that specifically addresses this last point.  This is very much worth thinking about.  Enjoy.

Electronics and Embedded Software Products

Did you notice the section from 1:45 to 2:15?  We are being prepared for jobs that don’t yet exist, technologies that haven’t been invented, and problems we don’t even know we will have!

Here is the list of some of the Electronics and Embedded Software Products that do already exist and which we have helped to create:

(more…)