从Hello World到复杂系统:modern-embedded-programming-course项目循序渐进学习路线

【免费下载链接】modern-embedded-programming-course Companion repository to the "Modern Embedded Systems Programming" video course. 【免费下载链接】modern-embedded-programming-course 项目地址: https://gitcode.com/gh_mirrors/mo/modern-embedded-programming-course

modern-embedded-programming-course是一个现代嵌入式系统编程视频课程的配套仓库,旨在帮助学习者从基础开始,循序渐进地掌握嵌入式系统编程的核心技能,最终能够构建复杂的嵌入式系统。

一、项目概述:开启嵌入式编程之旅

modern-embedded-programming-course项目为"Modern Embedded Systems Programming"视频课程提供了丰富的实践资源。该课程由拥有30多年经验的嵌入式软件专家Miro Samek设计和授课,专注于教授嵌入式微控制器的现代编程方法,从基础知识一直延伸到当代嵌入式编程实践。

项目的独特之处在于经常深入到机器层面,向学习者展示嵌入式微控制器内部的具体工作情况。这种深入的理解使学习者能够更高效、更自信地应用所学概念。无论你是嵌入式领域的新手,还是希望提升技能的开发者,这个免费课程都能为你提供实用、动手实践、结构良好且深入的嵌入式编程核心概念讲解。

二、学习基础:必备知识与工具准备

2.1 知识储备

课程虽然从基础开始,但这部分内容简短且侧重于C编程的嵌入式方面。因此,学习者可能需要通过其他途径补充C编程语言的一般知识。同时,了解CPU的工作原理也会对学习有很大帮助。

2.2 硬件准备

整个课程主要使用的嵌入式开发板是基于德州仪器ARM Cortex-M4F微控制器的TivaC LaunchPad开发板(又名EK-TM4C123GXL)。该开发板价格实惠,仍可从多个电子分销商处购买。它是一个自给自足的系统,并提供内置的硬件调试器/编程器(Stellaris ICDI),支持单步调试和检查内部状态。

TivaC LaunchPad开发板

此外,课程资源中还包含基于ARM Cortex-M0+ MCU的STM32 NUCLEO-C031C6的项目版本。该开发板同样价格低廉、自给自足,并包含一个功能更强大的内置硬件调试器(ST-Link),支持单步调试和检查内部状态。

STM32 NUCLEO-C031C6开发板

2.3 软件准备

为了构建和运行课程中介绍的代码,你需要以下嵌入式工具集之一:

IAR EWARM

课程最初使用的是IAR Embedded Workbench for ARM (EWARM),用于第1-19课。IAR EWARM是一个专业的工具集,具有良好的编译器和稳定的调试器。

KEIL MDK

KEIL MDK(微控制器开发套件)是本视频课程中使用的另一个专业开发工具集。与IAR EWARM相比,KEIL MDK的许可条款更加宽松,包括免费的Keil MDK v6 Community Edition。目前,本课程的所有课程都提供KEIL MDK项目,包括最初为IAR EWARM或TI CCS提供的第1-21课。

TI CCS

应广大学习者的需求,课程的第19和20课演示了德州仪器的Code Composer Studio (CCS) IDE。这里唯一有价值的方面是开源GNU-ARM编译器和链接器的使用。

三、核心概念:嵌入式编程的基石

本课程专注于嵌入式编程中的基本和核心概念,这些概念永不过时。所有预设的概念都进行了深入的讲解,包括:

  • 二进制表示(补码)、十六进制表示法
  • 控制流、状态寄存器、分支指令
  • 变量、数组和指针
  • 与外部世界的接口(GPIO)
  • C语言中的位运算
  • 函数、调用栈、递归、ARM过程调用标准
  • 标准整数(stdint.h)和混合整数类型
  • C语言中的结构体和CMSIS
  • 启动代码、向量表
  • 嵌入式软件构建过程(链接过程)
  • 中断和竞争条件
  • "超级循环"架构
  • 实时操作系统(RTOS)
  • 面向对象编程(包括C语言中的OOP)
  • 事件驱动编程
  • 活动对象
  • 状态机,包括现代分层状态机
  • 自动代码生成
  • 软件跟踪
  • 断言和契约式设计

同时,课程聚焦于流行的ARM Cortex-M架构,该架构在过去十年中无疑在嵌入式MCU市场占据主导地位。熟悉ARM Cortex-M是雇主最看重的技能之一。

ARM Cortex-M产品线

四、项目结构:有序的学习路径

该存储库提供了可在特定嵌入式工具集中打开并在家庭PC上运行的项目下载。项目的组织方式如下所示:

