easyflash 教程

2023-05-16

可以看easyflash下的docs文档,万一你们手头没有文档呢。这里我就直接黏贴了。

API 说明文档: docs/zh/api.md
通用移植文档: docs/zh/port.md

EasyFlash API 说明


所有支持的API接口都在\easyflash\inc\easyflash.h中声明。以下内容较多,建议使用 CTRL+F 搜索。

名词介绍:

备份区 :是EasyFlash定义的一个存放环境变量、已下载程序及日志的Flash区域,详细存储架构可以参考\easyflash\src\easyflash.c文件头位置的注释说明或移植文档中关于备份区参数配置。

环境变量表 :负责存放所有的环境变量,该表在Flash及RAM中均存在,上电后需从Flash加载到RAM中,修改后,则需要保存其至Flash中。。

1、用户使用接口

1.1 初始化

初始化的EasyFlash的各个组件,初始化后才可以使用下面的API。

EfErrCode easyflash_init(void)

1.2 环境变量

1.2.1 加载环境变量

加载Flash中的所有环境变量到系统内存中。

void ef_load_env(void)

1.2.2 打印环境变量

通过在移植接口(\easyflash\port\ef_port.c)中定义的ef_print打印方法,来将Flash中的所有环境变量输出出来。

void ef_print_env(void)

1.2.3 获取环境变量

通过环境变量的名字来获取其对应的值。(注意:此处的环境变量指代的已加载到内存中的环境变量)

char *ef_get_env(const char *key)
参数描述
key环境变量名称

1.2.4 设置环境变量

使用此方法可以实现对环境变量的增加、修改及删除功能。(注意:此处的环境变量指代的已加载到内存中的环境变量)

  • 增加 :当环境变量表中不存在该名称的环境变量时,则会执行新增操作;

  • 修改 :入参中的环境变量名称在当前环境变量表中存在,则把该环境变量值修改为入参中的值;

  • 删除 :当入参中的value为空时,则会删除入参名对应的环境变量。

EfErrCode ef_set_env(const char *key, const char *value)
参数描述
key环境变量名称
value环境变量值

1.2.5 保存环境变量

保存内存中的环境变量表到Flash中。

EfErrCode ef_save_env(void)

1.2.6 重置环境变量

将内存中的环境变量表重置为默认值。

EfErrCode ef_env_set_default(void)

1.2.7 获取当前环境变量写入到Flash的字节大小

size_t ef_get_env_write_bytes(void)

1.2.8 设置并保存环境变量

设置环境变量成功后立刻保存。设置功能参考ef_set_env方法。

EfErrCode ef_set_and_save_env(const char *key, const char *value)
参数描述
key环境变量名称
value环境变量值

1.3 在线升级

1.3.1 擦除备份区中的应用程序

EfErrCode ef_erase_bak_app(size_t app_size)

1.3.2 擦除用户的应用程序

注意:请不要在应用程序中调用该方法

EfErrCode ef_erase_user_app(uint32_t user_app_addr, size_t user_app_size)
参数描述
user_app_addr用户应用程序入口地址
user_app_size用户应用程序大小

1.3.3 通过用户指定的擦除方法来擦除应用程序

当用户的应用程序与备份区 不在同一个 Flash 时,则需要用户额外指定擦除应用程序的方法。而 ef_erase_user_app 会使用移植文件中的 ef_port_erase 方法进行擦除,除此之外的其余功能,两个方法均一致。

注意:请不要在应用程序中调用该方法

EfErrCode ef_erase_spec_user_app(uint32_t user_app_addr, size_t app_size,
        EfErrCode (*app_erase)(uint32_t addr, size_t size));
参数描述
user_app_addr用户应用程序入口地址
user_app_size用户应用程序大小
app_erase用户指定应用程序擦写方法

1.3.4 擦除Bootloader

注意:请不要在Bootloader中调用该方法

EfErrCode ef_erase_bl(uint32_t bl_addr, size_t bl_size)
参数描述
bl_addrBootloader入口地址
bl_sizeBootloader大小

1.3.5 写数据到备份区

为下载程序到备份区定制的Flash连续写方法。
注意:写之前请先确认Flash已进行擦除。

EfErrCode ef_write_data_to_bak(uint8_t *data,
                               size_t size,
                               size_t *cur_size,
                               size_t total_size)
