Hi guys so I have a long way to go before I start embedded programming,but it's a topic I m very interested in,I hear c is used more so than c++ for embedded systems but c++ can be used,anyway I don't have any equipment such as sodering irons,microchips,transistors,
would equipment do I need? Can I just use a linux or windows machine to program an embedded system?
I can't find much good tutorials online,youtube,udemy, even google,
what type of things will I have to know I really want to learn how everything words under the hood so to speak
is there anything anybody recommends me doing or any books I can get to start learning embedded systems from scratch with either c or c++ as the language
note this is going to be somewhere down to the future but to have a general idea of it would be nice at this point
embedded systems span quite the range these days. There are still tiny little things like arduinos that measure capacity in kilobytes all the way up to cell-phone sized boards that are full computers and full computers that are little bigger than a coffee mug.
Some of them only support C, but a great many support c++ (or a flavor of it, not always full language) and some support other languages as well like java. Many of these systems have special library functions and nonstandard commands. You just roll with it... they explain what to do there.
you don't need an electronics workbench to get started. Many of these systems have emulation on PC via a virtual machine or special program and you can develop and test right on the PC without buying the first bit of hardware!
you can use any PC for a lot of these systems.
the tutorials are often quite good from the manufacturer of the product in question. Others, not so good :P It varies. Most of the time, its pretty simple... you write C or c++ code that sends a voltage here or a signal there or computes something or dumps a packet to a {Ethernet / usb / serial} com link. The big embedded systems are not much different from programming a desktop (pc 104 for example)
you can get started from scratch but you WILL have to do some legwork to get started, to get a plug in or libraries for your chosen hardware, the emulator, and so on. Some of this may cost money. You can try for a student discount if it applies.
I have been out of this business for a few years and can't give any up to date specifics. A lot of people start with arduinos. There are several chips/boards you can get for a few bucks, but hardware can fail .. emulation is the way to go until you get started.
that's a relief to hear,that I won't need a workbench it's one thing that I can't afford or have the space to get right now,
yeah I hear arduinos is pretty good but I also hear that you can't program in c++ or c with this?
do you know any emulation programs or virtual machines I can use to get started? also will the virtual machine let me program a "virtual" embedded device as I don't have any embedded device,but if arduinos supports c or c++ I will get it =)
1. Choose a processor family that you want to target, ARM, intel, motorola, etc
2. Find a cheap board, like arduino or raspberry pi that has a suitable processor.
3. get other folks software running on the board and visible in the debugger.
4. ready to start your own programming.
You can read as many books as you like, (like i did 30 years ago) but at the end of the day none of them will result in you being able to develop embedded systems. In parallel to your reading you need to be "doing", that is where the real learning comes from.
one of the most straightforward environments i've used is eclipse/CDT, with GCC, it can target many systems and cpu's and has a very large user base for support and is easy to setup and configure.
getting other peoples projects running on the board will give you the knowledge and experience required to get your own code running (how to configure/build/download/debug) it will also give you a taster of writing/running code for a remote system, and improve your understanding of what you are embarking on.
one other thing to note is the target environment, that is "the software your application will run on" some embedded systems are powerful enough to run full operating systems such as windows/linux variants and some have such limited resources they cant run any operating systems.
you would need to choose from full OS (as above) or RTOS or bare metal. My preference is bare metal, but RTOS are very popular. Id recommend getting some RTOS's working on your board as a learning step.
You need to decide your target system first though (step1 above) after that you will find much more appropriate online support and tutorials, googleing a combination of your target hardware / software will help. eg; search "freertos on arduino"
In my experience embedded systems dev jobs are VERY oriented to the CPU at hand, other embedded experience hardly counts, you need to know the target cpu idiosyncrasies. Hence step.1 being pick a cpu.