ARM-LINUX学习记录
2024-10-07 14:13:13
1:调用C语言函数之前会有一段汇编代码在前面执行来完成软硬件方面的初始化。比如:关闭看门狗;初始化时钟;设置堆栈;调用main函数等。在学习51单片机时候这些操作是由开发环境(如KEIL)在编译C代码的时候,帮我们做好这些工作。但是在开发ARM程序时,由于ARM处理器支持多种模式,多种功能,在不同的项目里面,我们可能会选择不同的功能。这时,编译器就不知道我们需要什么功能,所以它无法帮助我们完成初始化的那些工作,而需要我们来完成这些工作。
eg:简单的启动代码
@****************************************
@ File: startup.s
@ function: start up
@ author: pang123hui
@****************************************
.text
.global _start
_start:
LDR R0,=0x7E004000 @ WATCHDOG寄存器地址
MOV R1,#0x0
STR R1,[R0] @ 写入0,禁止WATCHDOG,否则CPU会不断重启
LDR SP,=0x0c001000 @ 设置堆栈,注意:这时我们是将程序直接烧录到SDRAM中,所以堆栈要设置在SDRAM中
@ 如果将程序烧在NAND FLASH中,需将堆栈改为1024*4,因为NAND FLASH中的代码
@ 在复位后会移到内部RAM中,此RAM只有4K
BL main @ 调用C程序中的main函数
halt_loop:
B halt_loop
2:ioremap映射函数
eg:void * __ioremap(unsigned long phys_addr, unsigned long size, unsigned long flags)
入口: phys_addr:要映射的起始的IO地址,即:物理地址
size:要映射的空间的大小;
flags:要映射的IO空间的和权限有关的标志;
因为linux的驱动程序是基于操作系统之上的,它无法直接操作硬件。所以我们通过ioremap函数将硬件上的寄存器,映射为虚拟的内存,从而使驱动程序操作硬件上的寄存器。(linux系统一切皆文件的思想)。
时间:2019/07/16
最新文章
- [RESTful]HTTP状态码
- Alcatraz的安装和使用
- 《TCP/IP详解 卷一》读书笔记-----TCP persist &;Keeplive timer
- 忘记 oracle11g 的 sys 密码的处理
- c++中两种常量方法的比较
- LightOJ 1341 Aladdin and the Flying Carpet 数学
- IIS ASP.NETWEB站点部署时遇到的问题记录
- 从C#到Python —— 4 类及面向对象
- Java基础知识强化20:面向对象和面向过程的思想对比
- [iOS Animation]-CALayer 视觉效果
- 【JAVAWEB学习笔记】13_servlet
- 【Zabbix】大规模监控误报发生时的处理方案
- mysql 实现 sqlserver的row_number over() 方法
- JS设计模式(7)组合模式
- Android 4.4 根据uri获取路径的方法
- Java并发编程:并发容器之CopyOnWriteArrayList<;转>;
- 大数据应用之HBase数据插入性能优化之多线程并行插入测试案例
- ie中input光标问题
- vue.js+vue-router+webpack keep-alive用法
- 怎样用jQuery拿到select中被选中的option的值
热门文章
- Hibernate与 MyBatis的区别
- Echarts 自定义数据视图
- setInterval,setTimeout,clearInterval
- KEGG注释
- Python 递归算法指归
- php pi()函数 语法
- poj-1021--2D-Nim--点阵图同构
- VSphere随笔 - vCenter6.5安装报错 “Failed to authenticate with the guest operating system using the supplied“
- 重温《javascript高级程序设计》(第3版)
- Java + selenium 元素定位(2)之By LinkText/PartialLinkText