4 ms·
It really depends how you use it. If you are approaching from the standpoint of "I am writing code on a microcontroller", which means no exceptions, no static i
by dmitrygr 9y ago
It really depends how you use it. If you are approaching from the standpoint of "I am writing code on a microcontroller", which means no exceptions, no static initializers, probably no templates, definitely no rtti, then it will be all okay. If you approach it from the standpoint of "I'm just programming, how hard could it be? Let's just use std::", you're going to have a very bad time and very quickly.
C++, when used in that way, tends to do a lot of things behind the scenes. This is perfectly okay in a place where you have an operating system and a linker that have your back. On an embedded system none of this is guaranteed.
- monocasa 9y agoStatic initializers and templates are great in a deeply embedded context, IMO.
- dmitrygr 9y agoFor you yes, since you know how they are implemented at linker level. But get a few junior devs on your team, and you'll be wondering why hundreds of thousands of cycles run before main is called, or why some driver code is being entered before it is initialized, since someone decided to make a static singleton object for some driver and called some driver method in the constructor which will run before main(), not realizing how this stuff really works underneath. So, C++ can be a wonderful tool in proper hands, but it is much easier to misuse than C in an embedded context.
- monocasa 9y agoI lead a team of six, including some junior devs. How initialization occurred (static or otherwise) was just something we made an explicit check off item in code review.
- dmitrygr 9y agoAwesome. Glad it worked out for you. I hope it stays so after you leave the team or no longer have time for each code review.
- adrianN 9y agoIf you let junior programmers fuck up your codebase that much, that's not the junior's fault. You should do code reviews.
- makapuf 9y agoConstexpr init can also be great in that case To initialize rom with complex objects.
- bleke 9y agonote, static initializers works in embedded you need to execute functions between __init_array_start and __init_array_end before using any static object in gcc somewhere in program
- dmitrygr 9y agoI'm well aware of that. But giant array of static Constructors makes it hard to reason about when any piece of Hardware is accessed since a lot of stuff happens before Main (). Especially for people who don't play with the insides of linkers for fun on weekends.
- bleke 9y agoSorry that sounded like i'm scorching you i didn't mean it. Yes agree with when using HW initializing code in constructors I ended with two types of 'constructors/inits': 1 - for object initialization 2 - just for hardware and calling manually :/.