arm汇编指令探究之 ldmia

2023-05-16

ldmia r0!, {r4-r11, r14}  的意思是

LDMIA 中的 I 是 increase 的缩写,A 是 after 的缩写,LD加载(load)的意思
R0后面的感叹号“!表示会自动调节 R0里面的指针
所以整句话意思是任务栈R0的存储地址由低到高,将R0存储地址里面的内容手动加载到 CPU 寄存器 R0,R4-R12里
还有一种是STMDB R1!, {R0,R4-R12} 这就和上面反过来了,ST是存储(store)的意思,D是decrease的意思,B是before的意思,整句话就是R1的存储地址由高到低递减,将R0,R4-R12里的内容存储到R1任务栈里面。

 

typedef struct tskTaskControlBlock
{
    volatile StackType_t *pxTopOfStack; /* 栈顶 */ (1)
    ListItem_t xStateListItem; /* 任务节点 */ (2)
    StackType_t *pxStack; /* 任务栈起始地址 */ (3)
    /* 任务名称,字符串形式 */(4)
    char pcTaskName[ configMAX_TASK_NAME_LEN ];
} tskTCB;

typedef tskTCB TCB_t;
TCB_t * volatile pxCurrentTCB = NULL;


__asm void vPortSVCHandler( void )
{
    PRESERVE8

    /* Get the location of the current TCB. */
    ldr r3, =pxCurrentTCB
    ldr r1, [r3]
    ldr r0, [r1]
    /* Pop the core registers. */
    ldmia r0!, {r4-r11, r14}  ;以 r0 为基地址,将栈中向上增长的 8 个字的内容加载到 CPU 寄存
器 r4~r11,同时 r0 也会跟着自增
    msr psp, r0  ;此时的r0由于r0!  已经增加到了新的数值,将新的栈顶指针保存到psp中
    isb
    mov r0, #0
    msr basepri, r0;打开所有的中断
    bx r14
}

 

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

