Code Craft-Embedding C++: Hidden Activities?

What is an embedded system? The general definition is a computer system dedicated to a specific purpose, i.e. not a general purpose system usable for different tasks. That is a very broad definition. I was just skimming the C++ coding guidelines for the Joint Strike Fighter. That’s a pretty big embedded system and the first DOD project that allowed C++! When you use an ATM to get money you’re using an embedded system. Those are basically hardened PCs. Then at the small end we have all the Internet of Things (IoT) gadgets.

The previous articles about embedding C++ discussing classes, virtual functions, and macros garnered many comments. I find both the positive and critical comments rewarding. More importantly, the critical comments point me toward issues or questions that need to be addressed, which is what got me onto the topic for this article. So thank you, all.

Let’s take a look at when embedded systems should or should not use C++, taking a hard look at the claim that there may be hidden activities ripe to upset your carefully planned code execution.

Continue reading “Code Craft-Embedding C++: Hidden Activities?”

Code Craft – Embedding C++: Timing Virtual Functions

Embedded C developers shy away from C++ out of concern for performance. The class construct is one of their main concerns. My previous article Code Craft – Embedding C++: Classes explored whether classes cause code bloat. There was little or no bloat and what is there assures that initialization occurs.

Using classes, and C++ overall, is advantageous because it produces cleaner looking code, in part, by organizing data and the operations on the data into one programming structure. This simple use of classes isn’t the raison d’etre for them but to provide inheritance, or more specifically polymorphism, (from Greek polys, “many, much” and morphē, “form, shape”).

Skeptics feel inheritance simply must introduce nasty increases in timing. Here I once more bravely assert that no such increases occur, and will offer side-by-side comparison as proof.

Continue reading “Code Craft – Embedding C++: Timing Virtual Functions”

Code Craft – Embedding C++: Classes

For many embedded C developers the most predominate and questionable feature of C++ is the class. The concern is that classes are complex and therefore will introduce code bloat and increase runtimes in systems where timing is critical. Those concerns implicate C++ as not suitable for embedded systems. I’ll bravely assert up front that these concerns are unfounded.

When [Bjarne Stroustrup] created C++ he built it upon C to continue that language’s heritage of performance. Additionally, he added features in a way that if you don’t use them, you don’t pay for them.

Continue reading “Code Craft – Embedding C++: Classes”

No Pascal, Not A SNOBOL’s Chance. Go Forth!

My article on Fortran, This is Not Your Father’s FORTRAN, brought back a lot of memories about the language. It also reminded me of other languages from my time at college and shortly thereafter, say pre-1978.

At that time there were the three original languages – FORTRAN, LISP, and COBOL. These originals are still used although none make the lists of popular languages. I never did any COBOL but did some work with Pascal, Forth, and SNOBOL which are from that era. Of those, SNOBOL quickly faded but the others are still around. SNOBOL was a text processing language that basically lost out to AWK, PERL, and regular expressions. Given how cryptic regular expressions are it’s amazing another language from that time, APL – A Programming Language, didn’t survive. APL was referred to as a ‘write only language’ because it was often easier to simply rewrite a piece of code than to debug it.

Another language deserving mention is Algol, if only because Pascal is a descendant, along with many modern languages. Algol was always more popular outside the US, probably because everyone there stuck with FORTRAN.

Back then certain books held iconic status, much like [McCracken’s] black FORTRAN IV. In the early 70s, mentioning [Nicolas Wirth] or the yellow book brought to mind Pascal. Similarly, [Griswold, (R. E.)] was SNOBOL and a green book. For some reason, [Griswold’s] two co-authors never were mentioned, unlike the later duo of [Kernighan] & [Ritchie] with their white “The C Programming Language”. Seeing that book years later on an Italian coworker’s bookshelf translated to Italian gave my mind a minor boggling. Join me for a walk down the memory lane that got our programming world to where it is today.

Continue reading “No Pascal, Not A SNOBOL’s Chance. Go Forth!”

Who Said FORTRAN Is Dead?

NASA has an urgent need for a FORTRAN developer to support the Voyager spacecraft. Popular Mechanics interviewed Voyager program manager [Suzanne Dodd] who is looking to fill [Larry Zottarell’s] shoes when he retires.

