EFM8SB20 boot_startup 启动文件分析

2024-06-12 00:58

本文主要是介绍EFM8SB20 boot_startup 启动文件分析,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

$NOMOD51

$NOMOD51

$INCLUDE (REG932.INC)

解释:

$NOMOD51,这一指令功能是使A51不识别8051的所有预定义符号。

$INCLUDE (REG932.INC),这一指令功能使用用户自定义的符号文件。

这两条语句必须配合使用,使用了$INCLUDE (REG932.INC),就必须使用$NOMOD51,否则回因多重定义而产生错误。

;

; Copyright (c) 2015 by Silicon Laboratories Inc. All rights reserved.

;

; http://developer.silabs.com/legal/version/v11/Silicon_Labs_Software_License_Agreement.txt

;

 

#include "efm8_device.h"

 

#define BL_SIGNATURE 0xA5

 

NAME BOOT_STARTUP

格式: NAME 模块名

说明: NAME 伪指令用来定义当前的程序模块, 应放在该模块全部伪指令及指令

代码的前面。若无 NAME 伪指令,则源文件名作为系统对其设置的名称,但不

得以数字开始。

PUBLIC boot_otp

PUBLIC ?C_STARTUP

格式: PUBLIC 符号名列表

PUBLIC 伪指令允许当前被汇编模块的符号为外部公用。符号名对于一个

时,用逗号(,)分开。 寄存器或段符号名(通过 SEGMENT 伪指令声明了的)不

可以规定为 PUBLIC。

EXTRN CODE (?C_START)

格式: ERTRN [段类型(符号名列表) ],。。。

说明: EXTRN 伪指令列出当前模块中要访问的在其他模块中定义了的符号。这个

伪指令可以出现在程序的任何地方。外部符号必须符合与上每一个符号相关的

段类型。(这些类型是 CODE,XDATA,DATA,IDATA,BIT 及 NUMBER,即一个无类型的

符号)

 

; Declare and locate all memory segments used by the bootloader

?BL_EXTRA SEGMENT CODE AT BL_LIMIT_ADDRESS

?BL_START SEGMENT CODE AT BL_START_ADDRESS

?BL_RSVD SEGMENT CODE AT BL_LOCK_ADDRESS-2

?BL_STACK SEGMENT IDATA

格式: 段名 SEGMENT 段类型

说明: SEGMENT 伪指令说明一个段。 段就是一块程序代码或数据存储器。

允许使用的段类型为:

●CODE 代码空间

●DATA 可以直接寻址的内部数据空间

●XDATA 外部数据空间

●IDATA 可以间接寻址的整个内部数据空间

●BIT 位空间

; Create idata segment for stack

RSEG ?BL_STACK

DS 16

格式: 标号 DS 表达式

说明: DS 伪指令以字节为单位保留空间。可以用于除 BIT 类型段以外的任何段。

 

#if (BL_LIMIT_ADDRESS != BL_START_ADDRESS)

; Create code segment for firmware that doesn't fit in security page

RSEG ?BL_EXTRA

boot_extra:

LJMP ?C_STARTUP

#endif

 

; Bootloader entry point (boot_vector)

RSEG ?BL_START

?C_STARTUP:

USING 0

 

; Start bootloader if reset vector is not programmed

MOV DPTR,#00H

将数据指针指向RAM 地址 00H

CLR A

将A清0

MOVC A,@A+DPTR

读取地址00H数据到A,@A+DPTR 指的是DPTR上偏移地址 A ,A= 0,所以地址还是 00H

CPL A

CPL即Converse Position Logical,直接寻址位取反,是一个逻辑运算指令。这是单片机指令,微机汇编语言中没这个指令。使用:CPL A :将累加器A的内容按位逻辑取反,不影响相关标志。

JZ boot_start

JZ(Jump if Zero)是此前的运算结果为0时跳转。

 

; Start bootloader if software reset and R0 == signature

MOV A,RSTSRC

CJNE A,#010H,pin_test

A中的值是否等于010H,如不相等即跳到pin_test标号所指程序位置,如果相等,程序执行下一行。

MOV A,R0

XRL A,#BL_SIGNATURE

JZ boot_start

 

; Start the application by jumping to the reset vector

app_start:

LJMP 00H

 

; Start bootloader if POR|Pin reset and boot pin held low

pin_test:

ANL A,#03H ; A = RSTSRC

ANL 位与运算

ORL 位或运算

JZ app_start ; POR or PINR only

MOV R0,#(BL_PIN_LOW_CYCLES / 7)

?C0001: ; deglitch loop

JB BL_START_PIN,app_start ; +3

指令JA表示 CF=0 且ZF=0 即A>B转移。

指令JB表示 CF=1 且ZF=0 即A <B转移。

DJNZ R0,?C0001 ; +4 = 7 cycles per loop

 

 

; Setup the stack and jump to the bootloader

boot_start:

MOV SP, #?BL_STACK-1

LJMP ?C_START

 

; Reserved Bytes (bl_revision, bl_signature, lock_byte)

RSEG ?BL_RSVD

boot_rev:

DB BL_REVISION

DB是伪指令,告诉编译软件,DB后面的是数据,表格

用于MOVC指令查表用的

