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

//start.S 

.global led_init 

led_init:    

  @;GPC1CON  

  @;GPC1PUD

loop:  

  mov r0,#    @将1存到寄存器r0中,实现LED开灯效果

  bl led_ops   @调用C文件中的led_ops函数,此时led_ops函数调用的参数会自动从寄存器中取,即r0

   mov r0,#    @将0存到寄存器r0中,实现LED关灯效果

  bl led_ops

   b loop      @执行循环,使LED灯不停闪烁

delay:  

  sub r0,r0,#  

  cmp r0,#  

  bne delay  

  mov pc,lr

  下面是C文件

//led.c 

void led_ops(int a){  

  if(a){   

    volatile int *p=(int *)0xe0200080;   //volatile关键字确保本条指令不会因编译器的优化而省略,且要求每次直接读值,注意这个关键字在嵌入式C中非常重要

    *p=*p | (<<);  

  }

  else{   

    volatile int *p=(int *)0xe0200080;   

    for(int i=;i<;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

ARM学习笔记14——C语言和汇编相互套用的更多相关文章

  1. 23 DesignPatterns学习笔记:C++语言实现 --- 2.1 Bridge

    23 DesignPatterns学习笔记:C++语言实现 --- 2.1 Bridge 2016-07-22 (www.cnblogs.com/icmzn) 模式理解  

  2. Ext.Net学习笔记14:Ext.Net GridPanel Grouping用法

    Ext.Net学习笔记14:Ext.Net GridPanel Grouping用法 Ext.Net GridPanel可以进行Group操作,例如: 如何启用Grouping功能呢?只需要在Grid ...

  3. SQL反模式学习笔记14 关于Null值的使用

    目标:辨别并使用Null值 反模式:将Null值作为普通的值,反之亦然 1.在表达式中使用Null: Null值与空字符串是不一样的,Null值参与任何的加.减.乘.除等其他运算,结果都是Null: ...

  4. golang学习笔记14 golang substring 截取字符串

    golang学习笔记14 golang substring 截取字符串golang 没有java那样的substring函数,但支持直接根据 index 截取字符串mystr := "hel ...

  5. 23 DesignPatterns学习笔记:C++语言实现 --- 2.7 Proxy

    23 DesignPatterns学习笔记:C++语言实现 --- 2.7 Proxy 2016-07-18 (www.cnblogs.com/icmzn) 模式理解

  6. 23 DesignPatterns学习笔记:C++语言实现 --- 2.6 Facade

    23 DesignPatterns学习笔记:C++语言实现 --- 2.6 Facade 2016-07-22 (www.cnblogs.com/icmzn) 模式理解

  7. 23 DesignPatterns学习笔记:C++语言实现 --- 2.5 Factory

    23 DesignPatterns学习笔记:C++语言实现 --- 2.5 Factory 2016-07-18 (www.cnblogs.com/icmzn) 模式理解   1. Flyweight ...

  8. 23 DesignPatterns学习笔记:C++语言实现 --- 2.4 Composite

    23 DesignPatterns学习笔记:C++语言实现 --- 2.4 Composite 2016-07-22 (www.cnblogs.com/icmzn) 模式理解

  9. 23 DesignPatterns学习笔记:C++语言实现 --- 2.2 Adapter

    23 DesignPatterns学习笔记:C++语言实现 --- 2.2 Adapter 2016-07-22 (www.cnblogs.com/icmzn) 模式理解

随机推荐

  1. QT 自定义assert

    预览 代码 #define assert_(expression,message) if (expression) \ { \ if (QMessageBox::Yes == QMessageBoxE ...

  2. [翻译][MVC 5 + EF 6] 4:弹性连接和命令拦截

    原文:Connection Resiliency and Command Interception with the Entity Framework in an ASP.NET MVC Applic ...

  3. leetcode problem 11 Container With Most Water

    Given n non-negative integers a1, a2, ..., an, where each represents a point at coordinate (i, ai). ...

  4. event的属性

    t获取鼠标相对于浏览器左上角的坐标 <div id="dv" style=" width:300px; height:200px; background-color ...

  5. less学习-语法(二)

    变量 @color1:#fff; 选择器  // Variables @mySelector: banner; // Usage .@{mySelector} { font-weight: bold; ...

  6. PDO操作mysql数据库(二)

    从 MySQL 数据库读取数据 <?php $server = "localhost"; $user = "root"; $pwd = "123 ...

  7. 数据库MySQL与xls文件的互导

    最近的一个项目需要将xls表导入到MySQL数据库中和将MySQL数据表导出到xls表中,在网上搜了很多资料,经过多次尝试终于实现了功能,废话不多说,在这粘贴出代码,希望可以帮到需要的朋友. 一.将. ...

  8. TDirectory.GetLastAccessTime获取指定目录最后访问时间

    使用函数: System.IOUtils.TDirectory.GetLastAccessTime 函数定义: class function GetLastAccessTime(const Path: ...

  9. 第一个CUDA程序

    开始学CUDA 先写一个简单的 #include<iostream>__global__ void add( int a, int b, int *c ) { *c = a + b;}in ...

  10. linux常用命令搜索

    解压tar - xzvf webcmp.tar.gz /目的目录 压缩tar - czvf webcmp.tar.gz /压缩源文件 发包命令 cd /cap/sc_bossdata_20140516 ...