参数描述
data需要写入到备份区中的数据存储地址
size此次写入数据的大小(字节)
cur_size之前已写入到备份区中的数据大小(字节)
total_size需要写入到备份区的数据总大小(字节)

1.3.6 从备份拷贝应用程序

将备份区已下载好的应用程序拷贝至用户应用程序起始地址。
注意:
1、拷贝前必须对原有的应用程序进行擦除
2、不要在应用程序中调用该方法

EfErrCode ef_copy_app_from_bak(uint32_t user_app_addr, size_t app_size)
参数描述
user_app_addr用户应用程序入口地址
user_app_size用户应用程序大小

1.3.7 通过用户指定的写操作方法来拷贝应用程序

当用户的应用程序与备份区 不在同一个 Flash 时,则需要用户额外指定写应用程序的方法。而 ef_copy_app_from_bak 会使用移植文件中的 ef_port_write 方法进行写操作,除此之外的其余功能,两个方法均一致。

EfErrCode ef_copy_spec_app_from_bak(uint32_t user_app_addr, size_t app_size,
        EfErrCode (*app_write)(uint32_t addr, const uint32_t *buf, size_t size))
参数描述
user_app_addr用户应用程序入口地址
user_app_size用户应用程序大小
app_write用户指定应用程序写操作方法

1.3.8 从备份拷贝Bootloader

将备份区已下载好的Bootloader拷贝至Bootloader起始地址。
注意:
1、拷贝前必须对原有的Bootloader进行擦除
2、不要在Bootloader中调用该方法

EfErrCode ef_copy_bl_from_bak(uint32_t bl_addr, size_t bl_size)
参数描述
bl_addrBootloader入口地址
bl_sizeBootloader大小

1.4 日志存储

1.4.1 从Flash中读取已存在的日志

EfErrCode ef_log_read(size_t index, uint32_t *log, size_t size);
参数描述
index日志读取的索引顺序
log存储待读取日志的缓冲区
size读取日志的大小

1.4.2 往Flash中保存日志

EfErrCode ef_log_write(const uint32_t *log, size_t size);
参数描述
log存储待保存的日志
size待保存日志的大小

1.4.3 清空存储在Flash中全部日志

EfErrCode ef_log_clean(void);

1.4.4 获取已存储在Flash中的日志大小

size_t ef_log_get_used_size(void);

2、配置

参照EasyFlash 移植说明(\docs\zh\port.md)中的 设置参数 章节

3、注意

  • 写数据前务必记得先擦除
  • 环境变量设置完后,只有调用ef_save_env才会保存在Flash中,否则开机会丢失修改的内容
  • 不要在应用程序及Bootloader中执行擦除及拷贝自身的动作
  • ENV及Log功能对Flash擦除和写入要求4个字节对齐,擦除的最小单位则需根据用户的平台来确定

EasyFlash 移植说明


1、下载源码

点击此链接即可直接下载位于Github上的源码。

建议:点击项目主页 https://github.com/armink/EasyFlash 右上角 Watch & Star,这样项目有更新时,会及时以邮件形式通知你。

如果Github下载太慢,也可以点击项目位于的国内仓库下载的链接(OSChina|Coding)。

2、导入项目

在导入到项目前,先打开\demo\文件夹,检查下有没有与项目Flash规格一致的Demo。如果有则先直接跳过2、3、4章节,按照第5章的要求设置参数,并运行、验证Demo。验证通过再按照下面的导入项目要求,将Demo中的移植文件直接导入到项目中即可。

  • 1、先解压下载好的源码包,文件的目录结构大致如下:
