C/C++语言学习路线: 嵌入式开发、底层软件、操作系统方向(持续更新)

这篇具有很好参考价值的文章主要介绍了C/C++语言学习路线: 嵌入式开发、底层软件、操作系统方向(持续更新)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

初级:用好手上的锤子

1 【感性】认识 C 系编程语言开发调试过程

1.1 视频教程点到为止

1.2 炫技视频看看就行

1.3 编程游戏不玩也罢

有些游戏的主题任务就是编程,游戏和实际应用环境有一定差异(工具、操作流程),在初级阶段主要是熟悉实际场景,而且多数是通过前端语言进行游戏,对底层软件学习的帮助不大。

Coding Games: PHP、C、JavaScript http://www.codingame.com
Screeps: JavaScript http://screeps.com
Code Monkey: 类 Bash 脚本 https://www.codemonkey.com/
Vim Adventures: Vim 命令 https://vim-adventures.com/

2 【实践】输入每个字符:搭建开发调试环境熟悉语言语法

2.1 选择、安装和使用集成开发环境

首选地表最强 IDE Visual Studio:https://visualstudio.microsoft.com/zh-hans/

C/C++语言学习路线: 嵌入式开发、底层软件、操作系统方向(持续更新),从物理定律到编程语言,c语言,c++,学习,嵌入式

微软还提供了丰富而专业、清晰的文档和教程:什么是 Visual Studio?

C/C++语言学习路线: 嵌入式开发、底层软件、操作系统方向(持续更新),从物理定律到编程语言,c语言,c++,学习,嵌入式

2.2 找本教材系统学习 C 语法、跑遍所有感兴趣的例程

比如斯坦福的教材 《Essential C》:http://cslibrary.stanford.edu/101/EssentialC.pdf。这本书非常简洁,总共只有 45 页。全书分为 7 个章节:基本数据类型和操作符、流程控制关键字(if/else/while等)、复杂数据类型(结构体/数组/指针/自定义类型)、函数、文件和预处理、高阶的数组和指针操作、库
C/C++语言学习路线: 嵌入式开发、底层软件、操作系统方向(持续更新),从物理定律到编程语言,c语言,c++,学习,嵌入式
学完这本书基本就能写出任意逻辑了,找本别的教材把例程跑一跑、课后习题做一做,小小C语言,拿下!

2.3 看老三篇,思考总结

《C陷阱与缺陷》

C/C++语言学习路线: 嵌入式开发、底层软件、操作系统方向(持续更新),从物理定律到编程语言,c语言,c++,学习,嵌入式

作者以自己1985年在Bell实验室时发表的一篇论文为基础,结合自己的工作经验扩展成为这本对C程序员具有珍贵价值的经典著作。写作本书的出发点不是要批判C语言,而是要帮助C程序员绕过编程过程中的陷阱和障碍。

《C和指针》

C/C++语言学习路线: 嵌入式开发、底层软件、操作系统方向(持续更新),从物理定律到编程语言,c语言,c++,学习,嵌入式

主要看第 6 章,学习 C 语言首要任务之一就是借助指针理解计算机的内存模型,所以知道如何用一维数组指针遍历二维数组就可以说理解指针了,也学会C语言了。

第6章 指针 91
6.1 内存和地址 91
6.2 值和类型 92
6.3 指针变量的内容 93
6.4 间接访问操作符 94
6.5 未初始化和非法的指针 95
6.6 NULL指针 96
6.7 指针、间接访问和左值 97
6.8 指针、间接访问和变量 97

6.9 指针常量 98
6.10 指针的指针 98
6.11 指针表达式 99
6.12 实例 104
6.13 指针运算 107
6.13.1 算术运算 108
6.13.2 关系运算 110
6.14 总结 111
6.15 警告的总结 112
6.16 编程提示的总结 112
6.17 问题 112
6.18 编程练习 115

《C专家编程》

C/C++语言学习路线: 嵌入式开发、底层软件、操作系统方向(持续更新),从物理定律到编程语言,c语言,c++,学习,嵌入式
主要看第 1 章第 5 章,思考编译和链接技术。

