- 博客(39)
- 收藏
- 关注
原创 STM32单片机:什么是ROM,RAM,EEPROM,FLASH?
SRAM是静态RAM,CPU的L1、L2缓存说的就是SRAM,它的信息存储靠的是门电路,这些不需要电容,所以速度上更快,但是由于它存储一位信息需要的晶体管比较多,所以不能大容量集成,而DRAM一个晶体管就能存储一位信息,所以可以大容量集成。DRAM是动态RAM,就是我们电脑上的内存条,它是靠电容存储信息的,所以需要动态刷新,以此来给电容不停的充电,所以在速度上DRAM就不如SRAM。说到存储器的速度,其实最快的是CPU中的寄存器,寄存器其实也属于存储器,它的速度几乎和CPU是一样的。
2025-03-30 16:16:45
592
原创 C++:时间戳(Timestamp)
在C++中,可以使用标准库提供的功能来获取当前时间戳。以下是一些常见的方法来获取Unix时间戳和ISO 8601格式的时间戳。
2024-09-17 20:41:38
1011
原创 详解状态机
状态机(State Machine)是一种用于建模系统行为的数学模型。它由一组状态(States)、一组事件(Events)和一组状态转移(Transitions)组成。状态机在处理复杂的逻辑和状态管理时非常有用,尤其是在嵌入式系统、游戏开发和协议处理等领域。 以下是一个简单的状态机示例,使用 C++ 实现一个有限状态机(Finite State Machine, FSM),模拟一个简单的门的状态(开、关、锁定)。代码解释 状态和事件的定义:状态机类 :主函数 : 这
2024-09-17 20:25:30
236
原创 详解线程池
线程池是一种用于管理和复用线程的设计模式,广泛应用于并发编程中。它通过预先创建一定数量的线程,避免了频繁创建和销毁线程的开销,从而提高了系统的性能和响应速度。
2024-09-17 19:45:23
461
原创 详解IPC(进程间通信)
管道:适用于简单的父子进程通信。消息队列:适用于需要消息排序和优先级的场景。共享内存:适用于需要高效大数据量传输的场景。信号:适用于简单的事件通知。套接字:适用于网络通信和不同机器之间的通信。选择合适的IPC机制可以提高程序的效率和可靠性。
2024-09-17 17:57:49
455
原创 进程和线程
进程是一个正在执行的程序的实例。它包含了程序的代码数据、以及程序运行时所需的资源(如内存、文件句柄等)。线程是进程中的一个执行单元。一个进程可以包含多个线程,这些线程共享进程的资源(如内存、文件句柄等)。进程:独立的执行单元,拥有自己的资源,创建和切换开销大,通信复杂。线程:进程内的执行单元,共享进程资源,创建和切换开销小,通信简单。理解进程和线程的区别和特点,有助于在编写并发和并行程序时做出更好的设计选择。
2024-09-17 17:43:01
388
原创 C++:typedef 和 using
基本用法typedef用于为现有类型定义新的名称。在C++11及更高版本中,using关键字提供了一种更为简洁的方式来定义类型别名。复杂类型typedef在处理指针、函数指针和结构体等复杂类型时非常有用。模板别名using在处理模板别名时比typedef更为直观和简洁。typedef和using关键字在C++中是非常有用的工具,能够提高代码的可读性和可维护性,特别是在处理复杂类型时。using关键字在C++11及更高版本中提供了一种更为简洁和直观的方式来定义类型别名。
2024-09-07 17:11:58
379
原创 C++:static修饰符
静态全局函数:通过在函数定义前加上static关键字,可以将函数的作用域限制在定义它的文件内。这有助于实现模块化和数据封装,防止命名冲突。静态局部变量:在函数内部定义,生命周期贯穿整个程序运行期间。静态全局变量:在文件范围内可见,不能被其他文件访问。静态成员变量:属于类,在所有对象之间共享。静态成员函数:属于类,只能访问静态成员。静态全局函数:将函数的作用域限制在定义它的文件内,其他文件访问不到。static关键字在C++中提供了灵活的存储持续性和可见性控制,有助于实现数据封装和模块化。理解。
2024-09-07 14:39:19
534
原创 C++:宏
宏通过#define指令定义,通常在源文件或头文件中。定义阶段:宏通过#define指令定义。预处理阶段:预处理器在编译器实际编译代码之前进行宏替换。取消定义阶段:宏可以通过#undef指令取消定义。编译阶段:预处理完成后,编译器对预处理后的代码进行编译,宏本身不再存在。
2024-09-07 10:09:25
488
原创 为什么要分配动态内存?
动态内存分配提供了灵活的内存管理、支持大数据结构、精确的生命周期控制和对复杂数据结构的支持。这些优点使得动态内存分配在许多应用场景中成为不可或缺的工具。灵活的内存管理:根据实际需求分配内存,避免浪费。支持大数据结构:处理比栈或静态存储区更大的数据结构。生命周期控制:精确控制内存的分配和释放,提高内存使用效率。支持复杂数据结构:灵活创建和管理复杂数据结构,适应不同应用需求。通过合理使用动态内存分配,可以显著提高程序的性能和灵活性。
2024-09-01 16:35:12
497
原创 详谈计算机内存——存储区域
不同的内存区域在计算机系统中扮演着不同的角色,各自有其特定的用途和特点。了解这些内存区域的特性,可以帮助你更有效地编写和优化程序。堆:动态内存分配,适合大对象和长生命周期数据。栈:局部变量和函数调用信息,适合小且短生命周期数据。静态存储区:全局变量和静态变量,数据在整个程序运行期间存在。常量存储区:只读数据和常量,数据不可修改。程序代码区:存储程序的可执行代码,通常是只读的。寄存器:CPU内部的高速存储器,用于临时数据和指令。通过合理使用这些内存区域,可以提高程序的性能和可靠性。
2024-09-01 16:23:53
696
原创 C++:std::thread 和 pthread
在C++中,线程的实现主要有两种方式:使用C++11标准库中的std::thread和POSIX线程库(pthread)。这两种方式各有优缺点,适用于不同的场景。以下是对这两种方式的详细比较和示例代码。
2024-09-01 11:55:35
748
原创 C++:std::this_thread::sleep_for 和 sleep
std::this_thread::sleep_for是C++11标准库中的一个函数,用于使当前线程暂停执行一段时间。
2024-09-01 11:46:24
1703
原创 MCU烧写 vs SOC推包
MCU烧写和SoC推包是嵌入式系统开发中的两个关键过程。MCU烧写主要涉及将固件写入微控制器的闪存,而SoC推包则涉及将操作系统和应用程序推送到系统级芯片中。通过正确的工具和步骤,可以确保这两个过程顺利进行,并最终实现嵌入式系统的功能。
2024-09-01 11:29:41
899
原创 MCU:刷机与烧写
烧写” 一词通常用于描述将程序写入到非易失性存储器(如闪存、EEPROM)中的过程。烧写更常用于描述初次将程序写入新MCU或存储器的过程,而刷机则更常用于描述更新固件的过程。在嵌入式系统开发中,“刷机” 和 “烧写” 是两个常见的术语,通常用于描述将固件(Firmware)写入微控制器(MCU)的过程。无论是刷机还是烧写,其核心目标都是将固件写入MCU的存储器中,以使设备能够运行新的程序。“刷机” 通常指的是将新的固件写入到设备的存储器中,以替换现有的固件。:开源的调试和刷机工具,支持多种MCU。
2024-09-01 11:13:15
1000
原创 详解extern “C“
extern "C"在C++中用于指示编译器按照C语言的链接规范来处理被声明的代码。这在需要与C语言代码进行互操作时非常有用。通过使用extern "C",你可以确保C++代码和C代码之间的正确链接。希望这些示例能帮助你更好地理解和使用extern "C"。
2024-08-17 12:04:10
502
原创 C/C++:整型、有符号整型、无符号型整型
选择哪种类型取决于具体的应用需求。如果需要跨平台的代码,且对存储大小和范围有严格要求,uint8_t和int8_t是更好的选择。
2024-08-17 10:32:25
765
原创 Java初学:详解import
import语句在Java中用于引入其他包中的类或整个包,以便在当前类中使用这些类或包中的成员。通过合理使用import语句,可以提高代码的可读性和可维护性,避免在代码中使用全限定名。静态导入允许导入类的静态成员,但应避免滥用。现代IDE提供了自动导入功能,可以帮助开发者快速添加所需的import语句。
2024-08-11 15:30:32
841
原创 Java初学:输入方式
Scanner类:最常用,适用于读取各种类型的数据。类:适用于读取大块文本数据。Console类:适用于需要隐藏输入内容的场景。类:适用于读取二进制数据。通过这些方法,可以灵活地从控制台读取用户输入,满足不同的应用场景。
2024-08-11 15:24:19
400
原创 Java初学:输出方式
输出文本,不换行。:输出文本,自动换行。:格式化输出,控制输出格式。:与功能相同。System.err:输出错误信息。通过这些方法,可以灵活地将信息输出到控制台,方便调试和查看程序运行结果。
2024-08-11 15:12:53
412
原创 Java初学:详解类(class)
一个类的定义通常包括类名、成员变量和方法。类名通常以大写字母开头,遵循驼峰命名法。// 成员变量// 构造函数// 方法return age;Java 的class是定义对象的蓝图,包含成员变量和方法。通过创建类的实例,可以使用这些成员变量和方法。类还支持继承和多态,使得代码更加灵活和可重用。return age;@Override这段代码展示了类的定义、成员变量、方法、构造函数、继承和多态的基本用法。
2024-08-11 14:53:56
1133
原创 Java初学:helloworld解析之public是啥?
虽然public关键字在定义类、方法和变量时非常常见,但并不是所有的 Java 代码都必须使用public。使用public关键字的主要目的是控制访问级别,确保类、方法或变量可以被需要访问的其他类访问。在实际开发中,应该根据具体需求选择合适的访问修饰符,以确保代码的封装性和安全性。
2024-08-11 14:24:28
346
原创 Java初学:helloworld解析之String[] args是啥?
是main方法的参数,用于接收命令行参数。它是 Java 程序的标准入口点,JVM 需要这个签名来启动程序。删除会导致编译错误,因为 JVM 无法找到正确的main方法。希望这篇博客可以帮助你更好地理解的作用和重要性!
2024-08-10 22:48:28
786
原创 Java初学:helloworld解析之System是啥?
System是一个预定义的类,提供了与系统进行交互的静态方法和字段。System.out是System类的一个静态字段,表示标准输出流。println是类的一个方法,用于输出一行文本并换行。
2024-08-10 18:55:23
213
原创 C++ vs Java
C++:适合需要高性能和低级别内存控制的应用,如系统编程和游戏开发。Java:适合企业级应用和跨平台开发,具有自动内存管理和丰富的标准库。
2024-08-10 17:38:44
825
原创 malloc、free与new、delete
在C++中,推荐使用new和delete进行内存管理,因为它们更符合C++的面向对象特性,能够自动调用构造和析构函数,并且提供了更好的类型安全性和异常处理机制。
2024-08-10 10:52:09
393
原创 C++:NULL与nullptr
特性NULLnullptr定义通常定义为整数常量0关键字,类型为类型安全可能导致类型不匹配类型安全,不会与其他类型混淆重载解析可能选择错误的重载确保选择指针类型的重载推荐使用不推荐推荐通过使用nullptr,可以编写更安全、更清晰的C++代码,避免由于类型不匹配和重载解析错误引起的问题。
2024-08-05 16:22:48
276
原创 C++:类内指针为何只声明而不初始化?
类内的指针成员变量通常只声明而不初始化,主要是为了提供灵活性,允许在对象的生命周期中根据具体情况进行动态内存分配和管理。通过在构造函数或其他成员函数中进行初始化,可以更好地控制内存的分配和释放,确保程序的安全性和稳定性。
2024-08-05 16:08:13
359
原创 C++:空指针与野指针问题
空指针和野指针是C++编程中常见的指针错误。空指针表示指针不指向任何有效内存,而野指针则指向已经被释放或未分配的内存。通过适当的初始化和检查,可以有效避免这些错误。
2024-08-05 15:46:14
223
原创 浅谈内联函数
内联函数是一种优化技术,适用于小而频繁调用的函数。虽然可以提高性能,但也需要注意代码膨胀的问题。不同编程语言对内联函数的支持和实现方式有所不同,但基本原理是一致的。
2024-08-05 15:18:24
374
原创 C++:作用域与命名空间
在C++中,作用域(Scope)和命名空间(Namespace)是两个重要的概念,用于组织代码和避免命名冲突。下面详细介绍这两个概念。作用域和命名空间是C++中组织代码和避免命名冲突的重要工具。理解和正确使用它们可以提高代码的可读性和可维护性。
2024-08-05 15:02:15
413
原创 C++:23种设计模式
设计模式是软件设计中常用的解决方案,分为三大类:创建型模式、结构型模式和行为型模式。以下是23种设计模式的简要介绍和C++代码示例。提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。public:public:public:public:public:public:设计模式是软件工程中的一种最佳实践,它们提供了在特定情境下解决常见设计问题的模板。设计模式分为三大类:创建型模式、结构型模式和行为型模式。
2024-08-05 11:45:40
5621
原创 C++:智能指针
C++智能指针(Smart Pointers)是C++11引入的一种用于自动管理动态内存的工具。智能指针通过RAII(Resource Acquisition Is Initialization)机制,在对象生命周期结束时自动释放内存,避免了内存泄漏和悬空指针等问题。和。智能指针在C++中提供了一种安全、简洁的内存管理方式,避免了手动管理动态内存带来的复杂性和潜在错误。使用来确保独占所有权。使用来共享所有权。使用来解决循环引用问题。
2024-08-04 15:19:42
543
原创 C++: STL容器及对应操作函数
C++标准库(STL,Standard Template Library)提供了一组通用的容器类,用于存储和管理数据。每种容器都有一组特定的操作函数,用于插入、删除、访问和遍历元素。这些容器和操作函数提供了丰富的功能和灵活性,适用于各种不同的编程场景。选择合适的容器和操作函数可以显著提高程序的性能和可维护性。
2024-08-04 15:02:34
1296
原创 C++:重载与重写
是面向对象编程中的一个重要概念,允许在同一个作用域内定义多个同名的函数或运算符,但它们的参数列表必须不同。重载可以提高代码的可读性和灵活性,使得同一个函数名或运算符可以用于不同类型或数量的参数。
2024-08-03 11:32:43
1117
3
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人