- 博客(25)
- 收藏
- 关注
原创 FLASH与RAM深度解析及核心区别
摘要:FLASH与RAM是存储器的两大类型,核心区别在于FLASH断电不丢失(非易失性),但写入需擦除块且寿命有限;RAM断电丢失(易失性),但读写极快且无寿命限制。FLASH适合存储固件等长期数据(如NOR Flash执行代码,NAND Flash用于SSD),RAM用于实时计算(SRAM作CPU缓存,DRAM为主存)
2025-06-10 19:15:42
858
原创 FTP主动模式与被动模式解析
客户端防火墙可能阻止来自服务器20端口的入站连接(如企业内网环境)。所有连接均由客户端发起,完美兼容仅允许出站连接的防火墙策略。
2025-06-10 18:53:37
326
原创 内存 区域
区域用途特性管理方式栈(Stack)存储局部变量、函数调用信息等自动管理、快速访问、有限大小编译器自动管理堆(Heap)动态分配内存手动管理、灵活大小、较慢访问程序员手动管理代码区存储程序的机器代码只读、共享不可修改数据区存储全局变量、静态变量和常量生命周期长、作用域广编译器管理理解这些内存区域有助于编写更高效、更安全的程序,特别是在处理内存分配和释放时。
2025-03-27 13:48:03
398
原创 一些嵌入式C语言编程中非常实用的代码片段及笔记
c复制代码// 1. 位操作宏// 2. 数值约束// 3. 调试输出(可禁用)#else#endif。
2025-03-25 19:31:33
615
原创 Linux和GitLab建立SSH keys的配置步骤
一旦SSH key配置完成并验证通过,你就可以使用SSH协议来拉取(pull)、推送(push)Git仓库中的代码了。:首先,你需要在本地计算机上打开终端(在Linux或Mac OS中)或命令提示符/PowerShell(在Windows中)。:点击页面右上角的用户头像,选择“Settings”(设置),然后在左侧导航栏中选择“SSH Keys”。:在“SSH Keys”页面中,点击“Add SSH key”(添加SSH密钥)按钮。:打开GitLab的官方网站或使用你的GitLab实例,并登录到你的账户。
2024-09-19 16:40:48
1045
原创 CRC校验流程:
4 、如果最低位为0:重复第三步(下一次移位);如果最低位为1:将CRC寄存器与一个预设的固定值(0A001H)进行异或运算。2 、把数据帧中的第一个字节的8位与CRC寄存器中的低字节进行异或运算,结果存回CRC寄存器。1、预置一个16位寄存器为0FFFFH(全1),称之为CRC寄存器。6 、重复第2步到第5步来处理下一个八位,直到所有的字节处理结束。5、重复第三步和第四步直到8次移位。3、将CRC寄存器向右移一位,最高位填以0,最低位移出并检测。7、最终CRC寄存器的值就是CRC的值。
2024-07-15 16:44:31
452
原创 Docker新手快速入门教程
Docker是一个开源的应用容器引擎,它允许开发者将他们的应用以及依赖包打包到一个可移植的容器中,然后发布到任何流行的Linux机器或Windows机器上。Docker使用了资源隔离的技术(如Cgroups和Namespace),使得每个容器都可以在自己的环境中运行,就像在一个独立的操作系统中一样。这使得Docker成为了虚拟化的一种轻量级替代方案。Dockerfile 是一个文本文件,它包含了一系列的命令,这些命令用于构建一个新的 Docker 镜像。
2024-06-12 14:42:39
1459
1
原创 Ubuntu20.04 部署docker容器新手教程
执行下面的命令会下载一个Docker测试镜像,并在容器中执行一个“hello-world”样例程序。1、在/etc/docker$ sudo vi daemon.json 添加。
2024-06-11 20:05:49
3819
2
原创 Linux系统安装SQLite
SQLite是一种轻量级的嵌入式关系型数据库管理系统,它是一种开源的软件,并且可以在各种操作系统上运行。SQLite的设计目标是轻巧、快速、可靠,适用于大多数应用程序,包括嵌入式设备、移动设备、桌面计算机以及服务器。优点: 轻量级:SQLite3的核心代码库只有几百KB,因此可以很容易地集成到其他应用程序中。无服务器架构:SQLite3不需要一个单独的服务器进程或守护程序,它是一个自给自足的库,与应用程序一起工作。
2024-04-24 10:37:23
981
1
原创 C语言字符串化操作符 #
在这个例子中,STR(x)首先将x(即USART_RATE)扩展为其值115200,然后_STR(x)将这个值转换为字符串。所以,printf会打印出usart rate = 115200\n。在C语言中,我们可以使用预处理器的字符串化操作符#来将宏参数转换为字符串。这个操作符只能在宏定义中使用。转换为字符串,而不是将其值。但是,这样做会直接将。
2024-03-20 20:46:34
457
2
原创 C++ 引用作为返回值,怎么理解,有什么作用?
然而,需要注意的是,你不能返回一个局部变量的引用,因为局部变量在函数返回后会被销毁,这会导致返回的引用变得无效。同时,如果返回的是堆区对象的引用,需要注意在适当的时候释放内存,以防止内存泄漏。在C++中,函数可以返回一个引用,这种方式与返回一个指针类似。当函数返回一个引用时,实际上返回的是一个指向返回值的隐式指针。这意味着,当你修改这个返回的引用时,你实际上是在修改原来的变量。在这个例子中,fun函数返回了temp的引用,所以我们可以直接对fun()赋值,这会改变temp的值。
2024-03-19 14:25:32
2915
1
原创 在C++中,数组的元素不能是引用,主要有以下两个原因:
传统的复制操作是在内存中为变量分配新的空间,并将值复制到新的空间中。例如,int a = b;,这里a和b在内存中占用不同的空间,但是内容一致。然而,对于引用来说,例如int& a = b;,这个时候,a并没有在内存中被分配空间,因为a只是b的别名,所以没有复制可言。这就意味着,对于数组元素是引用来说,没法完成元素的复制操作。:在C++中,引用在声明时必须被初始化,并且一旦被初始化后就不能改变引用的目标。然而,数组在声明时并不需要初始化所有的元素,这与引用的特性是冲突的。
2024-03-19 11:21:42
825
2
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人