arm汇编指令探究之 ldmia 的相关文章

  • 哪些变量类型/大小在 STM32 微控制器上是原子的?

    以下是 STM32 微控制器上的数据类型 http www keil com support man docs armcc armcc chr1359125009502 htm http www keil com support man d
  • C 嵌入式应用程序中 time() 函数的问题

    我在用time 在 ARM 微控制器上 处理器一到达此函数就会重新启动 奇怪的是 当我处于调试模式时 代码运行得很好 但一旦我想将其应用到独立模式 我就会遇到重置 我是否忽略了什么 这个功能有替代品吗 代码部分是这样的 include
  • 如何在 Android 设备上运行 VS Code [重复]

    这个问题在这里已经有答案了 我有 Galaxy Tab S6 它具有替代笔记本电脑的很酷的功能 例如连接鼠标和键盘 但不幸的是它运行 Android 操作系统 并且没有很多开发应用程序可用于 Android 所以我想是否有一个选项可以在至少
  • 交叉编译 Qt 4.7 时出现“非法指令”

    我已经在这个问题上苦苦挣扎了一个多星期了 但仍然找不到解决方案 我正在尝试为 ARM 设备交叉编译 Qt 4 7 嵌入式开源版本 构建过程本身可以顺利完成 但生成的二进制文件似乎包含处理器无法理解的指令 构建主机是 i386 上的 Debi
  • 是否可以将 SpaCy 安装到 Raspberry Pi 4 Raspbian Buster

    我一整天都在安装 SpaCy sudo pip install U spacy Looking in indexes https pypi org simple https www piwheels org simple Collectin
  • Beaglebone Black 的 U-boot 无法构建 - 目标 CPU 不支持 THUMB 指令

    我正在尝试按照 Chris Simmonds 的 掌握嵌入式 Linux 编程 中的说明为 Beagle Bone Black 构建 u boot 我已经构建了交叉工具链 现在正在尝试使用该工具链构建 Das U boot 但由于不支持 T
  • AOSP 的“午餐”组合是什么意思?我需要选择什么?

    我是 Android 设备 ROM 开发的新手 无论如何 我现在正在为具有 64 位处理器的中国设备构建 AOSP 我按照 source android com 上的菜单进行操作 当我运行 午餐 命令时 终端显示 午餐菜单 选择一个组合 我
  • 如何模拟ARM处理器运行环境并加载Linux内核模块?

    我尝试加载我的vmlinux into gdb并使用 ARM 内核模拟器 但我不明白为什么我会得到Undefined target command sim 这是外壳输出 arm eabi gdb vmlinux GNU gdb GDB 7
  • ARM Chromebook 上的 Android 开发环境?

    我尝试了多次安装和使用安卓工作室 https developer android com studio index html on an ARM Chromebook C100P https archlinuxarm org platfor
  • arm64和armhf有什么区别?

    Raspberry Pi Type 3 具有 64 位 CPU 但其架构不是arm64 but armhf 有什么区别arm64 and armhf armhf代表 arm hard float 是给定的名称Debian 端口 https
  • 如何获取结构体中任意成员的位位置

    如何获取结构体中任意成员的位位置 在示例中 gt typedef struct BitExamStruct unsigned int v1 3 unsigned int v2 4 unsigned int v3 5 unsigned int
  • 为arm构建WebRTC

    我想为我的带有arm926ej s处理器的小机器构建webrtc 安装 depot tools 后 我执行了以下步骤 gclient config http webrtc googlecode com svn trunk gclient s
  • 上下文切换到安全模式(arm trustzone)的成本是多少

    我试图了解在arm中可信 安全 和非安全模式之间来回切换的成本 从非安全世界转移到安全世界时到底需要发生什么 我知道需要设置 ns 位 基于某些特殊指令 需要刷新和更新页表 刷新和更新处理器缓存 还有什么需要发生的吗 处理器缓存 它们是分段
  • 哪些 GCC 优化标志对二进制大小影响最大?

    我正在使用 GCC 为 ARM 开发 C 我遇到了一个问题 我没有启用优化 我无法创建二进制文件 ELF https en wikipedia org wiki Executable and Linkable Format 对于我的代码 因
  • A64 Neon SIMD - 256 位比较

    我想将两个小端 256 位值与 A64 Neon 指令 asm 进行有效比较 平等 为了平等 我已经有了解决方案 bool eq256 const UInt256 lhs const UInt256 rhs bool result 首先 将
  • ARM 的内核 Oops 页面错误错误代码

    Oops 之后的错误代码给出了有关 ARM EX 中的恐慌的信息 Oops 17 1 PREEMPT SMP在这种情况下 17 给出了信息 在 x86 中它代表 bit 0 0 no page found 1 protection faul
  • 2022年Android CPU架构分布(armeabi-v7a vs arm64-v8a)

    有没有关于 2022 年 Android 设备上的架构使用情况的官方信息 我有一个支持armeabi v7a 和arm64 v8a 的应用程序 我想要放弃对armeabi v7a的支持并且仅支持 64 位设备 arm64 v8a 但我找不到
  • 支持 ARM 上的 Windows 10 桌面应用程序 - MFC 和 COM 以及 OPOS 可以工作吗?

    我试图了解将在 x86 Windows 10 上运行的 C MFC 应用程序移植到具有 Qualcomm Snapdragon 处理器的 ARM Windows 10 设备的障碍 32位应用程序具有以下特点 MFC 与 C 用于用户界面 C
  • 在 ARM Cortex-M3 中使用 newlib 的 malloc

    我正在为 ARM Cortex M3 NXP 的 LCP17xx 创建代码 到目前为止我一直在使用静态内存 一切都运行良好 我尝试添加动态内存支持 但是一旦调用 malloc 系统就会卡住 我正在使用 gcc 为 Arm Bare Meta
  • 什么是 .axf 文件?

    我是arm架构的新手 我从事嵌入式软件工作 并试图了解我的项目二进制文件的调试文件夹中存在的 axf文件 发现它是链接器在构建过程中生成的arm可执行格式文件 用于调试崩溃 所以很明显它包含了一些调试信息 但不清楚具体是什么信息 而且deb

