恒美微站 Logo 恒美微站
  • 首页
  • 关于我们
  • 建站服务
  • 主题模板
  • 案例展示
  • 资讯中心
  • 联系我们

ARM学习2

  • 首页
  • 资讯中心
  • /
  • ARM学习2

相关资讯

海马科普:品种区分、食补用法,聊聊少有人知道的北方冷水海马 2026/8/2 17:48:26
信息系统项目管理师教程(第4版)笔记——第 16 章 项目采购管理 2026/8/2 17:48:27
AI编程助手Claude实战:提升开发效率与代码质量 2026/8/1 22:30:13

最新资讯

AI产品工程实践:如何在快速验证与可持续架构间找到平衡
ChatGPT Linux桌面版:从网页访客到系统原生AI助手的转变
Excel打开灰色不显示内容?从视图到文件损坏的完整排查与修复指南
MAPS框架:多智能体认知对话中的主观视角与共享意义构建
分布式耦合采样与经验传输认证:构建可验证的高维概率分布采样框架
客户反复改稿改到崩溃?AI精修一次性生成多种版式,告别无效沟通

今日推荐

【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码
【双层规划,节点出清价,绿证交易,CVaR方法】两级电力市场环境下计及风险的省间交易商最优购电模型附Matlab代码
隐式mpc+自适应mpc+时变mpc,线性时变模型预测控制附Simulink仿真

本周热门

【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码
【双层规划,节点出清价,绿证交易,CVaR方法】两级电力市场环境下计及风险的省间交易商最优购电模型附Matlab代码
隐式mpc+自适应mpc+时变mpc,线性时变模型预测控制附Simulink仿真

本月精选

如何用DamaiHelper实现演唱会门票的智能自动化抢购:完整技术解决方案指南
第4篇:59 倍性能差距的索引瓶颈定位——一次教科书级的全表扫描调优
终极歌词批量下载神器:5分钟解决离线音乐库歌词同步难题

ARM学习2

发布时间:2026/8/16 10:22:27
ARM学习2 13.汇编1)位运算逻辑右移LSR最高位补0不需要考虑数值的符号位无符号数算术右移ASR最高位补符号位考虑数值的符号位有符号数循环右移ROR循环将每次移出的最低位补到最高位1011 0010 (lsr) 1 : 0101 10011011 0010 (asr) 1 : 1101 10011011 0010 (ror) 10101 1001 1010 1100立即数定义立即数Immediate 是 ARM 汇编中直接写在指令里的常数不需要从内存或寄存器读取。判断条件如果某个数的数值范围是0~0xFF之间那么这个数一定是立即数把某个数展开成2进制这个数的最高位1至最低位1之间的二进制数序列的位数不能超过8位包括最高位、最低位这个数的二进制序列凑够8位之后的的右边必须为偶数个连续的 0b、bl、bx区别函数调用b: 在函数跳转前无法将函数返回地址装入到lr寄存器bl在函数跳转前可以将返回地址装入到lr寄存器bxbx后面加寄存器可以将寄存器中的地址恢复给pc栈有四种类型空减栈、 空增栈、 满减栈、 满增栈增栈入栈时sp指针往上走减栈入栈时sp指针往下走空栈先写数据再挪指针 *sp *sp--满栈先挪指针再写数据 *sp *--spARM采用的满减栈ldr和str指令ldr向寄存器中加载一个非立即数 将RAM中的数据加载到通用寄存器str将通用寄存器中值写入到RAM空间ldmfd和stmfd指令ldmfd将寄存器的值从栈区取出出栈stmfd将寄存器的值保存到栈区入栈bic和orr指令bic指令将操作数中为bit1的位清0清0的结果写回到通用寄存器中orr指令将操作数中为bit1的位置1置1的结果写回到通用寄存器中mrs和msr指令mrs读取某个特殊寄存器(cpsr)值到通用寄存器msr将通用寄存器的值写入到特殊寄存器(cpsr)汇编向C传参需要注意的点在汇编调C函数首先在汇编开头需要加入伪指令PRESERVE8然后在汇编中导入C函数import指令最后进行参数的传递通过通用寄存器传参将C语言函数返回值保存到R0寄存器。 如果参数个数小于等于4个时可以通过通用寄存器R0 - R3传参 如果参数个数超过4个时必须通过栈进行传参入栈出栈在C语言调汇编函数首先在汇编开头需要加入伪指令PRESERVE8然后导出汇编函数export指令在C语言中声明汇编函数在main函数中调用汇编函数并传参。汇编函数将C语言传递的参数保存到通用寄存器中汇编程序结果通过R0寄存器返回LED0 是GPIO一组的第三个引脚一省略了14.烧录问题如果烧录后速度时而达到MB有问题时而KB正常但是代码没有问题记得重启虚拟机重新烧录程序到SD卡15.GPIO点灯需要配置的寄存器1IOMUXC1. IOMUXC_SW_MUX_CTL_PAD_: 配置引脚复用功能2. IOMUXC_SW_PAD_CTL_PAD_配置电气属性2GPIO1. GPIO1_DR: GPIO数据寄存器2. GPIO1_GDIR: GPIO输入输出模式配置寄存器3CCM1. CCM_CCGR0 - CCM_CCGR6: 0xFFFFFFFF 将所有外设时钟全部打开16.ARM工具链中gcc、ld、objcopy、objdump工具的作用1)使用arm-linux-gnueabihf-gcc编译文件命令为arm-linux-gnueabihf-gcc -g -c led.S -o led.o进行预处理-》编译-》汇编将.c/.S文件变成.o目标文件“-g”选项是产生调试信息GDB 能够使用这些调试信息进行代码调试。“-c”选项是编译源 文件但是不链接。“-o”选项是指定编译产生的文件名字这里我们指定 led.s 编译完成以后的文件名字为 led.o2)使用arm-linux-gnueabihf-ld链接文件命令 arm-linux-gnueabihf-ld -Ttext 0x87800000 led.o -o led.elf将所有 .o 文件整合成一个 elf 可执行文件并在整合时通过链接脚本.lds配置各段的内存地址-Ttext 就是指定链接地址“-o”选项指定链接生成的 elf 文件名这里我们命名为 led.elf。3用arm-linux-gnueabihf-objcopy格式转换去除源文件中多余的符号表和调试信息生成可以直接烧录的.bin文件4使用arm-linux-gnueabihf-objdump 反汇编辅助性的调试步骤。它的作用是将 elf 文件反向翻译成人们更容易理解的汇编代码生成一个 .dis 反汇编文件。17.四个段的区别1.bss段用于存放未初始化静态变量或初始化为0的全局变量在运行时会被自动清零2.COMMON段用于存放未初始化的全局变量3.data段用于存放初始化不为0的全局变量和静态变量4.rodata段- 存放程序的只读数据- 运行时受保护不可修改- 包含的数据类型1. 字符串常量2. const修饰的全局变量3. 全局只读数组4. switch跳转表5. 浮点数常量

关于恒美微站

恒美微站专注于为个体商户、工作室提供极简自助建站服务,让每个人都能轻松拥有专业网站。

快速链接

  • 关于我们
  • 建站服务
  • 主题模板
  • 案例展示
  • 资讯中心

服务项目

  • 可视化建站
  • 拖拽编辑
  • 主题定制
  • SEO 优化
  • 网站托管

联系方式

  • 📍 地址:北京市朝阳区建国路 88 号
  • 📞 电话:400-888-8888
  • ✉️ 邮箱:info@hmyw.cn
  • 🕐 时间:周一至周日 9:00-18:00

© 2024 恒美微站 hmyw.cn 版权所有 | 京 ICP 备 12345678 号