还可以补充阅读 《链接器和加载器》
C/C++语言学习路线: 嵌入式开发、底层软件、操作系统方向(持续更新),从物理定律到编程语言,c语言,c++,学习,嵌入式

讲述构建程序的关键工具——链接器和加载器,内容包括链接和加载、体系结构、目标文件、存储分配、符号管理、库、重定位、加载和覆盖、共享库、动态链接和加载、动态链接的共享库

2.4 尝试 C# 和C++, 看山还是不是山

看看《C专家编程》的第 11 章,概要了解 C++ 的特征,虽然这部分介绍有些过于陈旧,毕竟现代 C++ 和早期 C++ 已经是“判若两人”了
C/C++语言学习路线: 嵌入式开发、底层软件、操作系统方向(持续更新),从物理定律到编程语言,c语言,c++,学习,嵌入式
关于现代 C++ 的特性,微软文档有一个不错的介绍:

自创建以来,C++ 即已成为世界上最常用的编程语言之一。 正确编写的 C++ 程序快速、高效。 相对于其他语言,该语言更加灵活:它可以在最高的抽象级别上运行,还可以在硅级低级别上运行。 C++ 提供高度优化的标准库。 它支持访问低级别硬件功能,从而最大限度地提高速度并最大程度地降低内存需求。 C++ 几乎可以创建任何类型的程序:游戏、设备驱动程序、HPC、云、桌面、嵌入式和移动应用等。 甚至用于其他编程语言的库和编译器也使用 C++ 编写。
https://learn.microsoft.com/zh-cn/cpp/cpp/welcome-back-to-cpp-modern-cpp?view=msvc-170

C/C++语言学习路线: 嵌入式开发、底层软件、操作系统方向(持续更新),从物理定律到编程语言,c语言,c++,学习,嵌入式

3 【实践】复制粘贴在为主:学习单片机软件的开发调试流程

3.1 找个单片机点灯

3.2 跑跑其他例程,改改功能再跑跑

3.3 看硬件组成,理解模块、接口等概念

  • 《数字电路原理/数字电子技术》
    C/C++语言学习路线: 嵌入式开发、底层软件、操作系统方向(持续更新),从物理定律到编程语言,c语言,c++,学习,嵌入式
    数电基础知识。内容涉及数字电子技术的基本概念、数制、逻辑门、布尔代数和逻辑化简、组合逻辑分析、组合逻辑的作用、计数器、移位寄存器、存储器、可编程逻辑与软件、集成电路技术等
  • 《CODE:隐匿在计算机硬件背后的语言》
    C/C++语言学习路线: 嵌入式开发、底层软件、操作系统方向(持续更新),从物理定律到编程语言,c语言,c++,学习,嵌入式
    从数字电路基础开始理解处理器的设计思想,读完差不多能成为MC的红石工程师。

中级:思考一些需求的技术实现方案

4 【理论】了解算法和数据结构、操作系统原理

4.1 找本教材模仿数据结构和算法设计

C/C++语言学习路线: 嵌入式开发、底层软件、操作系统方向(持续更新),从物理定律到编程语言,c语言,c++,学习,嵌入式
这本书里面的例程完整可用,数据结构和算法的关系介绍清晰,很适合没有数据结构设计的同学搞明白为什么需要数据结构。

4.2 找本操作系统教材走马观花读完

C/C++语言学习路线: 嵌入式开发、底层软件、操作系统方向(持续更新),从物理定律到编程语言,c语言,c++,学习,嵌入式
读这本书/读操作系统的教材,实际上是为了对操作系统形成 统揽性的理性认识。毕竟现在已经不是把裸机送到用户手中的上古时代了,平时接触的都是包装良好的操作系统,很有必要 从原理上搞清楚为什么需要操作系统

