These are classic reference books that you can use to understand c in depth.
'The C Programming language by Kernighan & Ritchie' is THE C reference
This is not the book for you if you're looking for a wordy introduction to C
It is a technical guide to the C language that is exact.
I have included it here as I think it is the best reference text book for C programming.
Note : It is not aimed at microcontroller programming but its information is just as applicable to microcontrollers as to programming PCs because the C language is standardized. The only information that is not relevant is where text is displayed on a screen using puts and printf (the microcontroller may not have a display!) - but you can attach a serial port if you need to.
There is no gentle introduction but this lets you zoom in on the information you need and it is not a huge Tome of information - it comes in at ~260 pages and is less ½ inch thick.
This book is not an introduction to C and it is not a beginners book do not buy it in the hope that it will teach you programming - it does show you good style and exactly how complex code works - but it is not for starting out.
You only need this book if you are really really interested in C programming and want to understanding the absolute fundamentals of writing C code but it is not light reading and it is not a teaching book.
It will however show you how to write a standard library functions in the correct way and maybe you will end up writing a few of the standard library functions yourself. This book gives you the actual code used to create library functions and shows you good techniques for making real code.
It tells you what the libraries are e.g. stdlib.h and exactly what standard
functions it should contain - microcontroller libraries may not contain the
same due to resource problems or processing power.
It is heavy going and has complex code in it - and after looking at a little of it you will understand why some functions are omitted from microcontroller libraries e.g. printf!
Jump from c programming to
Best Microcontroller Projects Home Page.
INA219: How to use the INA210 for maximum accuracy in current and power measurements
The Arduino shiftIn() function can simply can accept data from paralle to serial converter chips. Find out how it works and how fast it operates.
How to easily make a logic level converter e.g. between 3V and 5V.
The Arduino shiftOut() function can simply control many different serial interfaced chips. Find out how it works and how fast it operates.
A tutorial on using the ADS1115 precision 16 bit ADC for low power use.
Learn how to use the TP4056 properly. There's a right, and a wrong way, to use it to safely charge Lithium Ion batteries.