单片机的存储器类型
单片机(Microcontroller Unit, MCU)是一种将计算机的主要部分集成在一个芯片上的微型计算机。它集成了处理器(CPU)、存储器、输入输出接口等必要的功能模块,广泛应用于各种嵌入式系统中。单片机的存储器结构对于理解和使用单片机至关重要,因为它决定了程序和数据如何被存储和访问。
单片机的存储器类型
在讨论单片机的存储器结构时,我们主要关注两种类型的存储器:Flash和RAM。这两种存储器各有其特点和用途:
- Flash(非易失性存储器):用于存放程序代码和常量数据。当单片机断电后,Flash中的内容不会丢失。Flash具有可擦除和可编程的特性,允许用户更新或重写其中的内容。通常情况下,Flash的写入速度较慢,并且有一定的写入次数限制。
- RAM(易失性存储器):用于存放变量、堆栈、缓冲区等运行时的数据。RAM的特点是速度快,但一旦断电,其中的数据就会消失。因此,RAM主要用于临时存储需要快速读写的变量和数据。
存储器映射与地址空间
单片机的存储器按照一定的规则进行映射,形成地址空间。每个存储单元都有一个唯一的地址,CPU通过这个地址来访问特定的存储单元。单片机的地址空间分为多个区域,例如程序存储区、数据存储区、特殊功能寄存器区等。了解这些区域有助于正确地编写和调试程序。
程序存储区
程序存储区位于Flash中,包含了执行程序所需的机器码。程序员编写的源代码经过编译和链接后生成二进制文件,然后被烧录到单片机的Flash中。下面是一个简单的C语言代码示例,展示了如何定义和使用程序存储区中的字符串:
```c
// 将字符串放入Flash存储器
const char message[] PROGMEM = "Hello, World!";
void setup() {
// 初始化串口通信
Serial.begin(9600);
// 从Flash中读取字符串并发送到串口
for (int i = 0; i < sizeof(message); ++i) {
Serial.write(pgm_read_byte_near(message + i));
}
}
void loop() {
// 主循环体为空
}
```
数据存储区
数据存储区位于RAM中,用于存放程序运行期间的变量和数据。这里的数据可以随时被修改,以满足程序逻辑的需求。下面是一个示例代码,演示了如何在RAM中声明和操作变量:
```c
// 在RAM中声明变量
int counter = 0;
void setup() {
// 初始化数字引脚为输出模式
pinMode(LED_BUILTIN, OUTPUT);
}
void loop() {
// 增加计数器值
counter++;
// 如果计数器达到100,则点亮LED
if (counter >= 100) {
digitalWrite(LED_BUILTIN, HIGH);
counter = 0; // 重置计数器
} else {
digitalWrite(LED_BUILTIN, LOW);
}
// 暂停一段时间
delay(50);
}
```
特殊功能寄存器(SFR)
除了Flash和RAM外,单片机还包含一系列特殊的寄存器,称为特殊功能寄存器(Special Function Register, SFR)。SFR用于控制单片机的各种硬件资源,如定时器、中断控制器、串行通信接口等。SFR的配置对单片机的功能实现起着关键作用。
例如,设置定时器0的工作方式可以通过向TCON寄存器写入相应的位来完成:
```c
// 设置定时器0工作模式
void setupTimer0(void) {
TMOD |= 0x01; // 设置定时器0为模式1(16位定时/计数器)
TH0 = 0xFC; // 设置高字节初值
TL0 = 0x18; // 设置低字节初值
TR0 = 1; // 启动定时器0
}
```
内存管理技术
为了有效地利用有限的存储资源,单片机程序员经常采用一些内存管理技术。比如,使用`PROGMEM`关键字将只读数据放置在Flash中,以节省RAM空间;或者使用动态内存分配函数(如`malloc`和`free`)来灵活管理RAM中的数据块。然而,在资源受限的环境中,直接使用动态内存分配可能不是最佳选择,因为这可能导致内存碎片问题。
此外,某些高级单片机支持外部存储器扩展,允许连接额外的Flash或RAM芯片,从而增加系统的存储容量。这种情况下,程序员需要考虑如何设计高效的存储器接口以及如何优化数据传输效率。
结合使用Flash和RAM
在实际应用中,合理地结合使用Flash和RAM能够提高程序性能和资源利用率。例如,可以在Flash中保存初始化参数,在启动时将其加载到RAM中进行快速访问。下面是一个综合性的代码示例,说明了如何从Flash加载配置数据到RAM:
```c
#include
// 定义Flash中的配置数据
const struct Config {
uint16_t baudRate;
uint8_t pinMode;
} config PROGMEM = {9600, INPUT};
// RAM中的副本
struct Config ramConfig;
void setup() {
// 加载配置数据到RAM
memcpy_P(&ramConfig, &config, sizeof(struct Config));
// 根据配置初始化硬件
Serial.begin(ramConfig.baudRate);
pinMode(LED_BUILTIN, ramConfig.pinMode);
}
void loop() {
// 运行主循环
}
相关文章:
单片机的存储器类型
单片机(Microcontroller Unit, MCU)是一种将计算机的主要部分集成在一个芯片上的微型计算机。它集成了处理器(CPU)、存储器、输入输出接口等必要的功能模块,广泛应用于各种嵌入式系统中。单片机的存储器结构对于理解和使用单片机至关重要&…...
深入剖析MySQL数据库架构:核心组件、存储引擎与优化策略(一)
sql语句分为两大类:查询(select)、增删改----修改(update) select语句的执行流程 执行sql语句的流程:连接数据库、缓存查询、解析器、优化器、执行器、存储引擎操作数据 客户端:图形界面工具…...
java常见的面试题
目录 一、 spring的配置文件的哪四处? 1.数据源(Data Source)配置 2.事务管理器(Transaction Manager)配置 3. 扫描组件(Component Scanning)配置 4. AOP(面向切面编程)配置&…...
2025吉林大学软件学院研究生人工智能原理真题
选择题 5题共10分 5.以下模型不需要训练过程的是? A.支持向量机 B.决策树 C.KNN近邻算法 D.卷积神经网络 简答题 4题35分 1.大模型是否已经通过图灵测试 2.三个近二十年来的机器学习模型和应用案例 3.LDA原理和算法流程 4.CNN原理和算法流程 证明题 谓词逻辑15…...
Qt判别不同平台操作系统调用相应动态库读取RFID
本示例使用的读卡器:https://item.taobao.com/item.htm?spma21dvs.23580594.0.0.52de2c1b8jdyXi&ftt&id562957272162 #include <QDebug> #include "mainwindow.h" #include "./ui_mainwindow.h" #include "QLibrary"…...
智慧工地系统:建筑施工智能化管理的全新模式
智慧工地概述 智慧工地是将互联网的理念和和物联网的技术引入建筑工地,依托物联网、互联网、大数据、5G技术,建立云端数据平台,形成大数据的业务体系,打通一线操作与远程监管的链条,实现劳务、安全、环境、材料等各个…...
js将object整个实体对象作为参数传递
①将object实体转化成json字符串传递: JSON.stringify(obj) ②将json字符串转化成JSON对象值:JSON.parse(json) 实际应用: <div id"div_notice" stylefont-size:14px; width:100%; height:200px; overflow-y:auto;></di…...
shell的循环结构
1、思维导图 2、定义一个find函数,查找ubuntu和root的gid并使用变量接收结果 #!/bin/bash #第二题查找gid并返回结果 find() {u_gidid -g ubuntur_gidid -g rootecho "root-gid$r_gid"echo "ubuntu-gid$u_gid" } ret$(find) echo $ret3、定义一…...
STM32-笔记29-蓝牙遥控插座项目
一、实验前期准备 手机通过蓝牙模块远程遥控风扇。(插座的原理就是继电器,所以控制继电器就是控制插座电源) 二、项目实现 复制项目文件夹32-蓝牙模块实现,重命名33-蓝牙遥控插座项目 找到一个继电器项目,把继电器复…...
计算机网络复习(习题)
术语辨析 数据链路层 该层在两个通信实体之间传送以帧为单位的数据,通过差错控制方法,使有差错的物理线路变成无差错数据链路。 网络层 负责使分组以适当的路径通过通信子网的层次。 运输层 负责向两台主机中进程之间的通信提供通用的数据传输服务的层次。 应用层…...
webserver的http实现
1、用了状态机,为什么要用状态机? 在逻辑处理模块中,响应的http请求采用主从状态机完成, 传统的控制流程都是按照顺序执行的,状态机能够处理任意顺序的事件,并能提供有意义的响应--即使这些事件发生的顺序和…...
C语言----指针
目录 1.概念 2.格式 3.指针操作符 4.初始化 1. 将普通变量的地址赋值给指针变量 a. 将数组的首地址赋值给指针变量 b. 将指针变量里面保存的地址赋值给另一个指针变量 5.指针运算 5.1算术运算 5.2 关系运算 指针的大小 总结: 段错误 指针修饰 1. con…...
Elasticsearch与数据库数据一致性:最佳实践与解决方案
在现代应用程序中,Elasticsearch(ES)作为一个高效的分布式搜索引擎,常常与数据库一同使用,以提供强大的搜索、分析和数据可视化功能。然而,数据库和Elasticsearch之间的同步与一致性常常成为一个挑战。如何…...
C# 基本语法
C# 基本语法 介绍 C#(读作 "C sharp")是一种现代的、面向对象的编程语言,由微软开发,并在2000年首次发布。它是.NET框架的一部分,被广泛用于开发各种类型的应用程序,包括桌面应用、Web应用、移…...
CDGA|浅析自动化对数据治理的深远影响
在数字化时代,数据治理已成为企业管理的核心议题之一。随着数据量的快速增长和复杂性的不断提升,传统的手工数据管理方式已难以满足企业的需求。而自动化技术的引入,为数据治理带来了新的动力,正在逐步改变数据治理的面貌。 自动化…...
【机器学习】【朴素贝叶斯分类器】从理论到实践:朴素贝叶斯分类器在垃圾短信过滤中的应用
🌟 关于我 🌟 大家好呀!👋 我是一名大三在读学生,目前对人工智能领域充满了浓厚的兴趣,尤其是机器学习、深度学习和自然语言处理这些酷炫的技术!🤖💻 平时我喜欢动手做实…...
小程序租赁系统的优势与应用探索
内容概要 小程序租赁系统,听起来很高大上,但实际上它比你想象的要实用得多!设想一下,几乎所有的租赁需求都能通过手机轻松解决。这种系统的便捷性体现在让用户随时随地都能发起租赁请求,而不再受制于传统繁琐的手续。…...
汇编环境搭建
学习视频 将MASM所在目录 指定为C盘...
ubuntu24.04使用open-vm-tools无法在主机和虚拟机之间拖拽文件夹
最近安装了vmware用ubuntu24.04作为虚拟机 然后发现无法在主机和虚拟机之间复制粘贴 然后安装了 sudo apt-get install open-vm-tools-desktop重启虚拟机,发现可以复制粘贴文字,但是文件和文件夹仍然不行 搜索发现是Ubuntu(22.04࿰…...
C++软件设计模式之模板方法模式
模板方法模式是面向对象软件设计模式之一,其主要意图是在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中实现。模板方法使得子类可以在不改变算法结构的情况下重新定义算法的某些特定步骤。 动机 在软件开发中,常常会遇到这样的情…...
20241231 机器学习ML -(2)KNN(scikitlearn)
1. build DKTree 递推创建Tree;当前维度找中位数分割 数据集 left set,Node(mid), right set. * 循环维度(当log(Nsample)>featureSize) 2. DKTree KNN search * 理论部分向量几何有介绍。 每个维度列中,中位数对应的数据点…...
Prometheus之终极指南(The Ultimate Guide to Prometheus)
Prometheus之终极指南 Prometheus 彻底改变了我们在现代 DevOps 生态系统中监控基础设施、应用程序和服务的方式。它不仅仅是一个工具;它是一个由指标收集、告警和实时监控组成的生态系统,受到 Uber、Google 和 SoundCloud 等组织的信任。在本文中&…...
如何使用Python调用淘宝api接口获取商品详情信息?
使用 Python 调用淘宝 API 接口获取商品详情信息,可按照以下步骤进行: 注册并获取 API 密钥 访问淘宝api文档,点击 “立即测试” 按钮,按照提示完成注册流程。注册成功后,登录测试平台,进入 “控制台” 页面…...
ubuntu 22下解决Unment dependencies问题
问题现象 在使用apt安装包的时候,出现如下错误: 解决方案 第一步 sudo apt-get -f install sudo apt-get update sudo apt-get upgrade第二步 sudo apt-get update sudo apt-get clean sudo apt-get autoremove第三步 sudo apt --fix-broken inst…...
leetcode 热题100(155. 最小栈)multiset c++
链接:155. 最小栈 - 力扣(LeetCode) 设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈。 实现 MinStack 类: MinStack() 初始化堆栈对象。void push(int val) 将元素val推入堆栈。…...
某小程序sign签名参数逆向分析
文章目录 1. 写在前面2. 接口分析3. 分析还原 【🏠作者主页】:吴秋霖 【💼作者介绍】:擅长爬虫与JS加密逆向分析!Python领域优质创作者、CSDN博客专家、阿里云博客专家、华为云享专家。一路走来长期坚守并致力于Python…...
阿里云redis内存优化——PCP数据清理
在阿里云安装了一个redis节点,今天使用时忽然想着点击了一下分析内存。好家伙,居然崩出了一个30多M的块出来。问题是我本地安装的redis没有这个啊,怎么奇怪冒出这个来了。 本着把系统用干榨尽的态度,研究了下这个问题的来源。网上…...
YOLOv10-1.1部分代码阅读笔记-head.py
head.py ultralytics\nn\modules\head.py 目录 head.py 1.所需的库和模块 2.class Detect(nn.Module): 3.class Segment(Detect): 4.class OBB(Detect): 5.class Pose(Detect): 6.class Classify(nn.Module): 7.class WorldDetect(Detect): 8.class RTDETRDec…...
java开发中注解汇总
注解作用位置注意mybatis Data Getter Setter ToString EqualsAndHashCode AllArgsConstructor NoArgsConstructor Data 代替:无参构造,get,set,toString,hashCode,equals Getter Setter 可放在类和方法上&…...
Java开发 PDF文件生成方案
业务需求背景 业务端需要能够将考试答卷内容按指定格式呈现并导出为pdf格式进行存档,作为紧急需求插入。导出内容存在样式复杂性,包括特定的字体(中文)、字号、颜色,页面得有页眉、页码,数据需要进行表格聚…...
Python机器学习笔记(十七、分箱、离散化、线性模型与树)
数据表示的最佳方法:取决于数据的语义,所使用的模型种类。 线性模型与基于树的模型(决策树、梯度提升树和随机森林)是两种成员很多同时又非常常用的模 型,它们在处理不同的特征表示时就具有非常不同的性质。我们使用w…...
[极客大挑战 2019]Http 1
进入环境: 检查源码发现有一个链接,但是这里没有绑定,需要手动跳转,打开后,发现提示: 这里就是需要我们从https://Sycsecret.buuoj.cn来访问它 因此我们抓包,使用referer:服务器伪造…...
最近学习shader的一些总结
旨在总结最近学习shader过程中一些关键要素,强化下记忆,如果有错误也烦请指出。 1.Properties 可调节变量,用于定义从外部传入到内部的变量, 以及外部通过访问这些变量名, 可以获取这些变量的值 其中定义时指定的类型, 在后文中类型不一定相同(基本不…...
庐山派K230学习日记1 从点灯到吃灰
1 简介 庐山派以K230为主控芯片,支持三路摄像头同时输入,典型网络下的推理能力可达K210的13.7倍(算力约为6TOPS)。支持CanMV,可作为AI与边缘计算平台 K230简介 K230芯片集成了两颗RISC-V处理器核心,双核…...
在Swagger(现称为OpenAPI)中各类@api之间的区别
在Swagger(现称为OpenAPI)中,ApiOperation 是用来描述单个API操作的注解。除此之外,Swagger还提供了其他一些类似的注解,它们用于不同层次或目的来增强API文档的详细程度和可读性。以下是这些注解及其之间的区别&#…...
【网络协议】开放式最短路径优先协议OSPF详解(二)
前言 第一部分:【网络协议】开放式最短路径优先协议OSPF详解(一) 在第一部分中,我们了解了链路状态路由协议并讨论了 OSPF 的工作原理,同时学习了如何配置 OSPF。在本章的第二部分中,我们将进一步探讨 OS…...
windows文件夹自定义右键调用powershell完成7zip加密打包
准备powershell脚本 2. regedit的路径是:计算机\HKEY_CLASSES_ROOT\Directory\shell\,在此项目下新增子项目diy_command\command,command的数据值为powershell D:\windowsProjects\directory_diy.ps1 %1 效果,点击后进入和power…...
MySQL 入门教程
MySQL是最流行的关系型数据库管理系统,在WEB应用方面MySQL是最好的RDBMS(Relational Database Management System:关系数据库管理系统)应用软件之一。 在本教程中,会让大家快速掌握MySQL的基本知识,并轻松使用MySQL数据库。 什么…...
BOOST 库在机器视觉中的应用及示例代码分析
一、引言 机器视觉是一门让计算机模拟人类视觉功能,对图像或视频数据进行理解、分析和决策的学科领域。在机器视觉的开发过程中,常常需要高效处理各种数据结构、进行数值计算、实现多线程并行处理以及运用优秀的算法框架等。BOOST 库作为一个功能强大、…...
第二十六天 自然语言处理(NLP)词嵌入(Word2Vec、GloVe)
自然语言处理(NLP)中的词嵌入(Word2Vec、GloVe)技术,是NLP领域的重要组成部分,它们为词汇提供了高维空间到低维向量的映射,使得语义相似的词汇在向量空间中的距离更近。以下是对这些技术的详细解…...
Log4j2 详解(异步日志打印及CSV格式日志输出)
Log4j2 详解 Apache Log4j2 是一个功能强大的 Java 日志记录框架,提供高性能和灵活的配置。本文档涵盖了 Log4j2 的核心功能及其详细使用方式,包括基础配置、异步日志、CSV 格式日志的输出以及使用注意事项。 一 Log4j2 基础概念与配置 1.1 Log4j2 介绍…...
[网络安全] DVWA之Content Security Policy (CSP) Bypass 攻击姿势及解题详析合集
CSP概念 CSP 是 Content Security Policy(内容安全策略)的缩写,是一种用于增强 Web 应用程序安全性的安全机制。它通过允许网站管理员控制页面中加载内容的来源来减少跨站脚本攻击(XSS)等常见的安全风险。 CSP 的工作…...
linux shell脚本 【分支结构case...in 、循环结构、函数】内附练习
1.思维导图 2.练习 1.定义一个find函数,查找ubuntu和root的gid 2.定义一个数组,写一个函数完成对数组的冒泡排序 bubble() {n${#arr[*]}for((i0;i<n-1;i));dofor((j0;j<n-1-i;j));doif ((arr[j]>arr[j1]));thentemp${arr[j]}arr[j]${arr[j1]}a…...
C# 设计模式(结构型模式):桥接模式
C# 设计模式(结构型模式):桥接模式 在软件设计中,我们经常会遇到系统的变化频繁,或者需要灵活扩展功能的场景。这时,桥接模式(Bridge Pattern)便显得尤为重要。桥接模式是一个结构型…...
RC充电电路仿真与分析
RC充电原理 下图是一个常见的RC充电电路:(假设R10K,C100nF) SW断开时,这个电路处于断路状态,C既没有充电也没有放电;SW闭合时,直流电源5V为电容C充电; 充电时电容两端…...
在 SQL 中获取第m个开始的n条记录方法汇总
在 SQL 中,要获取第m个开始的n条记录,主要取决于你使用的数据库系统和支持的功能。以要获取第10个开始的20条记录为例说明几种常见的方法: 1. 使用 LIMIT 和 OFFSET 适用于 MySQL、PostgreSQL 等支持 LIMIT 的数据库。 SELECT * FROM table…...
Linux 35.6 + JetPack v5.1.4之编译 pytorch
Linux 35.6 JetPack v5.1.4之编译 pytorch 1. 源由2. 折腾3. 构建步骤3.1 下载代码3.2 编译选项3.3 CUDA选项3.4 CUDA路径3.5 版本控制3.6 编译whl 4. 总结5. 参考资料 1. 源由 目前,有很多科研性质的自动导航的开源代码,例如: Linux 35.5…...
docker 部署nginx
1、拉取阿里的nginx镜像: docker pull crpi-k5k93ldwfc7o75ip.cn-hangzhou.personal.cr.aliyuncs.com/list_su/nginx:stable-perl 2、官方nginx镜像: docker pull nginx:stable-perl 3、创建挂载文件目录 mkdir nginx && cd nginx mkdir c…...
深入刨析数据结构之排序(上)
目录 1.内部排序 1.1概述 1.2插入排序 1.2.1其他插入排序 1.2.1.1 折半插入排序 1.2.1.2 2-路插入排序 1.3希尔排序 1.4快速排序 1.4.1起泡排序 1.4.2快速排序 1.4.2.1hoare版本 1.4.2.2挖坑版本 1.4.2.3前后指针版本 1.4.2.4优化版本 1.4.2.4.1小区间插入排序优…...
Java - 日志体系_Apache Commons Logging(JCL)日志接口库_桥接Logback 及 源码分析
文章目录 PreApache CommonsApache Commons ProperLogging (Apache Commons Logging ) JCL 集成logbackPOM依赖配置文件 logback.xml使用 源码分析jcl-over-slf4j 的工作原理1. LogFactory 的实现2. SLF4JLogFactory 和 Log 的实例化过程3. SLF4JLog 和 …...