We had a lot of people comment on my recent Hackaday article, “This Is Not Your Father’s FORTRAN”, who studied the language at some point. Maybe one of you would like to apply? You need to do so soon! NASA is hoping to give the new hire six to twelve months with [Zottarell] for on-the-job training. You’ll need to brush up on your vintage assembly language too.

light data system hwThe two Voyagers were some of the first NASA spacecraft to use computers. The resources are limited in the three 40 year-old computers found on each probe. They handle the spacecraft’s science and flight software. The software is a little more recent having been updated only 25 years ago in 1990.

A big problem is a lot of the engineering design materials are no longer in existence. People’s memories of the events and reasons for decisions made that long ago are bit hazy. But NASA does have an emergency list of those former engineers when questions arise. That means this could be more than just a job where you program for ancient hardware, you could find a lot of reasons to interact with the people who pioneered this field!

This will be an awesome hack. Anyone up to doing remote computing at a distance of 12 billion miles?

A video on the history of the two voyagers is found after the break.

Continue reading “Who Said FORTRAN Is Dead?”

Code Craft: Using Eclipse For Arduino Development

As we work on projects we’re frequently upgrading our tools. That basic soldering iron gives way to one with temperature control. The introductory 3D printer yields to one faster and more capable. One reason for this is we don’t really understand the restrictions of the introductory level tools. Sometimes we realize this directly when the tool fails in a task. Other times we see another hacker using a better tool and realize we must have one!.

The same occurs with software tools. The Arduino IDE is a nice tool for starting out. It is easy to use which is great if you have never previously written software. The libraries and the way it ties nicely into the hardware ecosystem is a boon.

When you start on larger projects, say you upgrade to a Due or Teensy for more code or memory space, the Arduino IDE can hamper your productivity. Moving beyond these limitations requires a new, better tool.

Where do we find a better tool? To begin, recognize, as [Elliot] points out that There is no Arduino “Language”, we’re actually programming in C or C++. We chose which language through the extension on the file, ‘c’ for C and ‘cpp’ for C++. An Arduino support library may be written in C or C++ depending on the developer’s preference. It’s all mix ‘n match.

Potentially any environment that supports C/C++ can replace the Arduino IDE. Unfortunately, this is not easy to do, at least for inexperienced developers, because it means setting up the language tool chain and tools for uploading to the board. A developer with that much experience might eschew an integrated development environment altogether, going directly to using makefiles as [Joshua] describes in Arduino Development; There’s a Makefile for That.

The reality is the Arduino IDE is not much more than a text editor with the ability to invoke the tools needed to compile and download the code to the Arduino. A professional IDE not only handles those details but provides additional capabilities that make the software development process easier.

Continue reading “Code Craft: Using Eclipse For Arduino Development”

A Wooden Based, CD Stepper Scribbler

[Rohit Gupta] is back with a plotter made from scrap CD drives and an old RC servo. [Rohit] is working on hacks to create CNC machines and sharing his activities with the world. His CNC design calls for salvaged stepper motors so he first built a device for testing them. You’ve got to admire his use of the language. He named his plotter project ‘Sketchy’ and his motor tester is called ‘Easy Peasy’.

sketchyAfter finding some CD drives at the scrap pile he tore them down to test with Easy Peasy. The raw materials for the frame came from a wooden crate for an AC unit but he didn’t just start cutting it up. Nope, first he created plans with CAD; now that’s a hack you have to admire.

With the steppers tested working, and the base build under way he moved onto the control system. Originally the hardware was demonstrated using an MSP430. This worked, but a flaw in the hardware design was found. With the pen attached directly to the servo horn, it would draw a long line when being rotated away from the drawing position.

The fix is a replacement servo setup which lifts the pen up instead of rotating it. But that showed that the drawing surface wasn’t smooth. The pen kept missing places or getting caught and destroyed. The use of a spring loaded pen solved this issue. Success!

One further change migrated away from the MSP430 in favor of an Arduino Pro Mini in order to use a GRBL library instead of the g-code generator which was performing questionably. Since he likes Hackaday so much one of his first attempts with the final version of Sketchy was our logo, shown in the video after the break.

When we last saw [Rohit] he had created a fancy PCB ruler to measure components.

Continue reading “A Wooden Based, CD Stepper Scribbler”