源文件描述
\easyflash\src\ef_env.cEnv(常规模式)相关操作接口及实现源码
\easyflash\src\ef_env_wl.cEnv(磨损平衡模式)相关操作接口及实现源码
\easyflash\src\ef_iap.cIAP 相关操作接口及实现源码
\easyflash\src\ef_log.cLog 相关操作接口及实现源码
\easyflash\src\ef_utils.cEasyFlash常用小工具,例如:CRC32
\easyflash\src\easyflash.c目前只包含EasyFlash初始化方法
\easyflash\port\ef_port.c不同平台下的EasyFlash移植接口
\demo\env\stm32f10x\non_osstm32f10x裸机片内Flash的Env demo
\demo\env\stm32f10x\non_os_spi_flashstm32f10x裸机SPI Flash的Env demo
\demo\env\stm32f10x\rttstm32f10x基于RT-Thread的片内Flash Env demo
\demo\env\stm32f4xxstm32f4xx基于RT-Thread的片内Flash Env demo
\demo\iap\ymodem+rtt.c使用RT-Thread+Ymodem的IAP Demo
\demo\log\easylogger.c基于EasyLogger的Log Demo
  • 2、将\easyflash\(里面包含incsrcport的那个)文件夹拷贝到项目中;
  • 3、添加\easyflash\src\easyflash.c\easyflash\src\ef_utils.c\easyflash\port\ef_port.c这些文件到项目的编译路径中;
  • 4、根据项目需求,选择性添加\easyflash\src\中的其他源码文件到项目的编译路径中;
  • 5、添加\easyflash\inc\文件夹到编译的头文件目录列表中;

3、Flash规格

在移植时务必先要了解项目的Flash规格,这里需要了解是规格是 最小擦除单位内部存储结构 ,各个厂家的Flash规格都有差异,同一厂家不同系列的规格也有差异。例如:stm32f10x系列中的大容量MCU自带Flash的页大小均为2K,而中小容量的页大小均为1K。在stm32f4xx系列中,每个页大小不是像stm32f10x那样平均分配,最大的有128K,最小的有16K。

注意:务必保证熟悉Flash规格后,再继续下章节。

4、移植接口

4.1 移植初始化

EasyFlash移植初始化。可以传递默认环境变量,初始化EasyFlash移植所需的资源等等。

EfErrCode ef_port_init(ef_env const **default_env, size_t *default_env_size)
参数描述
default_env默认的环境变量
default_env_size默认环境变量的数量

4.2 读取Flash

最小单位为4个字节。

EfErrCode ef_port_read(uint32_t addr, uint32_t *buf, size_t size)
参数描述
addr读取起始地址
buf存放读取数据的缓冲区
size读取数据的大小(字节)

4.3 擦除Flash

EfErrCode ef_port_erase(uint32_t addr, size_t size)
参数描述
addr擦除起始地址
size擦除数据的大小(字节)

4.4 写入Flash

最小单位为4个字节。

EfErrCode ef_port_write(uint32_t addr, const uint32_t *buf, size_t size)
参数描述
addr写入的起始地址
buf源数据的缓冲区
size写入数据的大小(字节)

4.5 对环境变量缓冲区加锁

为了保证RAM缓冲区在并发执行的安全性,所以需要对其进行加锁(如果项目的使用场景不存在并发情况,则可以忽略)。有操作系统时可以使用获取信号量来加锁,裸机时可以通过关闭全局中断来加锁。

void ef_port_env_lock(void)

4.6 对环境变量缓冲区解锁

有操作系统是可以使用释放信号量来解锁,裸机时可以通过开启全局中断来解锁。

void ef_port_env_unlock(void)

4.7 打印调试日志信息

在定义PRINT_DEBUG宏后,打印调试日志信息。

void ef_log_debug(const char *file, const long line, const char *format, ...)
参数描述
file调用该方法的文件
line调用该方法的行号
format打印格式
不定参

4.8 打印普通日志信息

void ef_log_info(const char *format, ...)
参数描述
format打印格式
不定参

4.9 无格式打印信息

该方法输出无固定格式的打印信息,为ef_print_env方法所用(如果不使用ef_print_env则可以忽略)。而ef_log_debugef_log_info可以输出带指定前缀及格式的打印日志信息。

void ef_print(const char *format, ...)
参数描述
format打印格式
不定参

5、设置参数

配置时需要修改项目中的ef_cfg.h文件,开启、关闭、修改对应的宏即可。

5.1 环境变量功能

  • 默认状态:开启
  • 操作方法:开启、关闭EF_USING_ENV宏即可

5.1.1 磨损平衡/常规 模式

磨损平衡:由于flash在写操作之前需要擦除且使用寿命有限,所以需要设计合理的磨损平衡(写平衡)机制,来保证数据被安全的保存在未到擦写寿命的Flash区中。

  • 默认状态:常规模式
  • 常规模式:关闭EF_ENV_USING_WL_MODE
  • 磨损平衡模式:打开EF_ENV_USING_WL_MODE

5.1.2 掉电保护

