| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 嵌入式 -> STM32 C 语言和汇编语言混合编程 -> 正文阅读 |
|
[嵌入式]STM32 C 语言和汇编语言混合编程 |
目录 二、将原汇编语言 Init_1函数的类型改为 int Init_1(init) ,此函数功能修改为 传入一个整型数x,函数运行后返回整型数 x+100 ? 一、C语言调用汇编函数?? ?1.打开keil 5新建工程 ? ? ?? 2.右击Source Group1 添加新项目 ? ? 3.点击 Asm File(.s) ,输入name ,点击Add ? ? 4.输入代码: 5.重复第三步新建c File(.c)?文件,代码如下: ? 6.准备环境,实现硬件仿真 ? 点击Debug? 7.调试 看图中代码7、8行初始化寄存器R1为1、R2为2,单步调试 ,看右边core中R1,R2初始化完成。 ? 二、将原汇编语言 Init_1函数的类型改为 int Init_1(init) ,此函数功能修改为 传入一个整型数x,函数运行后返回整型数 x+100下面由于要涉及到arm寄存器的一些分析,所以我在这先简单介绍一下。
修改main.c
修改func.s
初始化形参? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?R0初始化为我设置的给定值10 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? R0=R0+100执行成功? ? ? ? ?当程序运行到如上图所示时,点击单步调试,注意观察到R14(LR)中的地址-1被加载到R15(PC)指针,PC指针指向该地址,即可返回主程序。 ? ? 三、在汇编函数中调用一个 C语言写的函数如在MDK下stm32程序的执行过程为 先执行.s的汇编程序,再.s文件中执行以下操作
然后再跳转到main函数,执行一些c语言程序。 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?初始化R0为3,R1为4 ? ? 此代码实现了在c函数中调用汇编函数,再从汇编函数中调用c函数,调用方式与之前大同小异,但是了解c程序和汇编程序相互调用,混合编程还是很有帮助的。? 四、总结通过这次练习学到了混合编程的过程,汇编语言更能看出代码运行的过程,对代码运行更容易理解。 五、参考链接:MDK下C与汇编语言混合编程 - the7 |
|
嵌入式 最新文章 |
基于高精度单片机开发红外测温仪方案 |
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:28:33- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |