Smaller C: Lean Code for Small Machines

This document was uploaded by one of our users. The uploader already confirmed that they had the permission to publish it. If you are author/publisher or own the copyright of this documents, please report to us by using this DMCA report form.

Simply click on the Download Book button.

Yes, Book downloads on Ebookily are 100% Free.

Sometimes the book is free on Amazon As well, so go ahead and hit "Search on Amazon"

For makers looking to use the smallest microcontrollers or to wring the highest performance out of larger ones, the C language is still the best option. This practical book provides a solid grounding in C basics for anyone who tinkers with programming microcontrollers. You'll explore the many ways C enables developers and makers to get big results out of tiny devices. Author Marc Loy shows you how to write clean, maintainable C code from scratch. This language and its cousin, C++, are still widely used to write low-level code for device drivers or operating systems. By understanding C syntax and its quirks, you'll gain an enduring computer language literacy that will help you pick up new languages and styles more easily. • Learn C fundamentals, such as data types, flow control, and functions • Explore memory management including how programs work on small devices • Understand answers provided in online forums such as Reddit or Stack Overflow • Write efficient, custom C code that's both readable and maintainable • Analyze the performance of your code and weigh optimizations • Evaluate third-party libraries for use in your own projects • Create your own libraries to share with others

Author(s): Marc Loy
Edition: 1
Publisher: O'Reilly Media
Year: 2021

Language: English
Commentary: Vector PDF
Pages: 314
City: Sebastopol, CA
Tags: Programming; Memory Management; Arduino; C; Microcontrollers; Interrupts; Sensors; Serial Port; EEPROM; Elementary

Cover
Copyright
Table of Contents
Preface
How to Use This Book
Conventions Used in This Book
Using Code Examples
O’Reilly Online Learning
How to Contact Us
Acknowledgments
Chapter 1. The ABCs of C
Strengths and Weaknesses
Getting Started
Tools Required
Creating a C “Hello, World”
Compiling Your Code
Running Your Code
Next Steps
Chapter 2. Storing and Stating
Statements in C
Statement Separators
Statement Flow
Variables and Types
Getting User Input
Strings and Characters
Numbers
Variable Names
Variable Assignments
printf() and scanf()
printf() Formats
Tailored Output
scanf() and Parsing Inputs
Operators and Expressions
Arithmetic Operators
Order of Operations
Type Casting
Next Steps
Chapter 3. Flow of Control
Boolean Values
Comparison Operators
Logical Operators
Branching
The if Statement
The switch Statement
The Ternary Operator and Conditional Assignment
Loop Statements
The for Statement
The while Statement
The do/while Variation
Nesting
Nested Loops and Tables
Variable Scope
Exercises
Next Steps
Chapter 4. Bits and (Many) Bytes
Storing Multiple Things with Arrays
Creating and Manipulating Arrays
Review of Strings
Multidimensional Arrays
Accessing Elements in Multidimensional Arrays
Storing Bits
Binary, Octal, Hexadecimal
Octal and Hexadecimal Literals in C
Input and Output of Octal and Hex Values
Bitwise Operators
Mixing Bits and Bytes
Conversion Answers
Next Steps
Chapter 5. Functions
Familiar Functions
Function Flow
Simple Functions
Sending Information to Functions
Passing Simple Types
Passing Strings to Functions
Multiple Types
Exiting a Function
Returning Information
Using Returned Values
Ignoring Returned Values
Nested Calls and Recursion
Recursive Functions
Variable Scope
Global Variables
The main() Function
Return values and main()
Command-Line Arguments and main()
Next Steps
Chapter 6. Pointers and References
Addresses in C
The NULL Value and Pointer Errors
Arrays
Local Variables and the Stack
Global Variables and the Heap
Pointer Arithmetic
Array Pointers
Functions and Pointers
Managing Memory with Arrays
Allocating with malloc()
Deallocating with free()
C Structures
Defining Structures
Assigning and Accessing Structure Members
Pointers to Structures
Functions and Structures
Pointer Syntax Recap
Next Steps
Chapter 7. Libraries
The C Standard Library
stdio.h
stdlib.h
string.h
math.h
time.h
ctype.h
Putting It Together
Filling In Strings
Finding Our Interest
Finding New Libraries
Next Steps
Chapter 8. Real-World C With Arduino
Arduino IDE (Win, Mac, Linux)
Installing on Windows
Installing on macOS
Installing on Linux
Your First Arduino Project
Selecting Your Board
Hello, LED!
An External LED Upgrade
Arduino Libraries
Managing Libraries
Using Arduino Libraries
Arduino Sketches and C++
C++ Objects and Variables
More Practice with Objects
C++ Considerations
Object Homework
Next Steps
Chapter 9. Smaller Systems
The Arduino Environment
Special Values
Special Types
“Built-In” Functions
Trying Out the Arduino “Stuff”
Microcontroller I/O
Sensors and Analog Input
The Serial Monitor
Is It Hot in Here?
Segmented Displays
Buttons and Digital Input
Just How Hot Is It?
Memory Management on Arduino
Flash (PROGMEM)
SRAM
EEPROM
Remembering Choices
Interrupts
Interrupt Service Routines
Interrupt-Driven Programming
Exercises
Next Steps
Chapter 10. Faster Code
The Setup
Floating-Point Versus Integer Math
Floating-Point Math Alternatives
Integer Math Versus No Math
Lookup Tables
The Project So Far
The Power of Powers of 2
Loop Optimizations
Unrolling for Fun and Profit
Recursion Versus Iteration
String Versus char[]
Our Final Offer
Next Steps
Chapter 11. Custom Libraries
Creating Your Own Library
Preprocessor Directives
Preprocessor Macros
Custom Type Definitions
Our Car Project
Multifile Projects
Code (.ino) Files
Header Files
Importing Custom Libraries
Facilitating Communication
Retrofitting Our Car
Creating a Controller
Creating the Library
Updating the Car Project
Getting It Under Control
Go Driving!
Documentation and Distribution
Next Steps
Chapter 12. Next Next Steps
Intermediate and Advanced Topics
IoT and Arduino
Arduino Source Code
Other Microcontrollers
Industry C/C++
Back to the Future
Appendix A. Hardware and Software
Getting the Code
Getting the Hardware: Adafruit
VS Code
Arduino IDE
Fritzing
GNU Compiler Collection
Appendix B. printf() Format Specifier Details
Specifier Syntax
Specifier Types
Specifier Flags
Width and Precision
Common Formats
Index
About the Author
Colophon