Why Function Pointers are Awesome
ฝัง
- เผยแพร่เมื่อ 28 ก.ค. 2024
- In this 2022 Embedded Online Conference Microtalk, Jacob Beningo discusses the use cases for function pointers in embedded software.
This video looks at the C programming language function pointers, and how they can be leveraged for use cases such as:
- task scheduling
- command processing
- state machines
- interrupt vector tables
Developers often get confused that function pointers shouldn't be used in embedded systems because of MISRA C: 1998 Rule 104. As you'll see in this video, there are safe methods for using function pointers.
(The Embedded Online Conference will take place April 25 - 29th, 2022. If you are interested in participating, you can register with the code BENINGO to get at least a $100 discount). - วิทยาศาสตร์และเทคโนโลยี
Very interesting talk, thank you!
Thank you Jacob, your presence in here and on different blog article is helping so much to learn and understand.
Happy to hear that!
Really good video! Thanks for taking the time to make it.
The use cases gives me inspiration to enhance my C code, so a big thank you from me.
Great to see you again!!!
Thanks Peter! I'm planning to post a lot more this year so stay tuned!
Another problem is that calculating the maximum stack usage becomes non-trivial. For each function pointer invocation it has to be clear which functions can potentially be called.
Absolutely! Thanks for the comment and observation!
Great content!
Interestingly, I violated the rule that said it should be constant and my code was crashing because it was pointing to the 0x0. As I was debugging the issue, I found out another bug index out range. So one bug exposed another nasty bug. Note that, before implementing function pointer other bug was still there but I couldn't find out because my program haven't crashed or going into hard fault. :D
Great video thank u
Glad you enjoyed it
I just bought your book today.❤
Excellent! I hope you enjoy it!
@@beningoembedded I ordered it but I have not received it. I hope I will indeed enjoy it as much as I enjoyed your videos. The thing is, my expertise level is not that advanced. I am afraid I won't understand all or most of your book's contents. But I like your video contents and style and background.
@@beningoembedded Do you mind if I ask you a simple question? I have read your article, where you mentioned that we are supposed to "write rock-solid embedded software". But I can only design and solder an STM32 board with HCD1080, using someone's Keil project code that I downloaded from the Internet. So, how do I write my own entire project/code? How do I improve myself from using others' code to "write my own rock-solid embedded software"? The architecture seems so difficult to master to write from scratch or modify here and there....
Could you please explain how the ATTiny85 bootloader works? It's a very basic MCU.
Thank you.
Regarding "Make sure function pointers are NOT stored in RAM"... when I register a callback function, isn't that callback function pointer stored in RAM somewhere (e.g., UART0_ISR->function), even if it's done in pre-compiled or auto-generated code?
Do they affect the real time performance?
Function pointers will not have a negative impact on the real-time performance. They can improve readability, scalability, and reusability though. They can also decrease maintenance too.
If you were to look at what a function call really is, it's just a pointer to the functions code anyway!
Function pointers are evil? I have always used them and I never had any problem with them, unless you have a bad memory or stack overflow or damaged memory section then this will never happen, assuming there is an active WDT monitoring those special cases. I have always recommended to use an auxiliary MCU in case the first had damaged memory then the second takes over - in case of medical or security applications.