Welcome to the Modern Embedded Systems Programming course! In this course, you'll learn how to program embedded microcontrollers the modern way, from the basics all the way to the contemporary modern embedded programming practice. The unique approach of this course is to step down to the machine level frequently and show you exactly what happens inside your embedded microcontroller. This deeper understanding will allow you to apply the concepts more efficiently and with greater confidence. My name is Miro Samek, and I'm an embedded software engineer with over 30 years of experience. I enjoy teaching, and this video course, my books, articles, and conference presentations helped many developers improve their skills, pass tough job interviews, and get hired for embedded programming positions. This embedded programming course has been going on since 2013, so people ask: "Is it still relevant?" The answer is YES, perhaps even more so now than in the beginning, for two main reasons: First, this course focuses on the essential and fundamental concepts in embedded programming that never go out of style. And second, this course is based on the prevalent ARM Cortex-M architecture, which has exploded in popularity. Knowledge of ARM Cortex-M is the most sought-after skill that employers are looking for. As far as the prerequisites for this course are concerned, I start with the basics, but this part is short and focused on the embedded aspects of programming in C. Therefore, you might need to supplement this course with additional study of the C programming language. It would also be good to know how a CPU works. To get the most out of this course you can and should follow along and run the discussed projects on your PC. To do this, you will need some hardware (an embedded board) and software (an embedded development toolset). The main embedded board used throughout the course is TivaC LaunchPad from Texas Instruments, based on the ARM Cortex-M4F CPU. The board is inexpensive, self-contained, and includes a built-in hardware debugger that enables single-step debugging and inspecting the internal CPU state, which is essential for this course. The board is still in production and is available from numerous distributors. The course downloads now also contain project versions for the newer STM32 NUCLEO-C031C6, based on the ARM Cortex-M0+ CPU. The board is also inexpensive, self-contained, and includes an even more versatile built-in hardware debugger. Other inexpensive ARM Cortex-M boards, like the first two, might be added in the future. Also, the first few course lessons use a simulator; therefore, you don't need the hardware immediately. However, later lessons, where you interact with the MCU peripherals, require an embedded board. After you receive your embedded board and plug it into a USB port for the first time, you need to check the proper installation of the USB drivers. Open the Device Manager by right-clicking the Windows icon and choosing the Device Manager option. For the TivaC board, the correct driver should be the Stetllaris In-Circuit Debug Interface. If you see anything else, you need to re-install the driver. For that, you first need to download the correct USB driver, either as described in the packaging of your embedded board or from the companion web page to this video course at state-machine.com/video-course. After downloading, unzip the drivers somewhere on your disk. Next, right-click on the device description and choose "Update Driver." Select "Browse my computer for drivers" and point to the directory where you unzipped the drivers. If, for any reason, the USB installation dosn't work, you can always click on "Uninstall device" and try "Update driver" again. The described procedure needs to be done only once for a given board, but you need to repeat it when you get a different board. For example, for the NUCLEO board, you need to use the "ST-Link" drivers. As far as the software is concerned, you need an embedded development toolset. The course started with the IAR Embedded Workbench for ARM, a professional toolset with a good compiler and stable debugger. For many years, this toolset used to be available under a free, size-limited KickStart license, but recently, this has changed, and the only free option left seems to be a 2-week evaluation license. For that reason, the project downloads for this course have been updated and now contain versions for multiple toolsets, including KEIL-MDK, which I introduce later. But going back to IAR, if you wish to use the same toolset as the video lessons 1 through 18, you can download the IAR evaluation. The installation is straightforward, although it takes a while. I only suggest installing the toolset to a directory name without spaces and special characters. For example, I installed my IAR toolset in the C:\tools\IAR directory. After launching the IAR Embedded Workbench for the first time, you might need to request the license. You'll need to register with IAR and receive the license key via email. Once you get it, you need to type it into the license dialog box. KEIL MDK (Microcontroller Development Kit) is another professional development toolset used in this video course. In contrast to IAR Embedded Workbench, KEIL MDK has been offered under increasingly permissive licensing, including free Keil MDK v6 Community Edition. This course has used KEIL MDK starting from lesson 21, but project versions for KEIL have been added for all lessons, including lessons 1 through 21, which were initially presented with IAR Embedded Workbench or TI Code Composer Studio. For this course, you need to download KEIL Micro-Vision. On the next page, click on "Download KEIL MDK." Next, you need to log into the ARM Developer portal. If you don't have an account there, you must register first. After you log in, you are finally allowed to download the latest MDK edition. The MDK installation is straightforward, and the default locations for the MDK toolset and the so-called "MDK Packs" are acceptable. The finishing step launches the KEIL "Pack Installer," but you can close it for now because the purpose of the Packs will become clearer when you open one of the KEIL uVision projects. I will explain how to get the projects for this course in a minute, but to finish the toolset installation, let's open a KEIL project, say for lesson 1, by double-clicking on it in the File Explorer. When such a project opens for the first time, you get a dialog box informing you that a required "Device Family Pack" is missing. It means that the project uses a device, TM4C, in this case, for which the toolset still needs information. When you click "Install," the "Pack Installer" automatically downloads and installs the specific device. The next issue you need to address is license installation. Select the menu File-License Management, and in the dialog box click on "Get License via Internet". This will send you to the arm-keil website, where you need to fill out a lengthy registration form, but eventually, you should get your MDK Community license via email. The final issue you need to fix concerns the Stellaris ICDI debugger on the TivaC LauchPad board. In the Project view, right-click on the Debug target menu and choose "Options for Target Debug." Next, click on the Debug Tab and expand the drop-down list. Stellaris ICDI is missing because KEIL MDK no longer supports it by default. However, you can add the Stellaris ICDI support by downloading the MDK extension from the companion web page to this video course. After downloading, just run the provided installer. When you open any KEIL project for TivaC now, the Stellaris ICDI debugger is available. In the last minute of this video, I'd like to describe how to download the projects for the lessons of this course. So, the projects for all lessons are available for download from state-machine.com/video-course, which is the primary resource for this course. Additionally, an increasingly important resource is the GitHub repository, which also hosts all projects. Now, let me quickly explain the new structure of the projects because it has changed from what is shown in the videos. The projects are organized hierarchically to accommodate multiple embedded boards toolsets and generally offer extensibility for the future. For example, projects for lesson 4 are located in the directory lesson-dash-zero-four. Inside, you can find sub-directories named after the embedded boards and embedded toolsets. Projects for TivaC are abbreviated to tm4c123, while STM32 NUCLEO board is abbreviated to stm32c031. This is followed by the name of the embedded toolset, such as iar or keil. Inside the sub-directories, you can find the actual project for the corresponding toolset, the source code, and all other code the project needs. This makes the project self-contained and free from external dependencies. Special cases are simulator projects, which don't require a physical board, although they are prepared for a concrete target, typically TivaC. This concludes this introductory lesson to the "Modern Embedded Systems Programming" course. I hope you find it informative and interesting, learn something useful, sharpen your skills, and think about embedded programming differently. If you do, please support this channel by subscribing, clicking the like button for the videos you like, posting comments, and spreading the word about this course.