BLHeli_S 代码分析---BLHeli.asm入口函数pgm_start分析

BLHeli_S 代码分析—BLHeli.asm入口函数pgm_start分析


pgm_start 代码

代码中数据变量定义

Bit_Access:					DS	1Flash_Key_1:				DS	1	; Flash key one
Flash_Key_2:				DS	1	; Flash key two

AIKON_Boltlite_30A.inc文件中定义的变量

LOCK_BYTE_ADDRESS_16K	EQU	3FFFh	; Address of lock byte if 16k flash size
LOCK_BYTE_ADDRESS_8K	EQU	1FFFh	; Address of lock byte if 8k flash size

SiLab汇编指令

助记符指令说明字节时钟
MOV A,#data立即数传送到累加器22
MOV A,direct直接寻址字节传送到累加器22
jb bit,rel直接地址位为1则跳转33/4
jz rel累加器为零跳转22/3
inc direct直接地址单元加121
dec direct直接地址单元减121

源代码

pgm_start:; 将flash键初始化为无效值mov	Flash_Key_1, #0mov	Flash_Key_2, #0;  检查flash锁字节mov	A, RSTSRC			jb	ACC.6, ($+6)		;  检查flash访问错误是否复位  如果寄存器RSTSRC.6为1 表示flash错误  跳转到下下下行代码mov	Bit_Access, #0		;  这不是第一次尝试inc	Bit_Access  		; Bit_Access 变量+1mov	DPTR, #LOCK_BYTE_ADDRESS_16K	; 第一次尝试是16k闪存大小mov	A, Bit_Accessdec	Ajz	lock_byte_testmov	DPTR, #LOCK_BYTE_ADDRESS_8K	;  第二次尝试是8k闪存大小dec	Ajz	lock_byte_test

代码理解

  • 初始化变量Flash_Key_1Flash_Key_2为0
  • 检查Flash读写错误标志位是否为1,为1则跳过六条指令到mov DPTR, #LOCK_BYTE_ADDRESS_8K否则继续执行
  • 初始化变量Bit_Access为0 — 理解为
  • 将16K大小的Flash地址装载到 DPTR
  • 将变量Bit_Access装载到累加器,累加器A进行 dec 减 1 操作,判断其为0则跳转到lock_byte_test函数
  • 将8K大小的Flash地址装载到 DPTR
  • 累加器A进行 dec 减 1 操作,判断其为0则跳转到lock_byte_test函数

lock_byte_test代码

lock_byte_test:movc A, @A+DPTR			; 读锁字节inc	A				jz	lock_byte_ok		; 如果锁字节为0xFF,则开始执行代码IF ONE_S_CAPABLE == 0		mov	RSTSRC, #16h			; 生成硬件复位和设置丢失的时钟和VDD监视器
ELSEmov	RSTSRC, #14h			; 生成硬件复位并禁用VDD监视器
ENDIF

上文中 DPTR 寄存器已将装载相应地址,将地址送到累加器A ,然后进行地址+1 操作,判断是否超出Flash。

附录


RSTSRC(复位源)寄存器

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/628021.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

运筹说 第56期 | 整数规划的数学模型割平面法

前几章讨论过的线性规划问题的一个共同特点是:最优解的取值可以是分数或者小数。然而,在许多实际问题中,决策者要求最优解必须是整数,例如公交车的车辆数、员工的人数、机器的台数、产品的件数等。那么,我们能否将得到…

【Spring 篇】走进SpringMVC的世界:舞动Web的激情

嗨,亲爱的小白们!欢迎来到这篇关于SpringMVC的博客,让我们一起探索这个舞动Web的框架,感受它带来的激情和便利。在这个世界里,我们将学到SpringMVC的概述、开发步骤以及如何快速入门,一切都是如此的令人兴奋…

6 - 常用工具类

目录 1. Scanner 扫描控制台输入 1.1 扫描控制台输入 1)nextLine 2)nextInt 3)其他方法 1.2 扫描文件 1.3 查找匹配项 2. Arrays 数组工具 2.1 创建数组 1)copyOf 2)copyOfRange 3)fill 2.2 比…

解决msvcr110.dll文件丢失的方法,每种方法的优缺点

当在Windows上运行依赖此msvcr110.dll的软件时,如果该文件缺失或损坏,你可能会看到一个错误消息,如:“由于找不到msvcr110.dll无法继续执行”,说明系统找不到msvcr110.dll。以下就和大家解决msvcr110.dll文件丢失的方法…

华为网络设备安全基线配置指南

1 帐号管理、认证授权 1.1 账号管理 1.1.1 ELK-Huawei-01-01-01 编号: ELK-Huawei-01-01-01 名称: 无效帐户清理 实施目的: 删除与设备运行、维护等工作无关的账号 问题影响: 账号混淆,权限不明确&#…

C#:单例,闭包,委托与事件,线程,Parallel,Params,扩展方法,接口与抽象类

单例模式 在对泛型的约束中,最常使用的关键字有where 和 new。 其中where关键字是约束所使用的泛型,该泛型必须是where后面的类,或者继承自该类。 new()说明所使用的泛型,必须具有无参构造函数,这是为了能够正确的初始…

