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

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


pgm_start 代码

代码中数据变量定义

Bit_Access:					DS	1

Flash_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, #0
	mov	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 变量+1
	mov	DPTR, #LOCK_BYTE_ADDRESS_16K	; 第一次尝试是16k闪存大小
	mov	A, Bit_Access
	dec	A
	jz	lock_byte_test

	mov	DPTR, #LOCK_BYTE_ADDRESS_8K	;  第二次尝试是8k闪存大小
	dec	A
	jz	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监视器
ELSE
	mov	RSTSRC, #14h			; 生成硬件复位并禁用VDD监视器
ENDIF

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

附录


RSTSRC(复位源)寄存器

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

苹果最新系统iOS 17的调试和适配方法 - Xcode 14.3.1 真机调试指南

最近苹果发布了iOS 17作为其最新操作系统版本,作为开发者,你可能需要了解如何在Xcode 14.3.1中进行真机调试和适配。本文将为你详细介绍步骤和注意事项。 I. 检查Xcode版本 在开始之前,确保你已经安装了Xcode 14.3.1或更高版本。你可以在Xco…

APP广告变现设置合理的广告频次的原因

过多的广告展示可能会导致用户体验下降,而过少则可能会降低广告收入,我们需要的是找到其中的平衡点。 广告频次限制可以通过多种方式实现,比如限制某段时间内广告出现的次数、限制某个用户在一定时间内看到广告的次数等。在实践中&#xff0…

SpringBoot+SSM项目实战 苍穹外卖(12) Apache POI

继续上一节的内容,本节是苍穹外卖后端开发的最后一节,本节学习Apache POI,完成工作台、数据导出功能。 目录 工作台Apache POI入门案例 导出运营数据Excel报表 工作台 工作台是系统运营的数据看板,并提供快捷操作入口&#xff0c…

【目标检测实验系列】YOLOv5模型改进:融入坐标注意力机制CA,多维度关注数据特征,高效涨点!(内含源代码,超详细改进代码流程)

自我介绍:本人硕士期间全程放养,目前成果:一篇北大核心CSCD录用,两篇中科院三区已见刊,一篇中科院四区在投。如何找创新点,如何放养过程厚积薄发,如何写中英论文,找期刊等等。本人后续会以自己实战经验详细…

免费开源OCR 软件Umi-OCR

Umi-OCR 是一款免费、开源、可批量的离线 OCR 软件,基于 PaddleOCR,适用于 Windows10/11 平台 免费:本项目所有代码开源,完全免费。方便:解压即用,离线运行,无需网络。高效:自带高效…

07 整合SSM的快速理解

1.1 第一问:SSM整合需要几个IoC容器? 两个容器 本质上说,整合就是将三层架构和框架核心API组件交给SpringIoC容器管理! 一个容器可能就够了,但是我们常见的操作是创建两个IoC容器(web容器和root容器&…

C++ 设计模式之桥接模式

【声明】本题目来源于卡码网(题目页面 (kamacoder.com)) 【提示:如果不想看文字介绍,可以直接跳转到C编码部分】 【简介】什么是桥接模式 桥接模式(Bridge Pattern)是⼀种结构型设计模式,它的U…

不是人才用不起,而是AI巡检更有性价比!

在许多行业中,如煤炭、电力、化工等,安全生产是至关重要的。这就需要通过巡检,对设备运行状态进行实时监测,及时发现并处理潜在的安全隐患,从而降低事故发生的概率。但是传统的巡检方式通常依赖于人工进行,…

Java项目:121SSM记账管理系统

博主主页:Java旅途 简介:分享计算机知识、学习路线、系统源码及教程 文末获取源码 一、项目介绍 记账管理系统基于SpringSpringMVCMybatis开发,系统主要功能如下: 收入项管理 支出项管理 收入方式管理 支出方式管理 添加收入…

申泰勇教练的独家人物化身系列即将登陆 The Sandbox

申泰勇(Shin Tae-yong)教练是足球界的传奇人物,他来到 The Sandbox,推出了自己的专属人物化身系列。作为前 K 联赛中场球员和印尼队取得历史性成就的幕后教练,他的传奇经历现在已经影响到了虚拟世界。 向过去、现在和未…

Linux第29步_安装“Notepad++”软件

STM32CubeProgrammer脚本文件的后缀为“.tsv”,ST公司官方也叫做FlashLayout。在烧写“TF-A固件”之前,我们需要用“Notepad”软件打开“后缀为.tsv”的脚本文件,根据需求决定哪些文件需要更新,设置好这个脚本文件。 在后期使用S…

AnyText多语言文字生成与编辑

AnyText图文融合 近年来,随着AIGC的爆火,图片生成技术得到飞速发展,当前AI生成的图片已达到真假难辨的高保真度。不过,当合成图片中出现文字内容时,仍能够使AI露出马脚,因为当前主流方法尚无法在图片中生成…

一个程序员“玩”出来的网站:每月成本仅 350 元,如今赚了 16.4 万元

很难想象:一个每月运行成本不到 50 美元(约人民币 358 元)的网站. 是如何做到收入 2.3 万美元(约人民币 16.4 万元)的? ** 如果你也对网站开发感兴趣? ** 首先,这个网站只有创始…

【动态规划】【滑动窗口】【C++算法】 629K 个逆序对数组

作者推荐 【矩阵快速幂】封装类及测试用例及样例 本文涉及知识点 动态规划 C算法&#xff1a;滑动窗口总结 LeetCode629: K 个逆序对数组 逆序对的定义如下&#xff1a;对于数组 nums 的第 i 个和第 j 个元素&#xff0c;如果满足 0 < i < j < nums.length 且 nu…

【架构】docker实现集群主从扩容【案例3/4】

实现集群主从扩容 当整个集群扛不住流量的情况时&#xff0c;需要给集群扩容增加设备&#xff0c;由3主3从&#xff0c;扩为4主4从。实现&#xff1a; 示意图如下&#xff1a; 第一步&#xff1a;新创建两个节点&#xff08;redis-node-7&#xff0c;端口6387和 redis-node…

「云渲染科普」3dmax vray动画渲染参数如何设置

动画渲染一直都是占用时间最多的地方&#xff0c;动画帧数通常 1 秒在 25 帧或者以上&#xff0c;电脑通常需要对每一帧的画面分批渲染&#xff0c;通常本地电脑由于配置上的限制&#xff0c;往往无法在短时间内快速的完成渲染任务。这时“云渲染”则成为了动画渲染的主要方案&…

USB Cable导致连接识别不良

2根USB线&#xff0c;连接USB2RS232芯片&#xff0c;有根线能够识别&#xff0c;另外一根不能识别。 好的线识别如下&#xff1a; 另外一根就不能识别

josef 约瑟抗干扰中间继电器 UEG/F-4H 四常开 导轨安装

系列型号 UEG/F-2H2D抗干扰中间继电器;UEG/F-1H1D抗干扰中间继电器; UEG/F-10H-L抗干扰中间继电器;UEG/F-10H-L2抗干扰中间继电器; UEG/F-10HS抗干扰中间继电器;UEG/F-2DPDT抗干扰中间继电器; UEG/F-4DPDT抗干扰中间继电器;UEG/F-8DPDT抗干扰中间继电器; UEG/F-2H抗干扰中间继…

(六)深入理解Bluez协议栈之“GATT Client Profile”

前言: 本章节我们继续介绍GATT Client Profile的实现,参考的程序是tools\btgatt-client.c,需要注意的一点,在./configure时,需要添加 --enable-test --enable-testing才会编译该c文件,编译完成后,生成的可执行程序为btgatt-client。本文主要以btgatt-client运行时可能会…

【Python数据可视化】matplotlib之绘制常用图形:折线图、柱状图(条形图)、饼图和直方图

文章传送门 Python 数据可视化matplotlib之绘制常用图形&#xff1a;折线图、柱状图&#xff08;条形图&#xff09;、饼图和直方图matplotlib之设置坐标&#xff1a;添加坐标轴名字、设置坐标范围、设置主次刻度、坐标轴文字旋转并标出坐标值matplotlib之增加图形内容&#x…
最新文章