4.3 补点计算机组成原理/体系结构/微机原理知识

  • 《深入理解计算机系统》
    C/C++语言学习路线: 嵌入式开发、底层软件、操作系统方向(持续更新),从物理定律到编程语言,c语言,c++,学习,嵌入式
    作者是计算机顶级名校卡内基梅隆大学的计算机学院院长,高屋建瓴地指导读者了解计算机系统的整体轮廓和实现细节。读这本书是为了 构建体系结构的大致印象,为后续具体学习某个架构准备知识基础。

  • 《汇编语言》
    C/C++语言学习路线: 嵌入式开发、底层软件、操作系统方向(持续更新),从物理定律到编程语言,c语言,c++,学习,嵌入式
    学哲学的人教计算机,那是真的牛!读这本书主要是 消除对汇编语言的畏难情绪,为后续系统性地、进一步学习某个指令集架构的指令编码设计文档打点心理基础。

5【实践】做几个项目,打个比赛,

数据如何封包和解包

C/C++语言学习路线: 嵌入式开发、底层软件、操作系统方向(持续更新),从物理定律到编程语言,c语言,c++,学习,嵌入式

下位机:把结构体拆分成8位的整型数据,加上数据包头和包尾,然后按顺序单个单个地发出;上位机:把串口里的数据读取出来,找到包头,按顺序装填到结构体中,然后使用结构体引用数据https://blog.csdn.net/qq_33904382/article/details/112718948

习惯按照需求设计产品

中高级:体系结构信手拈来

6 玩一玩操作系统

6.1 操作系统应用软件

C/C++语言学习路线: 嵌入式开发、底层软件、操作系统方向(持续更新),从物理定律到编程语言,c语言,c++,学习,嵌入式

狭义上的嵌入式系统硬件资源较为紧张,使得嵌入式软件的设计在很大程度受制于硬件条件,嵌入式操作系统也因之组成相对简单。随着嵌入式硬件的复杂度的上升,嵌入式操作系统的内容和功能也愈发地丰富。譬如RT-Thread,它不仅仅是一个实时内核,还具备丰富的中间层组件.https://blog.csdn.net/qq_33904382/article/details/124809765

6.2 利用操作系统的源码

7 学一种指令集架构

7.1 社区网站

以 ARM 架构为例,官方开发者网站上有大量的文档,社区里有丰富的问答,无论是学习还是解决疑难问题都很方便。

开发者网站:https://developer.arm.com/
C/C++语言学习路线: 嵌入式开发、底层软件、操作系统方向(持续更新),从物理定律到编程语言,c语言,c++,学习,嵌入式
ARM 社区网站:https://community.arm.com/

7.2 ARM 架构文档特征

ARM Cortex-A 系列处理器的文档基本上分为三类:Instruction Architecture(指令架构文档)、Technical Reference Manual(技术参考手册)和Programmer’s Guide(程序员指南,或者叫编程指南)

Instruction Architecture(指令架构文档): 定义了ARM处理器的指令集架构,包括指令编码格式、操作码、寄存器、指令执行流程等。主要是提供给编译器开发人员参考,当然也是系统学习对应架构的教材。下面是 ARMV8架构的指令集架构文档封面和目录。
C/C++语言学习路线: 嵌入式开发、底层软件、操作系统方向(持续更新),从物理定律到编程语言,c语言,c++,学习,嵌入式

Technical Reference Manual(技术参考手册): ARM的Technical Reference Manual是针对特定型号或系列的ARM处理器的详细技术规格手册,包括处理器的内部结构、功能模块、寄存器描述、时序特性、性能参数等。这些手册为硬件工程师和系统设计人员提供了深入了解处理器架构和特性的参考资料。下面是 Cortex-A53 处理器的技术参考手册的封面和目录。

C/C++语言学习路线: 嵌入式开发、底层软件、操作系统方向(持续更新),从物理定律到编程语言,c语言,c++,学习,嵌入式

Programmer’s Guide(程序员指南):ARM的Programmer’s Guide是针对 软件开发人员 编写的指南,介绍如何在ARM处理器上进行软件开发和优化。这些指南包括 编程模型、编译器优化、调试技巧、性能优化 等内容,帮助开发人员充分利用ARM处理器的特性和性能。下图是 Cortex-A 系列处理器的编程指南的封面和目录。

