@racheal83az It's a fact. I've literally seen it happen. Too many NDA stuff to talk about on a public forum, if you PM me we could have a nice chat, people DO get injured and killed from stuff like that and things like the Zune bug (remember that?) Then again that would lead to a talk about safety critical systems and I really don't have the time to explain all that, cause you'll just oppose what I'm saying instead of realizing I'm talking from experience.
Your
"hardware/firmware/embedded" tutor is mistaken if he say's that, how many years experience does he have? does he work in industry? or is he just a tutor? I would love to speak with him to see how deep his knowledge goes and what project's he's worked on and such. I am currently in industry working on REAL WORLD PROJECTS.
"Almost nobody uses Assembly these days"
This is laughable. The "startup.s" file on literally every ARM Cortex-M core is written in assembly and you will have to look at it some point or another. I'm attaching a screenshot from a project I'm working on right now. If you ever work with GCC (which you will) you WILL need to modify that .s file at some point and your linker script as well, how else will you allocate memory for the stack and heap!?
Has your tutor ever heard of something called DEBUGGING!? I'll attach a screenshot here as well to show you what a 2021 debug view looks like. You will have a "disassembly" view where you can see the assembly as you step though your program.
Here look at this:
disassembly.png (Size: 220.74 KB / Downloads: 13)
Whether you use Keil, IAR, MPLAB X, or Eclipse or roll your own setup with Atom or vim (for you old boys) you WILL need to look at your disaeembly view.
You will also have a "memory view" or "browser" where you will look at the contents of your memory registers as you step through your program. You also have your register view, where you will view your registers extremely important to track your PC values and R0-R12 can tell you everything you need to know.
If you're working on rolling an inhouse RTOS on ARM cortex how will you handle context switching if not by using the PENDSV register and doing the switch in assembly? Even if you use a custom RTOS the port for your chip will have assembly "port" specific file will also have inline assembly (especially if you're using GCC) to handle interrupt enables and disables etc. Almost any hard real time system will include inline assembly.
If you don't know assembly how will you be able to see what this does:
__attribute__ ((naked, optimize("-fno-stack-protector")))
void xRegister_Handler(void) {
__asm volatile (
)
When you see it? What if you're writing real time code and dont want to push anything to the stack? Even if you don't write assembly you need to be able to read it. Otherwise you're wasting your time. Tell your "hardware/firmware/embeed" "tutor" I said that.
"none of this is applicable to industry"
WHAT!? THE WORD REGISTER COMES UP MORE OFTEN THAN ANYTHING ELSE. Want to use SPI? go to the datasheet look at the associated registers! I2C look at the registers for that! My code isn't working start the J-link see what VALUE is in that REGISTER.
"you don't necessarily need to know what 10110011 means or how to turn it into 11001110"
What!? So when you are DEBUGGING your program how will know what is happening in your MCU registers!?
If I recall that course also had a section on shift registers. SPI is used so much and its implemented using shift registers.
I could go on all day about how every single module in that course is applicable to industry.
"People are leaving for the "cooler" software jobs and there aren't nearly enough hardware people for the jobs that are available"
It's more like most people CAN'T do those kind of jobs because they lack the deep knowledge and experience. Embedded software requires you to have a DEEP COMPUTER ARCHITECTURE knowledge and you need to teach yourself electronics as well. You also must be good with OS concepts (you'll work with an RTOS or Linux.. even if its Yocto at some point) and you must MASTER data structures and algorithms. According to the job you are in that can mean the difference between spending $2 on a chip or $10.
You can't leetcode your way there, and you NEED TO KNOW what's happening intuitively. There is no 6 month bootcamp, no 1 month course. Same thing with analog design. I don't know where you got your info from. I know many "ex-google" and "ex-amazon" software engineers that form hardware startups, worked on a few of those products. Look at kickstarter, the most funded tech projects tend to be some new "gizmo". Look at Drones and 3D printers, they're all embedded systems. Look at the pebble smartwatch, and the Coolest Cooler. In fact here is a list of the top funded kickstarted projects in HISTORY:
Top 20 Most Funded Kickstarter Projects of All Time (2019) - StartupBros
The VAST majority are embedded systems projects.
People WISH to work on these things. They crave to do something like this. THESE ARE THE COOLER JOBS.
Code monkeys writing web apps are a dime a dozen, my email is filled with spam emails with people from India offering their services for those kinda jobs. Finding people with the skills to help you take a project to market rarer than gold.
"They'll go into website development, app programming, or something similar where you really don't need to know on a daily basis how the inner workings of a computer operate"
Have you ever worked in a mobile app? Ever heard of the Native Development Kit? What happens when you need better data from the sensors from your phone for your app?
If you end up in AI or ML or Game Development or anything where you need to have your code perform well, you will need to use C or C++ or Rust (up and coming) to get better performance which requires you to understand the hardware.
If you end up working in security, then to be a good hacker or to secure against crackers (who WILL have low level hardware knowledge) to set yourself apart you will need to know C and assembly. The nasty viruses and trojans are written in assembly. Also what if you have to reverse engineer something? You have to use IDA Pro or similar for disassembly.
No wonder the industry is in turmoil. When things break, you WILL need that knowledge. These are the people your future boss is hoping to hire.
They're called ROCKSTARS, GURUS, NINJAS and SNOBs. They are the ones "regular" programmers say "don't exist" or "is just a myth".
These guys LOVE computing. It is thier LIFE. When you're sleeping they're up breaking things and fixing things and digging deeper, it's a yearning to always get deeper.
You are complaining about a silly course. I once wrote my own processor architecture with Clash (Haskell) generated VHDL together with hand written VHDL, programmed it in binary, wrote my own assembler and LISP interpreter and ported a GCC compiler then wrote an RTOS to run on top of it. and that was for FUN.
That's the level programmers must strive to reach at. If I need to design an IoT device I can design the system, spec all the parts, design the PCB, design the enclosure prototype in SolidWorks, write all the firmware, roll my own HAL and RTOS if I need to that syncs with AWS via MQTT, write the web app front end, backend and deploy it and the native app for your iphone or android to get that data. If you've miles out I can build a LoRa gateway to sync back up with your mobile provider and get the data to your phone. Heck if you want to host in house I can open Cisco IOS and get working. Your coworkers computer broke down? Won't turn on? Give me, I'll open it an repair it, oh look its a cap on the SMPS giving trouble.
I am confident I can get any programming job and excel in any role, I'm good at what I do and I know my industry inside out. I am but a tiny bug who's met literal computer gods working in semiconductor and compiler design and there are guys that write algortihms in ways I cant even describe, you look at their solution in awe. I've had to ask or help when something from their side breaks (silicon bug, compiler issue).
"you can't learn without being in the industry first."
Don't tell me what's used and not used in industry. I've been around the block.
As am matter of fact as I'm typing this I really am not in the mood to explain all this stuff, I charge by the hour for consulting and if you want more info I think you'll have to pay me, I really was trying to help the OP I'm too busy to have a discussion with people with no real world experience telling me about a field I've worked in for years and spend all my free time on.
Sorry OP but you're on your own.
Check out my youtube channel or read one of my books or something. I also maintain a public github repo with simple projects for beginners. I have a lot of stuff fro beginners, since they need the most help. When you work in industry a bit, then we can talk.
It may sound "arrogant" to you, but the knowledge gap is too wide to continue this discussion further, you don't want to learn, you want to tell me I'm wrong. I really cant believe someone with clearly no experience telling me who does this for a living about what the industry uses or not. You're the arrogant one.
I'm sensing a lot of Dunning-Kruger effect here from your "tutor" @racheal83az
For the benefit of anyone reading this post, I forgot to attach these are well this is from the FreeRTOS ARM_CM0 port, provided by ST. These are all in assembly. FreeRTOS is one of the most used RTOSs currently, along with WindRiver and UC/OS II and III.
Learn ARM assembly. You'll be glad you did.
freerots.png (Size: 179.59 KB / Downloads: 7)
freerots2.png (Size: 187.97 KB / Downloads: 4)