掉电保护:Power Fail Safeguard,当此项设置为可用时,如果在环境变量保存过程中发生掉电,已保存在Flash中的环境变量将不会有丢失的危险。下次上电后,环境变量将会被自动还原至之前的状态。(注意:本保护是基于软件实现的保护功能,更加可靠的掉电保护功能需要通过硬件来实现)

  • 默认状态:关闭
  • 操作方法:开启、关闭EF_ENV_USING_PFS_MODE宏即可

5.1.3 自动更新(增量更新)

可以对 ENV 设置版本号(参照 5.1.4)。当 ENV 初始化时,如果检测到产品存储的版本号与设定版本号不一致,会自动追加默认环境变量集合中新增的环境变量。

该功能非常适用于经常升级的产品中,当产品功能变更时,有可能会新增环境变量,此时只需要增大当前设定的 ENV 版本号,下次固件升级后,新增的环境变量将会自动追加上去。

  • 默认状态:关闭
  • 操作方法:开启、关闭EF_ENV_AUTO_UPDATE宏即可

5.1.4 环境变量版本号

该配置依赖于 5.1.3 配置。设置的环境变量版本号为整形数值,可以从 0 开始。如果在默认环境变量表中增加了环境变量,此时需要对该配置进行修改(通常加 1 )。

  • 操作方法:修改EF_ENV_VER_NUM宏对应值即可

5.2 在线升级功能

  • 默认状态:开启
  • 操作方法:开启、关闭EF_USING_IAP宏即可

5.3 日志功能

  • 默认状态:开启
  • 操作方法:开启、关闭EF_USING_LOG宏即可

5.4 Flash最小擦除单位

  • 操作方法:修改EF_ERASE_MIN_SIZE宏对应值即可

5.5 备份区