随机推荐

  • 一文读懂大端、小端、字节序、MSB、LSB、MSBs、LSBs

    大端 小端 字节序 MSB LSB MSBs LSBs 5分钟完全理解上述嵌入式 物联网开发中很扯蛋的几个被玩坏概念 MSB LSB 对于涉及 bit 流的概念中 MSB xff08 Most Significant Bit xff09 x
  • 飞控串口通信接入linux

    1 串口设置 2 串口接入 3 消息传输 4 消息透传 5 mavlink解析 1 mavlink库 将mavlink库添加至项目包含目录 2 常用mavlink消息 mavlink heartbeat t 心跳包 mavlink atti
  • python的函数修改外部传入的参数的问题

    span class token keyword def span span class token function test span span class token punctuation span df span class to
  • 树莓派笔记8:UDP传输视频帧

    因为我在自己笔记本电脑上没能成功安装OpenCV Contrib模块 xff0c 因此不能使用人脸识别等高级功能 xff0c 不过已经在树莓派上安装成功了 xff0c 所以我想实现把树莓派上采集的视频帧传输到PC的功能 xff0c 这样可以
  • 15.linux中的源码安装,SRPM包安装,rpmbild,spec详解

    前言 本小节会详细讲解在linux中如何进行源码编译安装 xff0c SRPM包的两种安装方式 xff0c rpmbuild spec的使用方法 文章目录 前言源码安装和卸载源码安装介绍安装gcc安装源码包Linux源码包卸载 SRPM包的
  • zephyr中消息队列和邮箱的主要区别点

    简单列一下而已 xff0c 想到什么就列了什么 xff1a 1 邮箱既可以同步也可以异步 xff0c 消息队列只可以异步 xff1b 2 邮箱包含Send和Recv两个消息队列 xff0c 消息队列仅仅包含一个用于消息传输的队列 3 邮箱不
  • Windows/Linux客户端挂载NFS共享存储

    Windows Linux客户端挂载NFS共享存储 1 Linux搭建NFS共享存储1 1 NFS概述1 2 安装并配置NFS Server1 3 启动并验证NFS Server 2 客户端挂载NFS共享存储2 1 Windows操作系统挂
  • WIN10源码编译安装QGC-V3.4

    WIN10源码编译安装QGC V3 4 20190228更新 整个安装过程的流程为 xff0c 先安装VS2015 xff0c 再安装Git 用Git来下载qgroundcontrol代码 xff0c 最后下载Qt 用Qt对qgroundc
  • ESP8266简介

    ESP8266 是一款适用于物联网和家庭自动化项目的 Wi Fi 模块 ESP8266 是一个 10元人名币的 Wi Fi 模块 它允许您像使用 Arduino 一样控制输入和输出 xff0c 但它带有 Wi Fi 因此 xff0c 它非常
  • 多任务操作系统是如何切换进程

    多任务操作系统在并行执行多任务时 xff0c 实际上是不断地在任务间进行切换的 xff0c 也就是切换上文 首先要保存前一个进程的上下文 xff0c 然后调度一个就绪的进程 xff0c 并载入该进程的上下文 xff0c cpu开始执行该进程
  • python爬虫爬取淘宝网页

    首先进行相关的分析 要想爬取相关的信息 xff0c 必须指导如下信息 xff1a 1 访问接口 2 翻页操作 首先进行搜索 xff0c 得到相关的网址 xff1a https s taobao com search q 61 书包 amp
  • Ceres使用经验之柯西核函数

    原理 在优化中 xff0c 经常会遇见有异常值的情况 xff0e 如在直线拟合中 xff0c 可能会出现若干个不在直线上点 xff0c 此时如果每一个点的权重一样 xff0c 就会导致求得的直线方程不理想 xff0e 为了增强优化过程中对异
  • PHPStrom2018最新版软件汉化教程,绝对靠谱

    phpstorm2018中文汉化包 是专门为phpstorm2018最新软件推出的汉化破解补丁 xff0c 帮助各位汉化和免费使用该软件 xff1b 它是一款非常不错的软件 xff0c 是jetbrains打造的一款轻量级IDE集成开发环境
  • js实现冒泡排序

    span class token comment 冒泡排序 span span class token keyword var span arr span class token operator 61 span span class to
  • 图片水平或垂直滚动

    在vue项目中引用外部插件VueImgSlider vue xff1a import VueImgSlider from 39 components VueImgSlider vue 39 export default name 39 we
  • MCU常见的操作系统介绍

    MCU微控制器几种常见的操作系统各自的优缺点介绍 目录 一 FreeRTOS 二 uC OS II 三 C OS III 四 RT Thread 一 FreeRTOS FreeRTOS是一款免费 开源的实时操作系统 xff08 RTOS x
  • 初学者如何学习人工智能收藏

    在CSDN上看到一篇关于初学人工智能的帖子 xff0c 分享给大家 xff0c 希望有用 原文链接 xff1a http bbs jointforce com topic 22613 全文如下 xff1a 一 机器学习 有关机器学习领域的最
  • freeRTOS中队列发送数组(数组成员是结构体类型)

    typedef struct icm42607 sensor data packet t int8 t head int8 t temp degc int16 t reserve0 int16 t accel g 3 int16 t res
  • tracealyzer的使用方法

    61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61
  • arm汇编指令探究之 ldmia

    ldmia r0 r4 r11 r14 的意思是 LDMIA 中的 I 是 increase 的缩写 xff0c A 是 after 的缩写 xff0c LD加载 load 的意思 R0后面的感叹号 xff01 表示会自动调节 R0里面的指