[国嵌攻略][045-046][一跃进入C大门]
[一跃进入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大门]的更多相关文章
- [国嵌攻略][182][Sqlite嵌入式数据库移植]
数据库系统构成 在计算机系统中,保存数据的方式一般有两种: 1.普通文件方式 2.数据库方式 相比于普通文件方式,使用数据库来管理大批量数据具有更高的效率与安全性. 数据库系统一般由三个部分构成 1. ...
- [国嵌攻略][179][OpenSSL加密系统]
未加密传输的安全弊端 如果在网络传输中没有加密,就是以明文传输.传输的数据可以被抓包软件直接截获,并能读取里面的数据. 加密基本原理 1.对称加密 2.非对称加密 2.1.公钥私钥 公钥和私密要配对. ...
- [国嵌攻略][174][CGI快速入门-网页控制LED]
CGI程序(Common Gate Way Interface) 在服务器外部供服务器调用的程序,CGI程序与服务器配合后能让服务器完成更强大的功能. 1.浏览器通过HTML表单或超链接请求指向一个C ...
- [国嵌攻略][173][BOA嵌入式服务器移植]
1.解压boa嵌入式web服务 tar zxvf boa-0.94.13.tar.gz 2.进入src目录生成配置文件 ./configure 3.修改生成的Makefile CC=arm-linux ...
- [国嵌攻略][171][V4L2图像编程接口深度学习]
V4L2摄像编程模型 1.打开摄像头设备文件 2.获取驱动信息-VIDIOC_QUERYCAP 3.设置图像格式-VIDIOC_S_FMT 4.申请帧缓冲-VIDIOC_REQBUFS 5.获取帧缓冲 ...
- [国嵌攻略][165][usb下载线驱动设计]
查看USB设备的生产商ID和设备ID 示例: lsusb Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub 生产商ID是1d ...
- [国嵌攻略][164][USB驱动程序设计]
USB驱动模型 1.USB host controller driver(主控器驱动):为USB主控制器提供驱动程序 2.USB core(USB核心):连接USB主控制器驱动和USB设备驱动 3.U ...
- [国嵌攻略][163][linux-usb软件系统架构]
软件系统架构 1.主机端软件架构 USB设备驱动->USB核心->USB主控制器驱动->USB主控制器 2.设备端软件架构 Gadget驱动->Gadget API->U ...
- [国嵌攻略][162][USB协议分析]
USB设备逻辑结构 在USB设备的逻辑组织中,包含设备.配置.接口和端点4个层次.设备通常有一个或多个配置,配置通常有一个或多个接口,接口通常有零个或多个端点. USB设备描述符 当我们把USB设备( ...
随机推荐
- lesson - 2 笔记 yum /single /rescue /
一. yum 作用: yum 命令是在Fedora 和RedHat 以及SUSE 中基于rpm 的软件包管理器,它可以使系统管理人员交互和自动化地更新与管理R ...
- MVC 框架
MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑.数据.界面显示分离的方法组织代码 ...
- Qt编写QUI皮肤生成器
用Qt写项目写多了,为了满足不同客户的需求,需要定制不同样式的界面,QUI皮肤生成器应运而生.思考这个工具的架构花了一年时间,如何从复杂的配色方案中提取出共性,然后将共性转为具体的QSS文件.思考架构 ...
- 妙味课堂:JavaScript初级--第12课:json与数组
1.json数据格式及json语法 <!DOCTYPE html> <html lang="en"> <head> <meta chars ...
- 关于使用Log4Net将日志插入oracle数据库中
1.关于配置文件. <?xml version="1.0" encoding="utf-8" ?> <configuration> &l ...
- Ubuntu下LAMP环境配置
接下来是搭建个人学习环境,之前的随笔介绍了个人的网络配置,简单记录一下. 1. 安装apache: apt-get install apache2 2. 安装php5:apt-get install ...
- linux保持管道中颜色显示
在linux工作中,不同类型的文件以不同的颜色显示,如文件夹显示蓝色,压缩文件显示橘黄色,可执行文件显示为绿色,链接失效文件高亮显示等等: 有时候根据颜色可以快速鉴别,如我有时为了保持目录的完整性,会 ...
- 物流包裹一站式查询(TrackingMore)
快递查询接口 目前提供快递查询的接口平台有: Trackingmore 快递100 快递网 不同接口的区别: (1)Trackingmore支持380家快递公司,其中有55家为国内的快递,其余325家 ...
- Python Tkinter模块 Grid(grid)布局管理器参数详解
在使用Tkinter模块编写图像界面时,经常用到pack()和grid()进行布局管理,pack()参数较少,使用方便,是最简单的布局,但是当控件数量较多时,可能需要使用grid()进行布局(不要在同 ...
- file上传图片获取路径地址
file上传图片获取路径地址 类似:点击button,选择图片,在对应的输入框input里面显示图片路径地址 类似这样 原理:通过opacity来隐藏原生的input file 然后用.file-bt ...