C/C++语言学习路线: 嵌入式开发、底层软件、操作系统方向(持续更新),从物理定律到编程语言,c语言,c++,学习,嵌入式


针对ARMv8架构中的 Cortex-A53 处理器举例来说:架构文档定义处理器支持的指令集架构,包括64位指令集和32位指令集的编码格式和功能;技术参考手册详细描述Cortex-A53处理器的内部结构、寄存器布局、时钟频率等技术规格;而编程指南指导软件开发人员在Cortex-A53处理器上编写高效的程序,包括优化技巧、调试方法等。

7.3 学体系结构主要学什么

C/C++语言学习路线: 嵌入式开发、底层软件、操作系统方向(持续更新),从物理定律到编程语言,c语言,c++,学习,嵌入式

指令集体系结构(ISA)是计算机抽象模型的一部分,用于定义软件如何控制CPU。ISA 充当硬件和软件之间的接口,指定处理器能够执行的操作以及如何完成。(就是说,ISA给定了可以在目标机器上执行的指令的集合)https://blog.csdn.net/qq_33904382/article/details/126914300

C/C++语言学习路线: 嵌入式开发、底层软件、操作系统方向(持续更新),从物理定律到编程语言,c语言,c++,学习,嵌入式

ARMv8共有4个异常等级ELn(n=0,1,2,3),EL3最高,EL2最低。复位处理(Reset Handler)和异常向量表分开,支持为每个异常等级提供独立的异常向量表和栈指针寄存器(Stack Pointer,SP)。异常等级只能在复位、异常发生和退出时变更,且进入异常不能降低异常等级、退出异常不能提升异常等级。
https://blog.csdn.net/qq_33904382/article/details/128781605.

C/C++语言学习路线: 嵌入式开发、底层软件、操作系统方向(持续更新),从物理定律到编程语言,c语言,c++,学习,嵌入式

处理器的存储器的时钟频率的不一致导致了二者访存速率的差异,Cache则是用于在一定成本范围内弥补此种差异的高速缓存器件。https://blog.csdn.net/qq_33904382/article/details/128884565

C/C++语言学习路线: 嵌入式开发、底层软件、操作系统方向(持续更新),从物理定律到编程语言,c语言,c++,学习,嵌入式

所谓可信系统(trusted system),即能够用于保护密码和加密密钥等资产(assets)免受一系列的可信攻击,防止其被复制、损坏或不可用(unavailable)。https://blog.csdn.net/qq_33904382/article/details/134229598

C/C++语言学习路线: 嵌入式开发、底层软件、操作系统方向(持续更新),从物理定律到编程语言,c语言,c++,学习,嵌入式

许多ARM系统都是由电池供电的移动设备。此类系统中,能耗是关键的设计约束。程序员经常花费大量时间试图节省此类系统中的电池寿命。ARM内核中内置了许多旨在降低功耗的硬件设计方法。https://blog.csdn.net/qq_33904382/article/details/129648155

8 多核处理器软件设计

8.1 共享与通信机制

C/C++语言学习路线: 嵌入式开发、底层软件、操作系统方向(持续更新),从物理定律到编程语言,c语言,c++,学习,嵌入式

针对有多个不同架构的处理核心的SoC(System on Chip,片上系统),记录一些基本范畴和开发调试的心得。https://blog.csdn.net/qq_33904382/article/details/125826701

8.2 BOOT

C/C++语言学习路线: 嵌入式开发、底层软件、操作系统方向(持续更新),从物理定律到编程语言,c语言,c++,学习,嵌入式

这个问题,实际上就是在问:裸片是如何Boot(启动)起来的?是的,你可以从本文的标题中获得这个问题的答案——Flash中的程序是由ROM程序加载到芯片的RAM中的。此外,在执行此前存储在Flash中的那个程序前,芯片可能还执行了一段被称为Boot Code的程序,用以设定芯片的初始状态。https://blog.csdn.net/qq_33904382/article/details/127604903

8.3 资源抢占