boot_otp:

DB BL_SIGNATURE

lock_byte:

DB 0xFF

 

END

 

 

这篇关于EFM8SB20 boot_startup 启动文件分析的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1052743

相关文章

性能分析之MySQL索引实战案例

文章目录 一、前言二、准备三、MySQL索引优化四、MySQL 索引知识回顾五、总结 一、前言 在上一讲性能工具之 JProfiler 简单登录案例分析实战中已经发现SQL没有建立索引问题,本文将一起从代码层去分析为什么没有建立索引? 开源ERP项目地址:https://gitee.com/jishenghua/JSH_ERP 二、准备 打开IDEA找到登录请求资源路径位置

MySQL数据库宕机,启动不起来,教你一招搞定!

作者介绍:老苏,10余年DBA工作运维经验,擅长Oracle、MySQL、PG、Mongodb数据库运维(如安装迁移,性能优化、故障应急处理等)公众号:老苏畅谈运维欢迎关注本人公众号,更多精彩与您分享。 MySQL数据库宕机,数据页损坏问题,启动不起来,该如何排查和解决,本文将为你说明具体的排查过程。 查看MySQL error日志 查看 MySQL error日志,排查哪个表(表空间

springboot3打包成war包,用tomcat8启动

1、在pom中,将打包类型改为war <packaging>war</packaging> 2、pom中排除SpringBoot内置的Tomcat容器并添加Tomcat依赖,用于编译和测试,         *依赖时一定设置 scope 为 provided (相当于 tomcat 依赖只在本地运行和测试的时候有效,         打包的时候会排除这个依赖)<scope>provided

内核启动时减少log的方式

内核引导选项 内核引导选项大体上可以分为两类:一类与设备无关、另一类与设备有关。与设备有关的引导选项多如牛毛,需要你自己阅读内核中的相应驱动程序源码以获取其能够接受的引导选项。比如,如果你想知道可以向 AHA1542 SCSI 驱动程序传递哪些引导选项,那么就查看 drivers/scsi/aha1542.c 文件,一般在前面 100 行注释里就可以找到所接受的引导选项说明。大多数选项是通过"_

用命令行的方式启动.netcore webapi

用命令行的方式启动.netcore web项目 进入指定的项目文件夹,比如我发布后的代码放在下面文件夹中 在此地址栏中输入“cmd”,打开命令提示符,进入到发布代码目录 命令行启动.netcore项目的命令为:  dotnet 项目启动文件.dll --urls="http://*:对外端口" --ip="本机ip" --port=项目内部端口 例: dotnet Imagine.M

SWAP作物生长模型安装教程、数据制备、敏感性分析、气候变化影响、R模型敏感性分析与贝叶斯优化、Fortran源代码分析、气候数据降尺度与变化影响分析

查看原文>>>全流程SWAP农业模型数据制备、敏感性分析及气候变化影响实践技术应用 SWAP模型是由荷兰瓦赫宁根大学开发的先进农作物模型,它综合考虑了土壤-水分-大气以及植被间的相互作用;是一种描述作物生长过程的一种机理性作物生长模型。它不但运用Richard方程,使其能够精确的模拟土壤中水分的运动,而且耦合了WOFOST作物模型使作物的生长描述更为科学。 本文让更多的科研人员和农业工作者

MOLE 2.5 分析分子通道和孔隙

软件介绍 生物大分子通道和孔隙在生物学中发挥着重要作用,例如在分子识别和酶底物特异性方面。 我们介绍了一种名为 MOLE 2.5 的高级软件工具,该工具旨在分析分子通道和孔隙。 与其他可用软件工具的基准测试表明,MOLE 2.5 相比更快、更强大、功能更丰富。作为一项新功能,MOLE 2.5 可以估算已识别通道的物理化学性质。 软件下载 https://pan.quark.cn/s/57

Linux服务器Java启动脚本

Linux服务器Java启动脚本 1、初版2、优化版本3、常用脚本仓库 本文章介绍了如何在Linux服务器上执行Java并启动jar包, 通常我们会使用nohup直接启动,但是还是需要手动停止然后再次启动, 那如何更优雅的在服务器上启动jar包呢,让我们一起探讨一下吧。 1、初版 第一个版本是常用的做法,直接使用nohup后台启动jar包, 并将日志输出到当前文件夹n

衡石分析平台使用手册-单机安装及启动

单机安装及启动​ 本文讲述如何在单机环境下进行 HENGSHI SENSE 安装的操作过程。 在安装前请确认网络环境,如果是隔离环境,无法连接互联网时,请先按照 离线环境安装依赖的指导进行依赖包的安装,然后按照本文的指导继续操作。如果网络环境可以连接互联网,请直接按照本文的指导进行安装。 准备工作​ 请参考安装环境文档准备安装环境。 配置用户与安装目录。 在操作前请检查您是否有 sud

SpringBoot项目是如何启动

启动步骤 概念 运行main方法,初始化SpringApplication 从spring.factories读取listener ApplicationContentInitializer运行run方法读取环境变量,配置信息创建SpringApplication上下文预初始化上下文,将启动类作为配置类进行读取调用 refresh 加载 IOC容器,加载所有的自动配置类,创建容器在这个过程