备份区共计包含3个区域,依次为:环境变量区、日志区及在线升级区。分区方式如下图所示

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-27eI29Fp-1576720849511)(http://git.oschina.net/Armink/EasyFlash/raw/master/docs/zh/images/BackupAreaPartition.j)]backupareapartiton

在配置时需要注意以下几点:

  • 1、所有的区域必须按照EF_ERASE_MIN_SIZE对齐;
  • 2、由于EasyFlash对所有的环境变量都会使用RAM缓存,但是在更多时候用户使用的环境变量大小会比EF_ERASE_MIN_SIZE小,所以需要再定义ENV_USER_SETTING_SIZE来指定用户设定的环境变量大小。
  • 3、环境变量区总容量在不同的模式下会有差异
    • 1、常规模式:没有差异;
    • 2、擦写平衡模式:系统区将会占用1个EF_ERASE_MIN_SIZE大小,数据区至少等使用2个以上Flash扇区;
    • 3、掉电保护模式:环境变量区将会被备份,所以总容量是常规模式的2倍;
    • 4、擦写平衡+掉电保护模式:所需容量将会是擦写平衡模式下总容量的2倍。
    • 例如:EF_ERASE_MIN_SIZE是128K,ENV_USER_SETTING_SIZE是2K,那么你可以这样定义不同模式下的环境变量总容量:
    • 1、常规模式:1*EF_ERASE_MIN_SIZE
    • 2、擦写平衡模式:3*EF_ERASE_MIN_SIZE(它将会有3个Flash扇区去存储环境变量,1个系统区,2个数据区,按照每个Flash扇区可被擦写10W次计算,那么当前配置至少可擦写20W次);
    • 3、掉电保护模式:2*EF_ERASE_MIN_SIZE;
    • 4、擦写平衡+掉电保护模式:6*EF_ERASE_MIN_SIZE;

5.5.1 备份区起始地址

  • 操作方法:修改EF_START_ADDR宏对应值即可

5.5.2 用户设定环境变量大小

  • 操作方法:修改ENV_USER_SETTING_SIZE宏对应值即可

注意:不使用环境变量功能时,可以不定义此宏。

5.5.3 环境变量区总容量

  • 操作方法:修改ENV_AREA_SIZE宏对应值即可

注意:不使用环境变量功能时,可以不定义此宏。

5.5.4 日志区总容量

  • 操作方法:修改LOG_AREA_SIZE宏对应值即可

注意:不使用日志功能时,可以不定义此宏。

5.6 调试日志

开启后,将会库运行时自动输出调试日志

  • 默认状态:开启
  • 操作方法:开启、关闭PRINT_DEBUG宏即可

6、测试验证

如果\demo\文件夹下有与项目Flash规格一致的Demo,则直接编译运行,观察测试结果即可。无需关注下面的步骤。

每次使用前,务必先执行easyflash_init()方法对EasyFlash库及所使用的Flash进行初始化,保证初始化没问题后,再使用各功能的API方法。如果出现错误或断言,需根据提示信息检查移植配置及接口。

6.1 环境变量

查看\demo\env\子文件夹中例子的README.md说明文档。测试时可以将\demo\env\stm32f10x\non_os\app\src\app.c中的static void test_env(void)方法体复制到项目中,然后运行测试。

6.2 在线升级

查看\demo\iap\README.md说明文档。

6.3 日志

查看\demo\log\README.md说明文档。

注意:easylogger.c是使用EasyLogger与EasyFlash的无缝接口的例子,EasyLogger提供针对日志的很多常用功能封装,详细功能可以查看其介绍。使用这个例子时,务必记得将EasyLogger一并导入到项目中。
在这里插入图片描述

rt-thread 软件包 easyflash

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

easyflash 教程 的相关文章

  • Linux Ubuntu基本操作指令

    Linux的登录方式 xff1a 1 本地登录 2 远程登录 xff1a putty使用 查看运行级别 xff1a Linux运行级别0 6级 xff0c 0 关机 6 重启 1 单用户 2 3 多用户 可以通过runlevel 查看运行级
  • 微信小程序开发(一)

    微信小程序开发 目录 微信小程序开发 一 微信小程序开发 二 五 让小程序连接树莓派 六 xff1a 小程序控制面板设计 七 xff1a 树莓派如何解析小程序的信息 八 xff1a 树莓派如何回信息给小程序 九 xff1a 树莓派与微信小程
  • ssh远程失败,提示“REMOTE HOST IDENTIFICATION HAS CHANGED! ”解决办法

    搞了个谷歌云 xff0c 但是因为一些原因一直提示我在挖矿 xff0c 一脸懵逼 xff0c 估计是别人的脚本做了手脚 删了新建一个实例 xff0c 外部IP还是原来的 xff0c 使用ssh远程连接的时候发现提示 REMOTE HOST
  • 【滤波器学习笔记】一阶RC低通滤波

    一阶RC低通滤波 从模拟到数字 本文整理自网络 匠人手记 等书籍文章 模拟电路低通滤波时域 频域软件低通滤波 典型电路 图1 典型RC电路 直流 交流 脉冲信号都可以用它 时域 电容电流 xff1a I c 61 d q d t 61 d
  • 嵌入式:一种裸机编程多任务切换方法

    嵌入式 xff1a 一种裸机编程多任务切换方法 有时候为了实现一些简单的 对实时性要求不高的任务 xff0c 采用操作系统不仅增加了程序的复杂性 xff0c 对低性能单片机的资源占用也是值得考虑的问题 这时候操作系统可能不是必要的 xff0
  • 自动化学科领域高质量科技期刊T1级期刊

    自动化学科领域高质量科技期刊T1级期刊 控制理论与控制工程方向 序号 期刊名称 T1 01 IEEE Transactions on Automatic Control T1 02 Automatica T1 03 SIAM Journal
  • UR机器人手眼标定

    一 UR机器人位姿表示 默认情况下UR机器人的基坐标系和TCP如下图所示 xff1a 注意这里的TCP位置和坐标系都是在默认TCP配置的情况下 xff0c 默认的TCP配置如下图所示 xff1a 如果用户想要自己设置TCP的位置和坐标系就可
  • 《自抗扰控制技术》——第一遍阅读

    目录 感想摘抄自认为有用的结论第一章 xff1a 剖析经典PID调节器第二章 xff1a 跟踪微分器第三章 xff1a 非光滑反馈的功能和效率第四章 xff1a 扩张状态观测器第五章 xff1a 自抗扰控制器第六章 xff1a 自抗扰控制器
  • ROS Melodic版本下Gazebo的更新与安装

    ROS Melodic自带的Gazebo版本过低 xff0c 建议升级 span class token comment 1 首先 xff0c 查看Gazebo版本 出现的是 gazebo9 及其相关插件 span dpkg l span
  • 《自抗扰控制技术》——第二遍(仿真)

    目录 感想复现书上的仿真图像第一章 xff1a 剖析经典PID调节器第二章 xff1a 跟踪微分器第三章 xff1a 非光滑反馈的功能和效率第四章 xff1a 扩张状态观测器第五章 xff1a 自抗扰控制器第六章 xff1a 自抗扰控制器的
  • 使用MYNT-EYE-D相机跑开源代码VINS_Fusion

    使用MYNT EYE D相机跑开源代码VINS Fusion 这两天刚买了一个小觅智能公司型号为D1000 IR 120 Color的深度相机 xff0c 探索了一下在VINS Fusions上的融合方法 xff0c 折腾了很久才成功 xf
  • 修改docker默认存储路径

    默认情况下 xff0c docker镜像的默认存储路径是 var lib docker xff0c 这相当于直接挂载系统目录下 xff0c 而一般在搭系统时 xff0c 这个区都不会太大 xff0c 所以如果长期使用docker开发应用 x
  • 制作自己的rgb-d数据集

    今天自己用机器人采了一波数据 尝试着用自己采集的RGB D数据来跑slam2的RGB D例程 下面来记录一下 该文章主要是参考这篇博客 xff1a https blog csdn net qq 16481211 article detail
  • ROS中的一些基本概念

    主节点 xff08 master xff09 xff1a 负责节点到节点的消息与通信 用roscore命令来运行主节点 节点只有在需要注册自己信息或向其他节点发送请求时才能访问主节点 节点 xff08 node xff09 xff1a 是指
  • ros实践(一):编写一个自己的功能包

    创建ROS功能包的命令如下 xff1a catkin create pkg 功能包名称 依赖功能包1 依赖功能包2 实践 cd catkin ws src catkin create pkg my first ros pkg std msg
  • 多传感器融合技术(一)

    传感器融合 xff0c 一般可以分为四种 xff1a Early fusion Fusing the raw data xff0c 一般称为前融合 xff08 或数据融合 xff09 xff0c 汇总所有传感器的数据 xff0c 得到一个s
  • 多传感器融合技术(序)

    一 xff0e 概述 多传感器融合 xff08 Multi sensor Fusion MSF xff09 是利用计算机技术 xff0c 将来自多传感器或多源的信息和数据以一定的准则进行自动分析和综合 xff0c 以完成所需的决策和估计而进

随机推荐

  • 如何使用手机端、ipad端来编写博客

    今天收到一位粉丝的提问 xff0c 为此我特意去试了一下 xff0c 相信大家都知道CSDN的移动APP是不能写博客的 xff0c 那么我就想到用网页去试试 xff0c 但是当我搜索CSDN网页进去以后 xff0c 如图 xff1a 解法是
  • 上位机串口数据检验方式(二)——奇偶校验

    奇偶校验这个概念在逻辑设计里面经常会用到 xff0c 但有的人对奇偶校验的理解很混乱 奇偶校验是对数据传输正确性的一种校验方法 在数据传输前附加一位奇校验位 xff0c 用来表示传输的数据中 34 1 34 的个数是奇数还是偶数 xff0c
  • coco2017 数据集获取

    span class token comment 下载命令 span span class token function wget span http images cocodataset org zips train2017 zip sp
  • c++/opencv利用相机位姿估计实现2D图像像素坐标到3D世界坐标的转换

    最近在做自动泊车项目中的车位线检测 xff0c 用到了将图像像素坐标转换为真实世界坐标的过程 xff0c 该过程可以通过世界坐标到图像像素坐标之间的关系进行求解 xff0c 在我的一篇博文中已经详细讲解了它们之间的数学关系 xff0c 不清
  • C语言回调函数的定义和写法

    C语言中的回调函数 xff08 Callback Function xff09 1 定义和使用场合 回调函数是指 使用者自己定义一个函数 xff0c 实现这个函数的程序内容 xff0c 然后把这个函数 xff08 入口地址 xff09 作为
  • MATLAB到底有多厉害

    前言 有人说 xff0c MATLAB除了不会生孩子 xff0c 什么都会 矩阵运算 数据可视化 GUI xff08 用户界面 xff09 设计 甚至是连接其他编程语言 xff0c MATLAB都能轻松实现 xff01 那么 xff0c M
  • 无人机的偏航角,滚动角,俯仰角解释

    1 偏航角 xff08 yaw xff09 简单的定义 xff1a 就是实际航向与计划航向之间的夹角 xff0c 如图所示 深刻的定义 xff1a 机轴 xff08 沿机头方向 xff09 水平投影与地轴的夹角 xff0c 如图所示 或者
  • STM32H743,基于LL库实现adc采样(ADC+DMA+TIM)

    买了一块正点原子的阿波罗H743开发板 xff0c 最近在调试ADC采样 xff0c 由于CubeMx生成的是HAL库格式的代码 xff0c HAL库使用时太占用资源了不喜欢 xff0c 个人比较喜欢LL库 xff0c 这个库和STD库有点
  • 芯片热阻的理解

    基本概念 xff1a Ta xff1a Temperature Ambient 环境温度 Tc xff1a Temperature Case外壳温度 Tj xff1a Temperature Junction节点温度 热阻Rja xff1a
  • HDC1080传感器使用

    HDC1080温湿度传感器的驱动链接 xff08 函数都封装好了 xff0c 稍微改改就能用了 xff09 xff1a https download csdn net download qq 27718231 12656947 没有积分的小
  • 日常所用的耳机接口定义

    耳机插座在我们日常生活中是比较常见的一种电子元件 xff0c 其耳机插座的类型规格也区分有四段式耳机插座 三段式耳机插座等 三段式和四段式耳机的引脚定义如下 xff1a 四段式耳机插座接线的方法 xff0c 其只是比一般三段式的耳机插座增加
  • SX1268 SX1262中文数据手册

    在使用SX1268的时候 xff0c 只有英文数据手册 xff0c 中文手册没有人翻译 xff0c 现提供SX1262的中文手册方便大家在开发SX1268程序时使用 xff0c 这两款芯片使用上几乎一样的 xff0c 只是SX1268支持中
  • 用IO口模拟串口(外部中断+定时器)--附程序附测试结果

    给大家分享一下我用IO口模拟串口的一种方法 xff0c 经测试使用这种方法发送能支持115200波特率 xff0c 接收9600波特率测试没问题 xff0c 接收波特率能否提高受制于用户应用场景是否能允许微妙级别的频繁中断了 xff0c 我
  • gazebo和moveit联合机械臂运动规划仿真(包含realsense视觉点云)

    1 gazebo仿真环境搭建 最终的场景 xff1a 使用的机械臂 xff1a AR3工业六轴机械臂 系统环境 xff1a ubuntu18 43 ros melodic 注 xff1a 机械臂description包在github上下载的
  • 串口接收中断+空闲中断实现多个数据帧接收与处理

    在一些应用场合中 xff0c 要求串口接收的数据不能丢同时又方便帧解析 xff0c 我之前的做法是定义一个二维数组data n m m的大小要大于最大帧长度 xff0c n用来指定帧缓存个数 xff0c 每次接收到一帧数据二维数组下标n加1
  • 使用STM32L4系列SPI字节收发异常原因查找

    使用STM32F1 F4 xff0c L1等系列MCU的SPI时 xff0c 不用hal库自带的收发函数时我们会用下面这种收发函数 xff1a 收发一个字节 uint8 t SPI Rw Byte uint8 t data while HA
  • Qt学习总结之QMessageBox

    QMessageBox主要用来通知用户或者请求用户提问和接收应答一个模态对话框 一 对话框的构成 图标是有标准图标的 xff0c 可以直接调用 我们声明的消息框 xff0c 初始状态都是模态的 阻塞程序 xff0c 这里就不演示了 xff0
  • 嵌入式MCU工程师毕业1年,接下来要学的东西有:

    刚毕业 nbsp 1 nbsp 年多了 接下来感觉有好多东西要学习 一 单片机方面的 比如 COSii和 COSiii 还有FreeRTOS等微型操作系统 除了操作系统之外 还要学习诸如emwin界面设计 还想搞一下Wifi 以太网 蓝牙B
  • RT-THREAD 线程同步与通讯:信号量、互斥量、事件、邮箱、队列、信号

    线程同步包括 xff1a 信号量 互斥量 事件 线程通讯包括 xff1a 邮箱 队列 信号 rt thread源文件说明 xff1a ipc c xff1a 信号量 xff08 sem xff09 互斥信号 xff08 mutex xff0
  • easyflash 教程

    可以看easyflash下的docs文档 xff0c 万一你们手头没有文档呢 这里我就直接黏贴了 API 说明文档 xff1a docs zh api md 通用移植文档 xff1a docs zh port md EasyFlash AP