当前位置: 首页 > news >正文

32单片机,C语言与汇编联合编译的几种方式

适用编译器:Keil5

方式一:

单独创建一个.s汇编文件,在汇编文件内对函数进行EXPORT声明

r0寄存器是函数传入的第一个参数,r1寄存器是函数传入的第二个参数,以次类推。参数最多不确定是到r4为止,还是到r12,可自行研究。

PRESERVE8THUMBAREA    |.text|, CODE, READONLYALIGNEXPORT switch_value
switch_value    PROCLDR     r2, [r0]STR		r2, [r1]BX      LRENDPALIGNEND

在.c文件内,对汇编函数再次声明,需要对参数类型进行补充

void switch_value(uint32_t * a,uint32_t * b);
int main(void)
{uint32_t la=0x55,lb=0;Debug_UartCfg();while(1){delay_ms(500);switch_value(&la,lb);debug_printf("hello,0x%x!\r\n",lb);}
}

方式二:

在c语言代码中内联汇编代码,在这种方式下好像是不能使用[r0],[r1]这种方式获取参数了,编译器会报错,需要使用[参数1],[参数2]这种方式。

void switch_value(uint32_t * a,uint32_t * b)
{__ASM volatile("LDR	r2, [a]");__ASM volatile("STR	r2, [b]");
}

其他方式:

暂未确定看到网上有

__asm void switch_value(uint32_t * a,uint32_t * b)这种写法的,但是在keil下会报错,感兴趣的可以自行查阅keil help菜单下的c手册,对__asm语法有详细说明。

http://www.lryc.cn/news/393655.html

相关文章:

  • 基于GWO-CNN-BiLSTM数据回归预测(多输入单输出)-灰狼优化算法优化CNN-BiLSTM
  • 自动控制:反馈控制
  • sqlite 数据库 介绍
  • 【机器学习】机器学习重塑广告营销:精准触达,高效转化的未来之路
  • 常见的Java运行时异常
  • CANoe的capl调用Qt制作的dll
  • 论如何搭建属于自己的服务器?
  • 【C++ OpenCV】机器视觉-二值图像和灰度图像的膨胀、腐蚀、开运算、闭运算
  • STMF4学习笔记RTC(天空星)
  • vue数组变化的侦测***
  • k8s-第十节-Ingress
  • webrtc gcc详解
  • Linux多进程和多线程(七)进程间通信-信号量
  • 【项目日记(一)】梦幻笔耕-数据层实现
  • ElementUI的中国省市区级联数据插件element-china-area-data
  • Kotlin算法:把一个整数向上取值为最接近的2的幂指数值
  • 简单且循序渐进地查找软件中Bug的实用方法
  • 基于springboot+vue+uniapp的高校宿舍信息管理系统小程序
  • (完整音频)DockerHub、OpenAI、GitCode,脱钩时代,我们该如何自处?
  • macos 10.15系统下载包,macOS Catalina for mac
  • uni.showShareMenu({}) 和 uni.showShareImageMenu({}) 的区别
  • Spring Boot logback 日志文件配置
  • 240705_昇思学习打卡-Day17-基于 MindSpore 实现 BERT 对话情绪识别
  • 图像处理调试软件推荐
  • Mybatis实现RBAC权限模型查询
  • 最短路算法——差分约束
  • Log4j日志框架讲解(全面,详细)
  • LeetCode 35, 242, 994
  • ctfshow-web入门-文件包含(web87)巧用 php://filter 流绕过死亡函数的三种方法
  • adb shell ps -T打印出来参数的含义,以及D,T,Z代表的状态含义是什么?