In this video, we will introduce data structures for embedded systems. All embedded systems need to store data. That data can take on many different forms. Data can represent sensor information, control information for things like motors, or status information for active processes. Typically, when you think of data, you should think of variables. Variables are individual storage containers that you have one specific type. However, you will often want to store lots of variables, and often associate one variable with another. This is where we will begin to use derived and enumerated text, built in to C-programming, as a mechanism to structure our program data more efficiently, and create our own data types. Combining numerous special data types together to form unique and application dependent data structures can simplify our project design. Structures are a mechanism that allow a software engineer to organize data within a program. They fundamentally allow you to associate certain types, together, and create a special container for the set of variables. Structures can be combined with many different features from our programming languages to allow us to perform special operations. A structure will allow you to create your own special type made up of many different standard C-types, derived types, and enumerated types. Enumerated data types are referred to as enums in C-programming. Enums are a special type that usually represent a signed or unsigned integer, about the size of a word. These will allow us to create constant like types and allow the compiler to do type checking and produce more maintainable and readable code. C-programming provides numerous derived data types with very useful features for storing data. These include pointers, arrays, structures, and unions. You have experience with some of these types already. We will expand upon the structure keyword in C and utilize unions to make our variables more dynamic in type. We will then expand on features of the structure, including a special mechanism called bit fields that will allow you to create smaller data-sized data members. Taking all these features of structures and associated types, we can begin to define specialized structures used to manage data, called the data structure. Nearly every program uses some type of data structure, whether directly or indirectly. These are used for a variety of applications. One could be for messaging from one program to another program, or from one embedded system to another embedded system. You could also use a data structure to help store and maintain gathered information from a sensor, in potentially a contiguous or non-contiguous form. And, additionally, data structures can allow you to control the program flow and operation of your process. There are a subset of data structures we will discuss that are used very regularly in embedded systems. These are the LIFO buffer, the circular buffer, and the linked list. When you define data structures like these, you usually also need to create associated functions to operate and interact with for your data structure. Data structures are a very complex topic, and in no way will we cover all aspects of them in a single module. Typically, data structures are covered in a normal semester-long university course, with numerous structure types being covered. In this short module, we will provide you with a basic background of some of the useful features and applications of creating your own data types. Using structures that you will typically see in embedded systems programming.