博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ARM学习笔记14——C语言和汇编相互套用
阅读量:5321 次
发布时间:2019-06-14

本文共 936 字,大约阅读时间需要 3 分钟。

  这里,我们要准备两个文件,一个是汇编文件start.S,另一个是C文件led.c。汇编文件套用C文件中的开关灯函数,C文件套用汇编文件中延时函数。

//start.S .global led_init led_init:      @;GPC1CON    @;GPC1PUDloop:    mov r0,#1    @将1存到寄存器r0中,实现LED开灯效果  bl led_ops   @调用C文件中的led_ops函数,此时led_ops函数调用的参数会自动从寄存器中取,即r0   mov r0,#0    @将0存到寄存器r0中,实现LED关灯效果  bl led_ops   b loop      @执行循环,使LED灯不停闪烁delay:    sub r0,r0,#1    cmp r0,#0    bne delay    mov pc,lr

   下面是C文件

//led.c void led_ops(int a){    if(a){       volatile int *p=(int *)0xe0200080;   //volatile关键字确保本条指令不会因编译器的优化而省略,且要求每次直接读值,注意这个关键字在嵌入式C中非常重要    *p=*p | (1<<3);    }  else{       volatile int *p=(int *)0xe0200080;       for(int i=0;i<3;i++){          //执行位清零操作      *p++=0x00000000;       }    }    delay(0xff0000);             //调用汇编文件中delay标签,执行延时}

  编译方法如下:arm-linux-gcc led.c -o led.o

           arm-linux-gcc start.S -o start.o
         arm-linux-gcc -nostartfiles -nostdlib start.o led.o 

 

转载于:https://www.cnblogs.com/zjzsky/p/3534864.html

你可能感兴趣的文章
PUSH到git分支代码不自动更新的问题
查看>>
leetcode 16:最接近的三数之和
查看>>
[Lintcode] Partition List
查看>>
QGIS练手 - 标注
查看>>
安装指定版本的minikube
查看>>
Linux_C++内存分配方式详解——堆、栈、自由存储区、全局/静态存储区和常量存储区...
查看>>
Django展示第一个网页
查看>>
webapi请求返回{"$id":"1","Message":"请求的资源不支持 http 方法“GET”。"}
查看>>
网络对抗技术 实验二
查看>>
微信公众号自定义菜单
查看>>
代理模式-JDK Proxy(Java实现)
查看>>
Css 切换
查看>>
乐高创意机器人moc_乐高MOC佳作欣赏丨机械之美机器人乐高作品集18(高达篇)
查看>>
交通部 城轨交通运营管理规定_韩国又松大学热门专业-轨道交通运营与管理专业介绍...
查看>>
十二星座匹配对象_2021年综合运势好的星座,幸运指数爆棚
查看>>
echarts grid的样式位置_echarts数据可视化图表(二):双柱状图
查看>>
asr语音转写_C# 10分钟完成百度语音技术
查看>>
key设计 短信验证存redis_Redis 如何设计 Key 和 Filed
查看>>
websocket替代方案_结合融云 WebSDK 了解 WebSocket 基本原理
查看>>
x3550m5 问题确定与维护指南_洁净厂房监测中的常见问题分析
查看>>