8.4 软件适配(移植)

C/C++语言学习路线: 嵌入式开发、底层软件、操作系统方向(持续更新),从物理定律到编程语言,c语言,c++,学习,嵌入式

为陌生的SoC平台编写基础软件,适配 malloc() 函数。今时不同往日,我们平时开发/娱乐接触到的消费级MCU/MPU基本山都是包含处理核与一系列外设的SoC。如果熟悉裸片开发,一定会在厂家提供的标准库或者SDK包里找到命名类似 startup.s 的汇编文件;如果熟悉 Linux 移植,则不难联想到 arch/arm/kernel 或者 arch/arm/boot 目录下也有类似的文件。
https://blog.csdn.net/qq_33904382/article/details/131736178

高级:一个真正的爱好者

爱好者需要一本书和一个大纲。


大纲如下:
高级嵌入式软件工程师养成计划
C/C++语言学习路线: 嵌入式开发、底层软件、操作系统方向(持续更新),从物理定律到编程语言,c语言,c++,学习,嵌入式
书如下:
C/C++语言学习路线: 嵌入式开发、底层软件、操作系统方向(持续更新),从物理定律到编程语言,c语言,c++,学习,嵌入式

本书的重点是论述系统模型与系统实现的关系,以及软件和硬件与物理环境的相互作用。重点介绍了一些系统特性的精确规格、规格之间的比较方法、规格与产品设计的分析方法以及嵌入式软件特性的定量分析方法

总的说来,是一本有助于学习**软硬件协同设计(co-design)**的书。

9 定制操作系统

这部分也该先看点书,专看嵌入式操作系统/实时操作系统的。

操作系统是对硬件的抽象。嵌入式系统中的硬件不外乎处理器(CORES)、内部存储(RAM/DDR等片上存储器)、存储器(FLASH/EMMC等外部大容量存储设备)、普通外部设备和网络接口。因而可以将操作系统内核分解为:

1. 调度器(对处理器的抽象)
2. 内存管理(对内部存储的抽象)
3. 文件系统(对存储器的抽象)
4. 中断管理
5. 驱动管理(对外设的抽象)

鉴于实时操作系统对时间约束的强调,
6. 时间管理
应当作为一个单独的功能模块被讨论。

9.1 调度器

  • 嵌入式与实时操作系统
    C/C++语言学习路线: 嵌入式开发、底层软件、操作系统方向(持续更新),从物理定律到编程语言,c语言,c++,学习,嵌入式

单论调度器的话,看这本书就够了。下面是一些相关的文章。

C/C++语言学习路线: 嵌入式开发、底层软件、操作系统方向(持续更新),从物理定律到编程语言,c语言,c++,学习,嵌入式

上下文切换(Context Switching)指的是切换处理器执行的任务时发生的一系列动作。感性地说,从一个任务切换到另一个任务,过一段时间后又想切换回来,必然是需要保存一些东西的,这些东西就是某个任务的上下文,要实现多任务的操作系统,或者简单的任务调度器,就肯定绕不过上下文切换。https://blog.csdn.net/qq_33904382/article/details/126567896


C/C++语言学习路线: 嵌入式开发、底层软件、操作系统方向(持续更新),从物理定律到编程语言,c语言,c++,学习,嵌入式

从编码风格的角度去理解,实时操作系统(Real Time Operating System)的关键特征就是引入任务调度器(task shceuler),实现单核多任务调度。https://blog.csdn.net/qq_33904382/article/details/136823555

9.2 内存管理

C/C++语言学习路线: 嵌入式开发、底层软件、操作系统方向(持续更新),从物理定律到编程语言,c语言,c++,学习,嵌入式

为缺乏标准库实现的处理器IP移植内存管理模块,即为裸片部署C标准库中的 malloc() 和 free() 函数。具体做法是——从操作系统的内存管理组件中剪裁出必要的源码,适配到目标处理器的开发环境(SDK/IDE/CMAKE工程子目录)中。https://blog.csdn.net/qq_33904382/article/details/132130018

9.3 文件系统

