| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 嵌入式 -> 基于keil5下STM32的C与汇编语言混合编程 -> 正文阅读 |
|
[嵌入式]基于keil5下STM32的C与汇编语言混合编程 |
?本文章主要介绍基于mdk5(keil5)下关于STM32的C与汇编语言混合编程。 目录 一、简介C与汇编语言混合编程? ? ? ?C语言是一个系统级的语言,是一个可以直接深入到硬件最底层操作的语言。在前边的部分博客中,我们提到过,对硬件的操作实际上是对硬件控制器中的寄存器或存储单元进行操作,而在ARM架构中,这些寄存器或存储单元一般是以内存映射的方式进行访问的。在C语言中,指针刚好提供了访问任意的内存地址的方式,因此从语言上是可以表达的。但实际情况呢? 二、混合编程教程1、新工程的建立和环境配置?具体的步骤和参数设置可以看我以前写的博客有一步一步的教学,我就不再多赘述了(要根据自己所需芯片调制) 基于MDK(Keil5)的STM32汇编程序_我想恰鱼的博客-CSDN博客 点击Project,选择New uvison Project 随后选择文件保存的路径以及文件TEST1的名称: 然后添加 代码如下: main.c:
func.s:
2、程序的编译与观察由于需要仿真 需要点击魔法棒在Debug界面里勾选Use Simulator?,表示软件使用仿真 不勾选则无法进行仿真 然后我们需要将Dialog?DLL项改为DARMSTM.DLL,parameter项改为你选用的芯片这里我就改为-pSTM32F103RC(你前面所选芯片) 完成后按F9设置断点,便于经行观察每次比较时R1,R2的大小。然后编译并点击debug进入调试 ? ? ?R1小于10时程序会不断进入i++和j++循环 当R1大于等于10时程序跳出循环 三、修改参考代码? ? ? ?修改参考代码,将原汇编语言 Init_1函数的类型改为 int Init_1(init) ,此函数功能修改为 传入一个整型数x,函数运行后返回整型数 x+100。 ?main.c为:
func.s为:
编译后设置断点开始调试 ? 十六进制中:0x6E=110 ?可以看见Init_1(10)的10被传入R0中 ??这里可以看见m的值为0x6E(即10进制下的110)说明调用成功了。 四、在汇编程序中调用C程序?改写代码 mian.c:
func.s:
编译后设置断点: ? 然后进行调试 我们可以看到执行get5语句后R0变为了5,证明成功调用。 ? 且R1,R2正常累加 五、总结?1、寄存器使用规则
2. R4-R11 被用来存放函数的局部变量。如果被调用函数使用了这些寄存器,它在返回之前必须恢复这些寄存器的值。R11 是栈帧指针 fp。 3.R12 是内部调用暂时寄存器 ip。它在过程链接胶合代码(例如,交互操作胶合代码)中用于此角色。在过程调用之间,可以将它用于任何用途。被调用函数在返回之前不必恢复 r12。 4. 寄存器R13 是栈指针 sp。它不能用于任何其它用途。sp 中存放的值在退出被调用函数时必须与进入时的值相同。 5. 寄存器R14 是链接寄存器 lr。如果您保存了返回地址,则可以在调用之间将R14 用于其它用途,程序返回时要恢复 6. 寄存器 R15 是程序计数器 pc。它不能用于任何其它用途。 六、参考文章 |
|
嵌入式 最新文章 |
基于高精度单片机开发红外测温仪方案 |
89C51单片机与DAC0832 |
基于51单片机宠物自动投料喂食器控制系统仿 |
《痞子衡嵌入式半月刊》 第 68 期 |
多思计组实验实验七 简单模型机实验 |
CSC7720 |
启明智显分享| ESP32学习笔记参考--PWM(脉冲 |
STM32初探 |
STM32 总结 |
【STM32】CubeMX例程四---定时器中断(附工 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/26 4:45:11- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |