Promise
Promise概述123456789101112// 延迟2s输出1,完了之后延迟1s输出2,完了之后之后延迟1s输出3setTimeout(() => { console.log('1')}, 3000)setTimeout(() => { console.log('2')}, 1000)setTimeout(() => { console.log('3')}, 1000) 我们发现这几个setTimeout函数不是串行执行的,而是并行进行的。 同步代码:串行执行,前面的代码先执行,后面的代码后执行。 异步代码:并行执行,同时开始执行,后面的代码不会等待前面的代码执行完毕再执行。 正确写法:嵌套递归的写法 123456789setTimeout(() => { console.log('1') setTimeout(() => { ...
数组
数组概述JavaScript 数组是一种用于存储多个值的变量类型,并且这些值可以是任何数据类型(数字、字符串、对象等)。数组可以使用多种方式进行创建和操作。 主要方法创建数组 使用数组字面量: 1let arr = [1, 2, 3, "Hello", {name: "Alice"}]; 使用 Array 构造函数: 1let arr = new Array(1, 2, 3, "Hello", {name: "Alice"}); 创建一个具有特定长度的数组(初始值为 undefined): 1let arr = new Array(5); // 创建一个长度为5的数组 访问数组元素 通过索引访问(索引从0开始):12let arr = [10, 20, 30];console.log(arr[0]); // 输出: 10 修改数组元素 通过索引修改:123let arr = [10, 20, 30];arr[1] =...
对象
对象概述在JavaScript中,对象(Object)是一种复合值,它允许你将多个值(原始值或其他对象)组织成一个结构化的实体。对象是通过键值对(key-value pairs)来存储数据的,其中键(key)是一个字符串(或Symbol),而值(value)可以是任何数据类型,包括原始值(如数字、字符串)、其他对象或函数。 对象基本操作创建对象在JavaScript中,有几种创建对象的方法: 对象字面量: 1234567let person = { name: "Alice", age: 30, greet: function() { console.log("Hello, my name is " + this.name); }}; 构造函数: 123456789function Person(name, age) { this.name = name; this.age = age; this.greet = function() { ...
GCC
GCC概述GCC(GNU Compiler Collection)是由 GNU 开发的编程语言编译器。 GCC最初代表GNU C Compiler,当时只支持C语言。 后来又扩展能够支持更多编程语言,包括 C++、Fortran 和 Java 等。 因此,GCC也被重新定义为GNU Compiler Collection,成为历史上最优秀的编译器, 其执行效率与一般的编译器相比平均效率要高 20%~30%。 GCC编译工具链GCC编译工具链(toolchain),是指以GCC编译器为核心的一整套工具。它主要包含以下三部分内容: gcc-core:即GCC编译器,用于完成预处理和编译过程,把C代码转换成汇编代码。 Binutils :除GCC编译器外的一系列小工具包括了链接器ld,汇编器as、目标文件格式查看器readelf等。 glibc:包含了主要的C语言标准函数库,C语言中常常使用的打印函数printf、malloc函数就在glibc 库中。 在很多场合下会直接用GCC编译器来指代整套GCC编译工具链。 Binutils工具集Binutils(bin...
Ninja
Ninja概述Ninja是一种专注于速度和效率的小型构建系统,最初由Google开发,旨在解决传统构建工具(如Make)在大型项目中的性能瓶颈问题。以下是其核心特点及技术背景的详细介绍: 技术特点与优势 极速构建 增量构建:仅重新编译受影响的文件,通过哈希值而非时间戳判断文件变化,减少不必要的编译步骤。 并行执行:默认根据CPU核心数自动并行化任务,支持手动指定线程数(如-j 8),充分利用多核性能。 简洁与高效 构建规则清晰,仅包含输入、输出和命令,无复杂条件判断或函数,降低维护成本。 与CMake深度集成,可自动生成构建文件,适用于C++、Java等多种语言项目。 跨平台支持 支持Linux、macOS和Windows系统,安装便捷(如Linux通过apt-get install...
构建系统
构建系统概述一个 ESP-IDF 项目可以看作是多个不同组件的集合,例如一个显示当前湿度的网页服务器会包含以下组件: ESP-IDF 基础库,包括 libc、ROM bindings 等 Wi-Fi 驱动 TCP/IP 协议栈 FreeRTOS 操作系统 网页服务器 湿度传感器的驱动 负责将上述组件整合到一起的主程序 ESP-IDF 可以显式地指定和配置每个组件。在构建项目的时候,构建系统会前往 ESP-IDF 目录、项目目录和用户自定义组件目录(可选)中查找所有组件,允许用户通过文本菜单系统配置 ESP-IDF 项目中用到的每个组件。在所有组件配置结束后,构建系统开始编译整个项目。 构建系统使用idf.pyidf.py 命令行工具提供了一个前端,可以帮助你轻松管理项目的构建过程,它管理了以下工具: CMake,配置待构建的项目 Ninja,用于构建项目 esptool.py,烧录目标硬件设备 可通过 idf.py 配置构建系统,具体可参考相关文档。 直接使用 CMake为了方便,idf.py 已经封装了 CMake 命令,但是你愿意,也可以直接调用...
CMake
CMake概述CMake 是一个开源的跨平台构建工具,用于自动化管理软件编译过程。它通过简单的配置文件(CMakeLists.txt)生成标准的构建文件(如 Makefile、Visual Studio 项目等),从而简化跨平台项目的构建流程。以下是 CMake 的核心特性和使用场景: 核心功能: 跨平台支持:可在 Windows、Linux、macOS 等系统上生成对应平台的构建文件(如 Makefile、Ninja、Xcode 项目等)。 模块化配置:通过 CMakeLists.txt 定义项目结构、依赖关系和编译规则。 依赖管理:支持查找系统或第三方库(如 OpenSSL、Boost),并自动集成到项目中。 灵活扩展:提供脚本语言(CMake Language)支持条件判断、循环、函数等高级逻辑。 测试与打包:集成 CTest 进行单元测试,CPack 生成安装包(如...
链接脚本
链接脚本概述链接脚本(Linker Script)是用于指导链接器(Linker)如何将程序的不同部分(如代码、数据、库等)组织到最终可执行文件或库文件中的文件。链接器在编译过程的最后阶段运行,负责将各个目标文件(.o 文件)和库文件链接在一起,生成最终的可执行文件。链接脚本提供了对最终生成文件布局的精细控制。 基本结构链接脚本通常包含以下几个部分: OUTPUT_FORMAT指定输出文件的格式,如 ELF、COFF 等。 ENTRY指定程序的入口点,通常是程序的起始函数,如 main 或 _start。 SECTIONS定义输出文件的内存布局,包括各个段的名称、属性和内容。SECTIONS 部分是链接脚本的核心,它定义了程序的内存布局。以下是一些基本的语法和要素: 段名在链接脚本(Linker Script)的 SECTIONS 部分中,段名(section...
Makefile
Makefile概述Makefile是用于管理项目构建过程的工具,它定义了一系列的规则来指定哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至进行更复杂的功能操作。 目标Target:需要生成的文件,例如可执行文件或中间目标文件(如.o文件)。 依赖Dependencies:生成目标所依赖的文件或其他目标。这些依赖项在执行目标命令之前必须存在。 命令Commands:构建目标时需要执行的命令,这些命令必须以Tab键开头。 Makefile通过规则和指令来描述整个项目的构建过程,这些规则和指令告诉make工具如何编译和链接源文件以生成最终的可执行文件。 语法规则格式Makefile里面是由一系列的规则组成的,这些规则格式如下: 1234目标...: 依赖文件集合... 命令 1 命令 2 ..... 比如: 12main.exe: main.o input.o calcu.o gcc -o main.exe main.o input.o...
Shell脚本
Shell脚本概述Shell脚本类似windows的批处理文件,shell脚本就是将连续执行的命令写成一个文件。 shell脚本是一个纯文本文件,命令从上而下开始执行。shell脚本拓展名为.sh。 基本用法 创建脚本文件:使用文本编辑器创建一个新的文本文件,并编写Shell脚本代码。 shell脚本的第一行一定要为: 1#!/bin/bash 它告诉系统这个脚本应该使用哪个解释器来执行,表示使用bash解释器执行。 赋予执行权限:为了使脚本文件能够被执行,需要为其赋予执行权限。可以使用chmod命令来修改文件权限, 1user@DESKTOP-KFNQORU:~$ chmod +x script.sh。 运行脚本:通过Shell解释器来运行脚本文件。 1user@DESKTOP-KFNQORU:~$ ./script.sh 基本语法例子123456#!/bin/bashecho "hello world"user@DESKTOP-KFNQORU:~$ ./test.sh hello...