C/C++语言学习路线: 嵌入式开发、底层软件、操作系统方向(持续更新),从物理定律到编程语言,c语言,c++,学习,嵌入式

FAT(File Allocation Table),最早在DOS v1.0 中被引入,是一种极简的文件系统,自身占用空间小,是目前最常见的文件系统之一。https://blog.csdn.net/qq_33904382/article/details/134752338


C/C++语言学习路线: 嵌入式开发、底层软件、操作系统方向(持续更新),从物理定律到编程语言,c语言,c++,学习,嵌入式

FatFs 是用于小型嵌入式系统的通用 FAT/exFAT 文件系统模块。FatFs 整个项目都按照 ANSI C (C89) 编写。与存储器 I/O 解耦良好,便于移植到 8051、PIC、AVR、ARM、Z80、RX 等小型微控制器中。https://blog.csdn.net/qq_33904382/article/details/136780814

9.4 中断管理

9.5 驱动管理

10 文档与源码并生

工程师的历史使命是构建未来社会的基础,在保证劳动回报率的不低于社会平均水平的情况下,是可以尝试降低产品的维护成本、延长产品生命周期的。产品文档是达成上述目标的关键要素之一。

对软件源代码而言,与之并生的文档主要有三种形态——源文件中的注释、软件工程统揽性说明 README 和单独的 API 参考文档

10.1 注释

注释可以帮助其他开发人员理解代码的逻辑、功能和实现细节,从而更容易维护和修改代码。注释可以提供关于代码 设计思路、算法原理、特殊处理逻辑 等方面的信息,有助于代码的可读性和可维护性。

看下面这个 FreeRTOS 的源码中队列结构体的声明,基本上每个元素都有详细注释其用途,这种源代码能清晰地把设计思想传递给用户。

/*
 * Definition of the queue used by the scheduler.
 * Items are queued by copy, not reference.  See the following link for the
 * rationale: https://www.FreeRTOS.org/Embedded-RTOS-Queues.html
 */
typedef struct QueueDefinition /* The old naming convention is used to prevent breaking kernel aware debuggers. */
{
    int8_t * pcHead;           /*< Points to the beginning of the queue storage area. */
    int8_t * pcWriteTo;        /*< Points to the free next place in the storage area. */

    union
    {
        QueuePointers_t xQueue;     /*< Data required exclusively when this structure is used as a queue. */
        SemaphoreData_t xSemaphore; /*< Data required exclusively when this structure is used as a semaphore. */
    } u;

    List_t xTasksWaitingToSend;             /*< List of tasks that are blocked waiting to post onto this queue.  Stored in priority order. */
    List_t xTasksWaitingToReceive;          /*< List of tasks that are blocked waiting to read from this queue.  Stored in priority order. */

    volatile UBaseType_t uxMessagesWaiting; /*< The number of items currently in the queue. */
    UBaseType_t uxLength;                   /*< The length of the queue defined as the number of items it will hold, not the number of bytes. */
    UBaseType_t uxItemSize;                 /*< The size of each items that the queue will hold. */

    volatile int8_t cRxLock;                /*< Stores the number of items received from the queue (removed from the queue) while the queue was locked.  Set to queueUNLOCKED when the queue is not locked. */
    volatile int8_t cTxLock;                /*< Stores the number of items transmitted to the queue (added to the queue) while the queue was locked.  Set to queueUNLOCKED when the queue is not locked. */

    #if ( ( configSUPPORT_STATIC_ALLOCATION == 1 ) && ( configSUPPORT_DYNAMIC_ALLOCATION == 1 ) )
        uint8_t ucStaticallyAllocated; /*< Set to pdTRUE if the memory used by the queue was statically allocated to ensure no attempt is made to free the memory. */
    #endif

    #if ( configUSE_QUEUE_SETS == 1 )
        struct QueueDefinition * pxQueueSetContainer;
    #endif

    #if ( configUSE_TRACE_FACILITY == 1 )
        UBaseType_t uxQueueNumber;
        uint8_t ucQueueType;
    #endif
} xQUEUE;