系统添加深色模式实现方案

业务需求,夜间看系统太刺眼,要求添加夜间模式 效果如下: 依赖如下: 参考了官方解决方案,尝试后没有有效的解决. 官方解决方案 后续打算换框架,发现antdesign pro vue版本的暗黑模式禁用了. ant design pro 预览地址 思路: 引入andesign 暗黑模式的样式 , 手动修改自定义类…

在Linux上使用PHP-FPM与Nginx实现高效的HTTP处理

当谈到高效的HTTP处理时,PHP-FPM(FastCGI进程管理器)与Nginx的结合是许多web开发者的首选。这种组合提供了出色的性能、可扩展性和稳定性,尤其适用于高流量的网站和应用程序。 1. 为什么选择PHP-FPM与Nginx? 性能优化…

C++I/O流——(3)文件输入/输出(第一节)

归纳编程学习的感悟, 记录奋斗路上的点滴, 希望能帮到一样刻苦的你! 如有不足欢迎指正! 共同学习交流! 🌎欢迎各位→点赞 👍 收藏⭐ 留言​📝 含泪播种的人一定能含笑收获&#xff…

【python入门】day27: 模拟高铁售票系统

界面 代码 #-*- coding:utf-8 -*- import prettytable as pt#---------导入漂亮表格 import os.path filename ticket.txt#更新座位状态 def update(row_num):#------更新购票状态with open(filename,w,encodingutf-8) as wfile:for i in range(row_num):lst1 [f{i1},有票,有…

java自动化将用例和截图一起执行测试放入world中直接生成测试报告【搬代码】

1.首先我们得用例写好之后放入文档中,把不用的案例类型、前置条件去掉之后,如图: 放到桌面后,先看执行结果: 首先,我们先创建一个时间,这个时间主要是给图片创建名称,并且要在插入world中使用该时间去查找对应的图片名称,且该图片名称是唯一值 //创建时间public st…

原生js监听当前元素之外的点击事件

监听当前元素之外的点击事件 一、具体场景二、具体实现三、完整代码 一、具体场景 当我们需要实现点击其他位置关闭弹窗的时候,就需要监听当前元素之外的点击事件。 二、具体实现 实现思路:监听整个dom的点击事件,判断当前元素是否包含点击…

数据库重点简答题

文章目录(持续更新) 数据库重点简答题📣一、SQL语言的作用?📣二、说一下你对ER图的认识?📣三、数据库中的三个模型?📣四、数据库基本表和视图的区别和联系?&a…

Qt 信号和槽机制

一. 简介 在Qt中使用信号和槽机制来完成对象之间的协同操作。简单来说,信号和槽都是函数,比如按下窗口上的一个按钮后想要弹出一个对话框,那么就可以将这个按钮的单击信号和我们定义的槽关联起来,在这个槽中可以创建一个对话框&am…

Linux相关命令使用

一、Vi与Vim编辑器 1、正常模式 以vim打开一个档案就直接进入一般模式了,在这个模式中,你可以使用【上下左右】移动光标,可以使用【删除字符】或【删除整行】来处理档案内容,也可以使用【复制、粘贴】来处理你的文件数据。 2、…

训练DAMO-YOLO(damoyolo_tinynasL25_S.py)

文章目录 参考链接1 准备数据1.1 转为COCO格式1.2 指明数据路径 2 设置训练配置文件,在configs/damoyolo_tinynasL25_S.py进行如下两块修改2.1 关于训练参数的设置2.2 根据自己数据集设置 3 开始训练4 调用tools/eval.py进行测试5 训练时可能遇到的报错5.1 RuntimeE…

前端JS实现全屏和退出全屏的效果

全屏效果想必我们都很清楚把,平时追剧看电视剧什么都会使用全屏方便我们看,我们键盘的第一个键esc可以退出全屏,那么我们如何用js实现全屏的办法呢? 设置全屏 Document.requestFullscreen(),该方法用于异步请求使元素…

详解Matlab深度学习进行波形分割

🔗 运行环境:Matlab 🚩 撰写作者:左手の明天 🥇 精选专栏:《python》 🔥 推荐专栏:《算法研究》 🔐#### 防伪水印——左手の明天 ####🔐 💗 大家…

【DB】Redis缓存优化策略之,缓存预热与缓存清除

文章目录 1、什么是缓存优化?2、缓存预热3、缓存清除/更新4、reids缓存预热与清除5、总结 1、什么是缓存优化? 缓存是一种数据存储技术,用于存储经常访问的数据,以便在需要时快速获取。通过缓存数据,可以减少数据的访…

mysql进阶-深度为2的B+Tree树能存储多少行数据?

目录 1. 非叶子节点计算 2. 叶子节点存储的是完整的数据。 3. 整体计算 BTree树需要计算有叶子节点和非叶子节点。 假设一张商品表的数据结构如下: CREATE TABLE t_good (good_id int(12) NOT NULL AUTO_INCREMENT COMMENT 主键,good_name varchar(20) DEFAULT…