大一网站开发项目答辩WordPress主题文本

news/2025/9/27 23:11:09/文章来源:
大一网站开发项目答辩,WordPress主题文本,公司域名备案,中信建设证券有限责任公司1. 前言 如图1所示#xff0c;R14是连接寄存器#xff08;Link Register#xff09;#xff0c;在汇编指令中通常也写为LR#xff0c;用于存储函数调用和异常等的返回信息#xff0c;复位时#xff0c;默认值为0xFFFFFFFF#xff1b; 图1 Core register R15是程序计数…1. 前言 如图1所示R14是连接寄存器Link Register在汇编指令中通常也写为LR用于存储函数调用和异常等的返回信息复位时默认值为0xFFFFFFFF 图1 Core register  R15是程序计数器PCProgram Counter)复位后初始值为Vector Table(中断向量表的首地址加上0x04Reset向量其bit[0的值为必须1并会加载到EPSR(Execution Program Status Register)的T字段Thumb state bit表示处于Thumb状态。ARM-v7只支持在Thumb下执行指令在T字段为0的情况下执行任何指令都将导致错误或锁定。 如下所示向量表的首地址存放的是MSP的初始地址偏移四字节后即是Reset_Handler也就是说代码复位后是从Reset_Handler开始运行的。 const pFunc __VECTOR_TABLE[256] __VECTOR_TABLE_ATTRIBUTE {(pFunc)(__INITIAL_SP), /* Initial Stack Pointer */Reset_Handler, /* Reset Handler */NMI_Handler, /* -14 NMI Handler */HardFault_Handler, /* -13 Hard Fault Handler */MemManage_Handler, /* -12 MPU Fault Handler */BusFault_Handler, /* -11 Bus Fault Handler */UsageFault_Handler, /* -10 Usage Fault Handler */0, /* Reserved */0, /* Reserved */0, /* Reserved */0, /* Reserved */SVC_Handler, /* -5 SVCall Handler */DebugMon_Handler, /* -4 Debug Monitor Handler */0, /* Reserved */PendSV_Handler, /* -2 PendSV Handler */SysTick_Handler, /* -1 SysTick Handler *//* Interrupts */Interrupt0_Handler, /* 0 Interrupt 0 */Interrupt1_Handler, /* 1 Interrupt 1 */Interrupt2_Handler, /* 2 Interrupt 2 */Interrupt3_Handler, /* 3 Interrupt 3 */Interrupt4_Handler, /* 4 Interrupt 4 */Interrupt5_Handler, /* 5 Interrupt 5 */Interrupt6_Handler, /* 6 Interrupt 6 */Interrupt7_Handler, /* 7 Interrupt 7 */Interrupt8_Handler, /* 8 Interrupt 8 */Interrupt9_Handler /* 9 Interrupt 9 *//* Interrupts 10 .. 255 are left out */ }; 对于PC来说其相关的表达式或标签label)指示着一条指令或数据的地址目标位置如果PC当前位置到目标位置的偏移量大的过分编译器会报错。由于ARM-v7采用了指令流水线技术所以读PC的返回值是当前指令地址4且返回值的LSB为0(Thumb指令至少半字对齐)例如 0x1000: MOV R0, PC ; R0 0x1004 具体来说 ①对于B、BL、CBNZ和CBZ指令PC的值是当前指令地址加上4字节  ②对于其他使用label的指令来说PC的值是当前指令地址加上4字节且指令执行后PC的值的bit[1]会被强制清零以保证其值按字长word)对齐。        此外向PC中写数据就会引起一次程序分支不更新LR寄存器但无论是直接写PC还是使用分支转移指令都必须保证加载到PC的值的LSB为1即bit[0]为1用以表明是在Thumb状态下执行 2.相关汇编指令 2.1 PUSH/POP PUSH和POP指令适用于寄存器的压栈和出栈且必须是满减栈full descending stack: 表1 PUSH/POP指令 PUSH condition  {reglist}reglist中不可包含PC(独一无二的PC不允许有影子的存在说一不二)POP condition  {reglist}reglist中不可同时包含PC和LR(既生瑜何生亮) 其中: ①conditon为条件码可选 ②reglist为非空寄存器列表列表元素可以是寄存器或寄存器子列表range如R0-R2表示R0,R1,R2)如果包含多个寄存器或寄存器子列表则以逗号分隔 ③reglist不可包含SP(医者不能自医啊);        ④当 reglist中存在PC时则在POP指令完成时就会跳转到PC所对应的地址执行(该地址必须半字对齐)同时PC对应出栈值的bit[0]会用来更新APSR的T字段T-bit)且该bit的值必须为1以指示Thumb状态此外如果该POP指令带有条件码则必须是IT指令块的最后一条指令。 通常来说PUSH和POP会成对使用且 在PUSH和POP的过程中SP的值会按堆栈的使用规则自动调整。例如如满减栈情况下PUSH的同时SP自减POP的同时SP递增 注意在寄存器列表中不管寄存器序列如何汇编器都将把它们升序排序优先 PUSH序号大的寄存器优先 POP序号小的寄存器例如 PUSH {R0,R4-R7} ; Push R0,R4,R5,R6,R7 onto the stack PUSH {R2,LR} ; Push R2 and the link-register onto the stack POP {R0,R6,PC} ; Pop r0,r6 and PC from the stack, then branch to the new PC. 这样就意味着R0最后入栈最先出栈这应该也利于R0的频繁使用吧。 值得一提的是STMDB和LDMIA在以R13SP)为目的寄存器时可以达到与PUSH/POP相同的效果 STMDB SP!, {R0-R3, LR} ;等效于 PUSH {R0-R3, LR} LDMIA SP!, {R0-R3, PC} ;等效于 PUSH {R0-R3, PC} 2.2 分支branch指令 表2 分支指令branch instrctions 指令跳转范围说明B label-16MB ~ 16MB立即跳转通过立即数或表达式Bcond lable (IT指令块外)-1MB ~ 1MB立即跳转Bcond lable (IT指令块内)-16MB ~ 16MB立即跳转BL{cond} label-16MB ~ 16MB立即跳转同时将返回地址存储到LRBX{cond} RmRm中的任意值通过寄存器间接跳转BLX{cond} RmRm中的任意值通过寄存器间接跳转同时将返回地址存储到LR 其中  ①由于PC的值为当前指令地址4着也就意味着向前跳转的范围多了4个字节 ②label是一个PC相关的表达式表示要跳转到的地址 ③ BX 和 BLX中Rm寄存器的值为跳转的目的地址bit[0]指示跳转后CPU要进入的状态且如前文所述该值的bit[0]必须为1生成地址时会忽略该bit置0如果BL和BLX指令中Rm的bit[0]不为1则会产生一个用法错误异常(UsageFault exception) ④BL和BLX指令会将当前下一条指令的地址存储到LR中以提供返回信息 ⑤Bcond lable是唯一在IT指令块内外都可以使用的条件分支指令对于其余的分支指令在IT指令块内部必须是带条件的IT指令块内部的指令都是条件指令在IT指令块外则必须是无条件的 ⑥在IT指令块内部使用分支指令时则该分支指令必须时IT指令块的最后一条指令 ⑦BLX指令中不可使用PC ⑧使用 .W后缀可以拓展分支跳转范围 3.通过PC控制程序执行 3.1通过 MOV指令 MOV PC, Rn ; branch to the address indicated in Rn 当使用MOV指令将Rn中存储的值赋给PC时该值的bit[0]将会被忽略并跳转到Rn给出的地址中。此外使用MOV指令对PC进行赋值时MOV后不可使用S条件后缀且Rn必须是一个没有移位的寄存器。虽然MOV指令可实现分支跳转但BX或BLX指令更专业移植性也更好。 3.2 通过分支指令        B loopA ; Branch to loopA BLE ng ; Conditionally branch to label ng B.W target ; Branch to target within 16MB range BEQ target ; Conditionally branch to target BEQ.W target; Conditionally branch to target within 1MB BL funC ; Branch with link (Call) to function funC, return address stored in LR BX LR ; Return from function call BXNE R0 ; Conditionally branch to address stored in R0 BLX R0 ; Branch with link and exchange (Call) to a address stored in R0. 3.3 通过LDR指令         LDR PC, [Rn] ;转移地址存储在 Rn 所指向的存储器中 3.4 通过POP指令 既然LR在子程序调用过程中的唯一用处就是存储返回地址那就直接绕过LR将返回地址传给PC返回子程序调用处例如 push {r0-r3, lr} ;子程序入口 pop {r0-r3, pc} ;子程序出口 4. PC跳转的应用 4.1 程序加载后跳转到resetHandler /**************************************************************************************************Local Functions**************************************************************************************************/uint32 resetHandlerAddr;void Device_Deinit(void);status_t bootUpCurrentCore(uint32_t entryPoint){/* entryPoint为中断向量表(vectortable)的首地址, vectortable[1]的地址为resetHandlerAddr */resetHandlerAddr *((uint32_t*)entryPoint1); Device_Deinit();S32_SysTick-CSRr S32_SysTick_CSR_ENABLE(0u);__asm(ldr r0, resetHandlerAddr); __asm(ldr r1, [r0]); /* r1 *resetHandlerAddr 即r1 resetHandler */__asm(mov pc, r1); /* pc resetHandler, 即跳转到resetHandler函数 */return STATUS_SUCCESS;} 4.2 Reset_Handler函数完成系统初始化 /*----------------------------------------------------------------------------Reset Handler called on controller reset *----------------------------------------------------------------------------*/ void __attribute__((naked,__noreturn__)) Reset_Handler(void) {__EARLY_INIT();/* Stack pointer initialisation */__set_CONTROL(0); /* MSP with privilege mode*/__set_PSP(0);__set_BASEPRI(0);__set_MSP((uint32_t)__INITIAL_SP);SystemInit(); /* CMSIS System Initialization */__PROGRAM_START(); /* Enter PreMain (C library entry point) */ }

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

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