/* The old xQUEUE name is maintained above then typedefed to the new Queue_t
 * name below to enable the use of older kernel aware debuggers. */
typedef xQUEUE Queue_t;

FreeRTOS 源码可以从官方网站获取:https://www.freertos.org/zh-cn-cmn-s/a00104.html

除了注释,代码本身的风格也很重要,语言脚本上的例程就一定程度上代表了作者的代码风格。专门的风格规范可以参考谷歌C++代码规范,这个文档在 Github 上可以在线看:https://google.github.io/styleguide/cppguide.html

也可以参考《代码整洁之道》,主要是从文本角度讨论怎么提高代码的可读性

C/C++语言学习路线: 嵌入式开发、底层软件、操作系统方向(持续更新),从物理定律到编程语言,c语言,c++,学习,嵌入式

还有 Martin Fowler 的《重构:改善既有代码的设计》,体会如何在.屎.山中畅游,主要讨论修改已有代码的必要性和思路
C/C++语言学习路线: 嵌入式开发、底层软件、操作系统方向(持续更新),从物理定律到编程语言,c语言,c++,学习,嵌入式

10.2 README

README 是对整个项目的概述和介绍,包括项目的背景、功能特点、安装方法、使用说明、常见问题 解答等内容。README可以帮助用户快速了解项目的基本情况,提高用户体验和减少用户使用过程中的困惑,增加用户满意度。

比如这个文档仓库,提供了一个目录式的 README,浏览者看到了就能知道这个仓库的内容和组织结构:https://github.com/WaterCutter/pickArm

C/C++语言学习路线: 嵌入式开发、底层软件、操作系统方向(持续更新),从物理定律到编程语言,c语言,c++,学习,嵌入式
README 通常用 Markdown 等专用脚本编写、布局,语法可以参考官方网站:https://markdown.com.cn/basic-syntax/
C/C++语言学习路线: 嵌入式开发、底层软件、操作系统方向(持续更新),从物理定律到编程语言,c语言,c++,学习,嵌入式

10.3 API 参考

单独的 API 参考文档则是针对代码中的 接口、函数、类 等具体元素的详细说明文档,包括 每个接口的参数、返回值、使用方法、示例 等内容。API参考文档可以帮助其他开发人员在使用代码库时 快速查找 需要的接口信息,提高开发效率和减少错误发生的可能性。

FatFs的源码包里面就包含了所有 API 的 HTML格式的说明文档:http://elm-chan.org/fsw/ff/arc/ff15.zip
C/C++语言学习路线: 嵌入式开发、底层软件、操作系统方向(持续更新),从物理定律到编程语言,c语言,c++,学习,嵌入式
文档形式如下(以f_chdir这个API为例),有接口的参数、返回值、使用示例和相关 API 说明文档的链接:

C/C++语言学习路线: 嵌入式开发、底层软件、操作系统方向(持续更新),从物理定律到编程语言,c语言,c++,学习,嵌入式文章来源地址https://www.toymoban.com/news/detail-860452.html

限定技:主线之外的副本

A 脱离IDE:编辑器+交叉编译工具链+仿真器

B GUI技术:QT/轻量级GUI库

C 前端: JS/HTML/CSS

D 网络/通信:SOCKET/TCP/MQTT/CAN

E 虚拟化工具:Docker/K8S/KVM/QEMU

F 控制/机电:伺服电机/UPS电源/光电

