[一跃进入C大门]

跳转方式

1.相对跳转:b或bl指令,通过计算两个地址之间的差值来给pc赋值相对跳转

2.绝对跳转:ldr指令,通过给pc直接赋值,完成绝对跳转

代码编写

1.在汇编代码中直接使用绝对跳转,跳转到C代码中,然后在C代码中通过点亮LED来验证

2.210在跳转到C程序时,需要注意复制代码时,要跳过校验信息。要不然跳转到内存时,前16个字节为头信息,整个起始地址向后偏移了16个字节,就找不到正确地址了

[C与汇编混合编程]

为什么需要C与汇编混合编程

1.汇编语言:执行效率高,编写繁琐

2.C语言:可读性强,移植性好,调试方便

3.混合编程可以提高执行效率,能够直接控制处理器,结合两者的优点

混合编程类型

1.汇编调用C函数

直接在汇编中调用C函数名(函数名相当于标号地址)

2.C调用汇编函数

在C中把汇编标号当函数调用(汇编标号需要通过global声明成全局)

3.C内嵌汇编代码

3.1格式:

__asm__(

汇编语句

:输出

:输入

:破坏描述

);

输出表示输出到C的变量,输入表示从C中输入的变量,破坏描述表示内嵌汇编中修改的寄存器。

C内嵌汇编以关键字”__asm__”或”asm”开始,下面四个部分,各部分之间使用”:”隔开,第一部分必须写,后面三个部分可以省略,但”:”不能省略

3.2示例:

void write_p15_c1(unsigned long value){
__asm__(
“mcr p15, 0, %0, c1, c0\n”
:
:”r”(value) @编译器任意选择一个rx寄存器
:
);
} unsigned long read_p15_c1(){
unsigned long value;
__asm__(
“mrc p15, 0, %0, c1, c0,0\n”
:”=r”(value) @’=’表示只写操作数,用于输出
:
:”memory” @表示修改内存,value局部变量保存在内存的栈中
);
return value;
} unsigned long old;
unsigned long temp; __asm__ volatile( @volatile告诉编译器,不要对优化下面的代码
“mrs %0, cpsr \n”
“orr %1, %0, #128 \n”
“msr cpsr_c, temp \n”
:”=r”(old),”=r”(temp)
:
:
); void init_led(){
__asm__(
"ldr r0, =0x56000010 \n"
"ldr r1, =0x00015400 \n"
"str r1, [r0] \n" "ldr r0, =0x56000014 \n"
"ldr r1, =0x00000140 \n"
"str r1, [r0] \n"
:
:
:"r0", "r1"
);
}

