Where to start with embedded programming

bugas

New member
I don't know if this is the right channel to ask this, but I want to ask / help directions to
where to start with embedded programming with Teensy.

I'm an application developer for years, and what to change phase on personal projects.
I'm now reviewing C in depth along how computer works down below.

And I'm lost what to do next after this,
 
There are usually 2 paths to learning, which I'd call "academic" and "experimental". They're pretty much opposites of each other.

Academic learning usually has a well defined path where you first study prerequisites and work your way up to more advanced material. It's almost always a long and boring path. Typically a path to success involves a rigid academic schedule with hard deadlines. One really positive feature of academic learning is how orderly the process is. Everything moves along a well established path and gradually builds upon a solid foundation. But it can sometimes all end up being pretty abstract and not feel very rooted in gaining practical experience.

Experimental learning is usually the opposite, an uncertain & sometimes chaotic path where you tend to just dive into trying the moderate to advanced things first. The upside is you definitely get a lot of practical experience, but often it's built on top of a lot of incomplete or missing understanding of the finer details. But unlike academic learning where a formal process and deadlines provide the "motivation", often the key to successful experimentation is perusing a goal that's personally interesting or something you have a strong need.

So in other words, to recommend a path forward (assuming you're going the experimental route) we need to know what sort of things you're personally interested to build or accomplish. There isn't one clear path, but rather an infinite number of ways. We need to hear more about your personal interest, the sort of projects you feel excited to create, to be able to recommend how to start.
 
Thanks for the reply Paul. I'm always fascinated in how the IoT device works. One time in my day job, I was to tasked to decode a payload from the device which was a CBOR format. From there, it took my interest in how the embedded works.

My plan is probably to take my time to know the basics, I will be allocating 2 to 3 hours a day for reviewing / knowing the basics in the hardware and electronics. I've already did programming with teensy 2 with the keyboard samples and it felt great, seeing something is working physically you've programmed.

Personal interest would be projects in the IoT field, I was hoping to build a simple gateway of sensors to send values via SMS and not via internet. There are still a lot of places which telecoms don't support NBIot and sms are much cheaper and reliable.
 
I'd go straight to learning C++, even if many embedded programs are in C. It will encourage better code.

IMO, it's important to have academic, experimental and a commitment to keep improving.
 
If you are going to develop anything connected (even if only to an SMS service) you should do some research into security. A lot of people put things online, and it doesn't occur to them that every IP in the IPv4 space is constantly portscanned. They don't have any kind of security, and their device gets abused or infected. With SMS there are similar problems. For example, SS7 (the cellular signaling system used in the US) is old and ridden with security and social engineering flaws. If someone has your number, they can do a lot, up to and including exploiting your device.

Whatever security features are on the baseband for your SMS transceiver, you better make sure they're set up right. You can't portscan phone numbers, but you can wardial them with SMS exploits, and your device will have a phone number even if it can't be called. If your device can be commanded over SMS, it will be vulnerable unless you figure out some way to cryptographically sign the message (sender has private key, receiver has public key, sender signs command, receiver verifies signature.) Basebands have lots of extraneous features, like "load this URL", which present attack surfaces, and should be turned off. Even if you don't have a browser on the device (and you won't) a malformed message may cause a buffer overrun or something of the sort, so you want to shut off absolutely every feature that you don't need.
 
I've gone the chaotic experimental way but also slightly academic. The best course I've found is Neso Academy youtube video course on C, you will not find a better course on any topic anywhere. This is so well done, highly recommended. Too bad it isn't C++ but C.

The other one I can recommend is https://www.learncpp.com/
This one is in text form and is a very good course from the basics to advanced C++

I haven't gotten through the whole thing yet but I hope I will soon.
 
Ditto Jonr's comment about C++. You can implement C code using a C++ compiler, but not the opposite. And I'm a big fan of Paul's comment about experimental learning. I think it's best to learn by doing.

The Teensy family is perfect for close-to-the-hardware development, especially the 4.0 edition. If you can, I'd find an inexpensive oscilloscope; it makes debugging so much easier when you can actually see what's happening.

I'd come up with a near-hardware project, and just do it! For me its neopixels, servos, XBEE I/o, inertial and gravitational sensors, etc. But there's TONS of interesting things that can be done.

Come on in - the water's fine!
 
Back
Top