modern-embedded-programming-course/
+---lesson-01/               // 课程编号
|   +---simulator-iar/       // 使用IAR EWARM的模拟器
|   |        workspace.eww   // IAR工作区
|   |
|   \---simulator-keil/      // 使用KEIL MDK的模拟器
|        \---RTE/            // KEIL MDK的运行时环境
|            lesson.uvprojx  // uVision项目
|
+---lesson-.../
|
+---lesson-04/
|   +---stm32c031-keil/      // 使用KEIL-MDK的STM32C031开发板
|   |   \---RTE/             // KEIL MDK的运行时环境
|   +---tm4c123-iar/         // 使用IAR EWARM的TM4C123开发板
|   |        workspace.eww   // IAR工作区
|   |
|   \---tm4c123-keil/        // 使用KEIL MDK的TM4C123开发板
|        \---RTE/            // KEIL MDK的运行时环境
|            lesson.uvprojx  // uVision项目
|
+---lesson-...
|
+---lesson-19
|   \---tm4c123-ccs          // 使用CCS的TM4C123开发板
|        +---ek-tm4c123gxl/  // 开发板特定代码
|        \---targetConfigs/  // CCS项目目录
|            .ccsproject     // CCS项目文件
|            .csproject      // Eclispe项目文件
|            .project        // Eclipse项目文件

五、实践进阶:从简单到复杂的项目案例

5.1 入门实践

早期的课程如lesson-01到lesson-03等,使用模拟器进行教学,因此学习者无需立即准备嵌入式开发板。这些课程帮助学习者熟悉嵌入式编程的基本概念和开发环境。

5.2 硬件交互

从lesson-04开始,课程涉及与MCU外设(如GPIO等)的交互,此时就需要嵌入式开发板了。例如,在lesson-09中,引入了delay.c和delay.h文件,用于实现延时功能,这是嵌入式系统中常用的基础功能。

5.3 中级应用

随着课程的深入,项目逐渐复杂。在lesson-12中,引入了CMSIS(Cortex Microcontroller Software Interface Standard),这是ARM公司为Cortex-M系列微控制器提供的一套标准软件接口,有助于提高软件的可移植性和复用性。

5.4 高级主题

在后续课程中,如lesson-23及以后,引入了miros.c和miros.h等文件,开始涉及实时操作系统(RTOS)的概念。lesson-27则进一步引入了freertos、qpc和ucos2等实时操作系统,让学习者了解不同的嵌入式操作系统及其应用。

5.5 测试与调试

在lesson-49中,展示了嵌入式测试的相关内容,如ET embedded test。通过命令行界面可以看到测试的执行过程和结果,包括测试通过、失败和跳过的情况,这有助于学习者掌握嵌入式系统的测试方法。

嵌入式测试执行界面

5.6 复杂系统设计

在lesson-54等高级课程中,涉及到了软件跟踪等高级调试技术。通过跟踪工具可以直观地看到系统中各个任务的执行情况和时间分布,有助于分析和优化复杂系统的性能。

软件跟踪界面

六、学习建议:高效掌握嵌入式编程

  1. 循序渐进:按照课程的顺序进行学习,从基础的概念和工具使用开始,逐步深入到复杂的系统设计。
  2. 动手实践:每个课程都有相应的项目,务必亲自动手操作,运行代码并观察结果,这是掌握嵌入式编程的关键。
  3. 深入理解:不要仅仅停留在代码层面,要理解代码背后的原理,如硬件工作原理、编译器优化等。
  4. 参与讨论:如果想讨论本课程或相关主题,请在YouTube上每个相关视频课程的评论部分发布问题或评论。
  5. 利用资源:课程有许多资源可通过配套网页获取,包括硬件信息、故障排除指南、数据手册等。

七、总结:踏上嵌入式编程的精彩旅程

modern-embedded-programming-course项目为嵌入式编程学习者提供了一条从Hello World到复杂系统的清晰学习路径。通过系统的课程安排、丰富的实践项目和深入的概念讲解,学习者可以逐步掌握嵌入式编程的核心技能,为未来的嵌入式系统开发打下坚实的基础。无论你是希望进入嵌入式领域的新手,还是想提升自己技能的专业人士,这个项目都能为你提供宝贵的学习资源和实践机会。现在就开始你的嵌入式编程之旅吧!

【免费下载链接】modern-embedded-programming-course Companion repository to the "Modern Embedded Systems Programming" video course. 【免费下载链接】modern-embedded-programming-course 项目地址: https://gitcode.com/gh_mirrors/mo/modern-embedded-programming-course

Logo

openvela 操作系统专为 AIoT 领域量身定制,以轻量化、标准兼容、安全性和高度可扩展性为核心特点。openvela 以其卓越的技术优势,已成为众多物联网设备和 AI 硬件的技术首选,涵盖了智能手表、运动手环、智能音箱、耳机、智能家居设备以及机器人等多个领域。

更多推荐