[国嵌攻略][045-046][一跃进入C大门]的更多相关文章

  1. [国嵌攻略][182][Sqlite嵌入式数据库移植]

    数据库系统构成 在计算机系统中,保存数据的方式一般有两种: 1.普通文件方式 2.数据库方式 相比于普通文件方式,使用数据库来管理大批量数据具有更高的效率与安全性. 数据库系统一般由三个部分构成 1. ...

  2. [国嵌攻略][179][OpenSSL加密系统]

    未加密传输的安全弊端 如果在网络传输中没有加密,就是以明文传输.传输的数据可以被抓包软件直接截获,并能读取里面的数据. 加密基本原理 1.对称加密 2.非对称加密 2.1.公钥私钥 公钥和私密要配对. ...

  3. [国嵌攻略][174][CGI快速入门-网页控制LED]

    CGI程序(Common Gate Way Interface) 在服务器外部供服务器调用的程序,CGI程序与服务器配合后能让服务器完成更强大的功能. 1.浏览器通过HTML表单或超链接请求指向一个C ...

  4. [国嵌攻略][173][BOA嵌入式服务器移植]

    1.解压boa嵌入式web服务 tar zxvf boa-0.94.13.tar.gz 2.进入src目录生成配置文件 ./configure 3.修改生成的Makefile CC=arm-linux ...

  5. [国嵌攻略][171][V4L2图像编程接口深度学习]

    V4L2摄像编程模型 1.打开摄像头设备文件 2.获取驱动信息-VIDIOC_QUERYCAP 3.设置图像格式-VIDIOC_S_FMT 4.申请帧缓冲-VIDIOC_REQBUFS 5.获取帧缓冲 ...

  6. [国嵌攻略][165][usb下载线驱动设计]

    查看USB设备的生产商ID和设备ID 示例: lsusb Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub 生产商ID是1d ...

  7. [国嵌攻略][164][USB驱动程序设计]

    USB驱动模型 1.USB host controller driver(主控器驱动):为USB主控制器提供驱动程序 2.USB core(USB核心):连接USB主控制器驱动和USB设备驱动 3.U ...

  8. [国嵌攻略][163][linux-usb软件系统架构]

    软件系统架构 1.主机端软件架构 USB设备驱动->USB核心->USB主控制器驱动->USB主控制器 2.设备端软件架构 Gadget驱动->Gadget API->U ...

  9. [国嵌攻略][162][USB协议分析]

    USB设备逻辑结构 在USB设备的逻辑组织中,包含设备.配置.接口和端点4个层次.设备通常有一个或多个配置,配置通常有一个或多个接口,接口通常有零个或多个端点. USB设备描述符 当我们把USB设备( ...

随机推荐

  1. bzoj 4237: 稻草人

    Description JOI村有一片荒地,上面竖着N个稻草人,村民们每年多次在稻草人们的周围举行祭典. 有一次,JOI村的村长听到了稻草人们的启示,计划在荒地中开垦一片田地.和启示中的一样,田地需要 ...

  2. js知识点图解

  3. 微信小程序一:微信小程序UI组件、开发框架、实用库

    作者:NiceCui 本文谢绝转载,如需转载需征得作者本人同意,谢谢. 本文链接:http://www.cnblogs.com/NiceCui/p/8079095.html 内容持续更新,维护中 邮箱 ...

  4. Material Theme 文件名的标签(tab)被大写了

    我们平时使用的都是小写的,今天第一次使用Material Theme 这个发现标签被大写了,百度后没找到然后自己找了找设置,解决了 原来是这样的, 设置如下 设置后: 希望能帮到有同样问题的同学

  5. SQLSERVER 死锁标志

    最开始做DBA的时候,整天死锁到头痛1222,至今都能回想到这个错误窗口: 死锁定义:死锁是指在一组进程中的各个进程均占有不会释放的资源,但因互相申请被其他进程所站用不会释放的资源而处于的一种永久等待 ...

  6. 通过ArcMap发布服务

    打开ArcMap,添加一个空地图 单击添加数据按钮 单击之后出现下图 点击 (连接到文件夹)按钮选择要添加的文件.添加之后如下. 保存为mxd文件 点击保存按钮就可以保存为mxd格式文件. 选择 Fi ...

  7. SpringCloud学习笔记(6)——Eureka高可用

    参考Spring Cloud官方文档第12章12.3.12.5.12.6小节 12.3 High Availability, Zones and Regions 默认情况下,每一个Eureka服务器同 ...

  8. 基于TCP协议的项目架构之Socket流传输的实现

    项目背景  某银行的影像平台由于使用时间长,服务器等配置原因,老影像系统满足不了现在日益增长的数据量的需求,所以急需要升级改造.传统的影像平台使用的是Oracle数据库和简单的架构来存储数据(视频.图 ...

  9. linux rsync服务

    1.rsync介绍rsync是一个开源的,快速的,多功能的,可实现全量及增量的本地或远程数据同步备份的优秀工具,rsync软件适用于nunix/linux/windows多操作系统上运行.官方网站:h ...

  10. 【二分图裸题】poj1325机器调度

    题目大意:有两个机器A和B,A机器有n个模式,B机器有m个模式,两个机器最初在0模式 然后有k个作业,每个作业有三个参数i,a,b i代表作业编号,a和b代表第i作业要么在A机器的a模式下完成[或者] ...