相关文章

专业做食材网站浏阳做网站

启动Python有两种方式,分别为“Windows命令行窗口”和“IDLE” “命令行窗口”下可以通过如下两种方法: 1. import subprocess subprocess.call("clear") # linux/mac subprocess.call("cls", shellTrue) # windows 执行完次命令后&…

New_Sort_Integer_Sequential解析

New_Sort_Integer_Sequential解析import java.util.ArrayList; public class New_Sort_Integer_Sequential { static void sort(ArrayList<Integer> list, Integer left, Integer right) { if (right <= left…

课后2

使用double没得出精准答案第一个由于前面有加号,第一个是字符串,不进行计算,第二个先计算后面是字符串。 import java.util.Random; public class MathProblemGenerator { public static void main(String[] args) …

Java语法基础课程“动手动脑”问题与实验整理

Java语法基础课程“动手动脑”问题与实验整理 一、编程思维与项目分解相关愚公移山故事与编程逻辑关联思考 通过愚公移山故事,清晰感知到编程核心逻辑与现实问题解决的共通性:“虽我之死,有子存焉”对应分支结构(I…

课后感想

系统学习模块分解后,我实现了编程思维的进阶,跳出 “堆砌代码” 的局限,深刻理解其在软件开发中的核心价值。​ 此前写代码常陷入 “一锅粥” 困境:如简单图书管理系统的登录、查询、借阅功能全挤在主程序,新增 “…

php 公司网站百度关键词排名代发

全国PMO专业人士年度盛会 天阳科技集团北京卡洛其项目管理专家李先林先生受邀为PMO评论主办的2024第十三届中国PMO大会演讲嘉宾&#xff0c;演讲议题为“应用软件项目管理标准化实践探讨”。大会将于6月29-30日在北京举办&#xff0c;敬请关注&#xff01; 议题简要&#xff1…

交换友情链接平台鞍山做网站优化公司

指针 指针概念 指针保存地址&#xff0c;地址是字节的编号 指针类型和保存的地址类型要一直 使用时注意&#xff0c;把地址转换为&变量的格式来看 int a[3]; a转为&a[0] 指针的大小 64bit 固定8字节&#xff0c; 32bit 固定4字节 指针…

mysql的单表如何仅保留半年的数据

一、问题背景 mysql分表之后,只想保留某张表(例如订单表)最近半年内的数据,然后历史数据放到ES中进行归档,所以要定期处理。像这种的话,要怎么设计呢 二、问题解析 把「近 6 个月留在 MySQL,历史数据归档到 ES …

Java基础核心问题 链接版

"C:\Users\lenovo\Desktop\Java 基础核心问题.docx"

Insightly存储型XSS漏洞分析:通过链接名称注入恶意脚本

本文详细披露了Insightly平台存在的存储型XSS安全漏洞。黑客可通过在链接名称字段注入恶意脚本实现攻击,漏洞涉及脚本标签转义失效问题,影响所有访问受影响页面的用户。文章包含完整的复现步骤、概念验证和漏洞影响分…

建设部政务网站视频拍摄制作合同

个人主页&#xff1a;金鳞踏雨 个人简介&#xff1a;大家好&#xff0c;我是金鳞&#xff0c;一个初出茅庐的Java小白 目前状况&#xff1a;22届普通本科毕业生&#xff0c;几经波折了&#xff0c;现在任职于一家国内大型知名日化公司&#xff0c;从事Java开发工作 我的博客&am…

企业网站公示怎么做做网站前应该先出图

在一个类中如果需要实现多个自定义构造函数,通常做法是在构造函数中实现各自的业务逻辑,如果这些业务逻辑的实现并非截然不同的话,显然不符合oop编程思想,极不利于维护,当然,我们也可以通过将相同的逻辑部分封装成一个方法,但还有一种更为合理简单的方法&#xff0c;下面就通过…

网站开发公司前置审批丽水建设局网站

前言C语言属于高级程序语言的一种&#xff0c;它的前身是“ALGOL”。其创始人是布朗W卡尼汉和丹尼斯M利奇。C语言问世时是带有很大的局限性&#xff0c;因为它只能用于UNIX系统上。然而随着科学技术的进步&#xff0c;计算机工业的发展&#xff0c;C语言逐渐脱离UNIX。1987年美…

江门网站制作公司会计信息网站建设的意思

80端口被其他程序占用&#xff0c; fuser -k -n tcp 80 查看端口是否启用 telnet ip地址 端口没有启动&#xff0c;显示拒绝&#xff1a; 端口启动&#xff0c;显示微笑&#xff1a;

H3C交换机的配置学习-01

1.下载交换机模拟器 [https://www.h3c.com/cn/Service/Document_Software/Software_Download/Other_Product/H3C_Cloud_Lab/Catalog/HCL/] 2.安装后通过模拟器进行创建交换机和主机打开HCL软件,拖一个交换机,一个本地…

nian.so是国外还是国内网站wordpress回复查看插件

http://linuxsogood.org/1121.html/comment-page-1 转载于:https://www.cnblogs.com/saolv/p/7440536.html

网站维护报价表seo推广排名

本改进已集成到 YOLOv8-Magic 框架。 论文地址:https://arxiv.org/abs/2403.19967 论文代码:https://github.com/ma-xu/Rewrite-the-Stars 最近的研究引起了人们对“星形运算”(按元素乘法)在网络设计中未被充分利用的潜力的关注。虽然直观的解释很多,但其应用的基本原理…

找出网站所有死链接阿里企业邮箱免费

放大器DC参数测试(1) Hi,uu们,最近在忙啥呢?想好5.1,端午去哪里玩了吗? 咱们直接开始正题,放大器的DC参数还挺多,在Bench测试中,需要自动化测试,通常需要很多Relay去切换不同的配置去测量不同的参数,在这里瑞萨给出了测试参考电路.如图1所示. 图1:直流关键参数测试电路 Re…

Python脚本生成包含标准的#ifndef保护宏的头文件

做一个python脚本,可以用python + 文件名的形式进行调用 以下是一个可以直接通过命令行调用的 Python 脚本: 方法一:独立脚本文件(推荐) create_header.pypython 复制下载#!/usr/bin/env python3 ""&q…