到了这里,关于C/C++语言学习路线: 嵌入式开发、底层软件、操作系统方向(持续更新)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 嵌入式学习——C语言基础——day10

    1. 指针的基本概念 1.1 地址         用来区别不同内存字节空间的编号 1.2 指针         地址就是指针,指针就是地址,地址是一个编号,指针多了指向的概念 1.3 指针变量         用来存放指针的变量,有时将指针变量简称为指针 2. 指针相关运算符             ——   

    2024年04月27日
    浏览(45)
  • 嵌入式C语言自我修养《GNU C编译器扩展语法》学习笔记

    目录 一、C语言标准和编译器 二、指定初始化 三、宏构造“利器”:语句表达式 四、typeof与container_of宏 五、零长度数组 六、属性声明:section  七、属性声明:aligned  C语言标准的发展过程: ● KR C. ● ANSI C. ● C99. ● C11. 指定初始化结构体成员:         和数组类似,

    2024年02月08日
    浏览(50)
  • 嵌入式学习路线

    嵌入式开发学习路线份三个阶段: 第一阶段、 C语言 基础 进阶 高级 经典案例 阅读开源代码 第二阶段、基础四大件 数据结构/算法 操作系统 计算机网络 设计模式 第三阶段、嵌入式 基础 进阶 视频 高级 嵌入式应用开发 经典案例: 嵌入式低层开发(内核、驱动) 内核 驱动

    2024年02月12日
    浏览(44)
  • 嵌入式软件学习路线(入门)

    大家不要只收藏不关注啊,哪怕点个赞都行哇。😭 刚工作两年,推荐的学习路线只做一家之言,如果有那里有人觉得不合适,可以根据自身的需求寻找更合适的路线,大学的时候学习过单片机,对于单片机也算是入门级,能做一些毕业设计级别的东西,能够应付大学所需。

    2023年04月15日
    浏览(47)
  • ARM+LINUX嵌入式学习路线

    嵌入式学习是一个循序渐进的过程,如果是希望向嵌入式软件方向发展的话,目前最常见的是嵌入式Linux方向,关注这个方向,大概分3个阶段: 1、嵌入式linux上层应用,包括QT的GUI开发 2、嵌入式linux系统开发 3、嵌入式linux驱动开发 嵌入式目前主要面向的几个操作系统是,

    2024年02月02日
    浏览(64)
  • 【单片机/嵌入式】最完整学习路线

            关于这个问题我在网上寻找到 了 相关文章解释得很详细,不了解的同学可以参考一下这篇文章: 到底什么是嵌入式?什么是单片机? - 知乎         一个人学习是孤独的,如果你是一名学生,建议加入学校的电子社团或者实验室,有老师的帮助和同学的互助

    2024年02月03日
    浏览(54)
  • 详解从0开始的嵌入式学习路线,学什么、怎么学?

    嵌入式是个大筐,什么都可以往里面装,电子、机械、计算机、自动化、测控、通信、物联网……很多很多专业都和嵌入式沾边,硬件、驱动、操作系统、网络、应用、算法……很多同学越学越迷糊,越学越感觉什么也不会。 首先要记住一句话,嵌入式学习奥义: 先观其广

    2024年02月02日
    浏览(62)
  • 初级嵌入式软件工程师养成记(学习路线+学习资源+实战项目汇总)

    我的圈子: 高级工程师聚集地 我是董哥,高级嵌入式软件开发工程师,从事嵌入式Linux驱动开发和系统开发,曾就职于世界500强企业! 创作理念:专注分享高质量嵌入式文章,让大家读有所得! 世界这么大,还是遇见你… 大家好,我是董哥,一名嵌入式 Linux 开发工程师,

    2024年02月13日
    浏览(73)
  • 适合嵌入式开发的GUI(嵌入式学习)

    嵌入式开发中的GUI(图形用户界面)是指在嵌入式系统中实现图形化的用户界面,以便用户可以通过触摸屏、按钮、鼠标或其他输入设备与系统进行交互。 以下是一些常见的嵌入式GUI开发方法: 轻量级GUI库:一些轻量级的GUI库适用于嵌入式系统,例如uGFX、LittlevGL、Nanogui等。

    2024年02月09日
    浏览(68)
  • MCU嵌入式开发-硬件和开发语言选择

    主要考虑以下方面来决定是否需要RTOS支持: 需要实现高响应时的多任务处理能力 需要实现实时性能要求高的任务 需要完成多个复杂的并发任务 具备满足工控系统实时性要求的各项功能特性。通过它提供的硬件库、线程支持、中断支持等,可以完全控制微控制器的各个外设,实

    2024年02月12日
    浏览(61)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包