韦东山嵌入式arm裸板学习第一期
文章平均质量分 69
YADONCHEN
只要思想不滑坡,办法总比困难多!
展开
-
2440裸板-13-重定位
转载自:https://blog.csdn.net/qq_36243942/article/details/85935662文章目录1.为什么需要代码重定位?2.Nand Flash 和Nor Flash 的区别3.程序段的组成4.代码重定位思路5.链接脚本5.1什么是链接脚本?5.3 SECTIONS的作用:5.3.VMA和LMA的区别5.4.链接脚本如何使用6.初始化bss段数据1.为什么...转载 2020-05-12 16:38:09 · 369 阅读 · 0 评论 -
2440裸机-14-中断与异常
转载:https://blog.csdn.net/qq_36243942/article/details/86301598文章目录1.异常与中断的引入1.1.中断的概念1.2.中断类型1.3.中断的一般处理过程1.4.生活例子引入1.5.什么事情能打断我打游戏动作呢?1.6.ARM对异常(中断)的使用过程2.CPU模式(Mdde)状态(state)以及程序状态寄存器2.1.CPU的七种模式2.2...转载 2020-04-10 18:41:13 · 585 阅读 · 0 评论 -
arm linux 汇编.text .global 是什么意思?
.text .global 是arm-gcc编译器的关键词。.text 指定了后续编译出来的内容放在代码段【可执行】;.global 告诉编译器后续跟的是一个全局度可见的名字【可能是变量,也可以是函数名】;在本例中,知_start是一个函数的起道始地址,也是编译、链接后程序的起始地址。由于程序是通过加载器来加载的,必须要找到 _start名字的函数,因此_start必须定义成全局的,以专便存...原创 2020-04-09 16:22:50 · 2905 阅读 · 0 评论 -
2440裸机-12-3内存控制器与SDRAM_SDRAM设置
转载:初识SDRAM文章目录1.什么是SDRAM2.SDRAM内存芯片的内部结构2.1.逻辑Bank与芯片位宽:2.2.SDRAM存储原理2.3.芯片的存储容量:3.读写SDRAM分析的时序分析3.1.设置 SWSCON 设置为 : 0x020000003.2.设置 BANKCON63.3.REFRESH寄存器3.4.BANKSIZE 寄存器3.5.MRSRB64.编程读写SDRAM4.1.新建...转载 2020-04-08 22:06:33 · 710 阅读 · 0 评论 -
2440裸机-12-3内存控制器与SDRAM_分析NOR FLASH时序
转载:初识内存与SDRAM文章目录1.分析读写NOR FLASH的读写时序1.1为什么需要通过编程来控制读写时序呢?1.2 S3C2440如何能读写NOR FALSH的数据?1.2.1NOR FLASH 读时序1.2.2 设计一个程序去读NOR FLASH1.2.3 程序具体配置1.2.4 代码(在UART程序上添加)1.分析读写NOR FLASH的读写时序看一下S3C2440的数据手册中内...转载 2020-04-08 15:52:31 · 529 阅读 · 0 评论 -
2440裸机-12-2内存控制器与SDRAM_不同位宽设备的连接
参考文章:https://blog.csdn.net/qq_36521904/article/details/80625395https://blog.csdn.net/qq_31216691/article/details/871156971 不同位宽设备的连接1.1 SDRAM,NOR,DM9000网卡地址总线的连接如下图SDRAM:A0接ADDR2A1接ADDR3…NOR:...原创 2020-04-07 23:21:21 · 227 阅读 · 0 评论 -
2440裸机-12-1内存控制器与SDRAM_内存接口
1.内存接口介绍1.1.内存控制器的引入1.1.1 引入2440是一个SOC,其中外设分为多种类型:门电路类:GPIO协议类接口: UART I2C SPI但是对于CPU来说,并不直接控制外设,只需要将值写给相关外设模块的寄存器,CPU通过地址来区分不同的寄存器,因此就需要引入另一个控制单元——内存控制器。NAND FLASH和外接的存储器不是同一类型的,片内有一个专门的NAN...原创 2020-04-07 16:12:22 · 459 阅读 · 0 评论 -
关于内存地址与内存空间的理解
1.内存地址内存地址只是一个编号,代表一个内存空间.具体多大呢?在计算机中存储器的容量是以字节为基本单位的。也就是说一个内存地址代表一个字节(8bit)的存储空间。例如,32位的CPU理论最多支持4GB的内存空间,CPU只能寻址2的32次方(4GB).区分:4位16进制表示的内存地址和用8位16进制表示的内存地址,其实都是代表一个8bit的存储空间而已:2.理解内存程序和数据平常存储...转载 2020-04-07 16:01:32 · 12036 阅读 · 2 评论 -
2440裸机-11-5-printf函数在x86和arm平台的实现
摘要1.my_printf函数的学习2.x86平台下printf函数的实现3.arm平台下printf函数的实现1.my_printf函数相关的文件: my_printf.c; my_printf.hprintf函数规则(此处使用是自己定义,并非stdio.h中直接引用)1.未遇到%,直接输出字符,如num=,2.遇到%,处理格式字符my_printf.c:#incl...原创 2020-04-06 23:09:51 · 496 阅读 · 0 评论 -
2440裸机-11-4-从零实现用于裸机调试的printf函数,自动确定可变参数
总结1.目的:编写push_test()函数,实现自动确定可变参数2.总结上篇(手动确定可变参数)规律3.引入变参函数,替代手动确定可变参数1.手动确定可变参数规律由下图可知,每次先取值,取值完成后,直接将指针移动到下一个可变参数。以后重复操作。故上节课的代码可重新归类(即把取值后移动指针归为一个循环,而不是在每次开始前移动指针):int push_test(const c...原创 2020-04-06 20:05:05 · 239 阅读 · 0 评论 -
fatal error: sys/cdefs.h No such file or directory 解决方案
fatal error: sys/cdefs.h No such file or directory 解决方案在64位的ubuntu系统,使用gcc想编译出32位的应用程序,需要使用gcc -m32选项,但是使用gcc -m32选项后,出现:fatal error: sys/cdefs.h: No such file or directory|可以使用如下方法解决:sudo apt-...原创 2020-04-06 17:32:43 · 8471 阅读 · 2 评论 -
2440裸机-11-3-从零实现用于裸机调试的printf函数,手动确定可变参数
摘要1.目的:写一个用于裸机调试的my_printf函数(参考printf函数);2.理解在x86(32位机器)平台下,GCC编译器默认按4字节对齐, 如:结构体4字节对齐,即结构体成员变量所在的内存地址是4的整数倍。3.理解C语言格式输出函数printf函数参数传递原理;1.printf函数介绍printf是一个标准库函数,功能是:打印(变量、字符串)等等。printf的声明:...原创 2020-04-06 12:31:03 · 336 阅读 · 0 评论 -
2440裸机-11-2UART编程
UART编程总结1.初始化:uart0_innit()2.发送:putchar()3.接收:getchar()4.字符串输出:puts()以2440的UART0为例:1.初始化1.设置引脚用于串口,且使能上拉2.选择时钟源PCLK,中断/查询模式3.设置数据格式4.设置波特率5.其他设置配置uart0引脚(1)根据原理图GPH2,3用于TxD0, RxD0...原创 2020-04-05 15:57:31 · 159 阅读 · 0 评论 -
2440裸机-11-1UART硬件介绍
转载:https://www.cnblogs.com/fuzidage/p/12003751.html1.uart硬件介绍UART的全称是Universal Asynchronous Receiver and Transmitter(异步收发器)。 uart主要用于:1.打印调试2.数据传输串口通过三根线即可,发送、接收、地线。2.uart的参数和格式波特率:表示每秒传输多少b...转载 2020-04-05 10:01:00 · 178 阅读 · 0 评论 -
6-2440开发板熟悉与体验
1开发板接口介绍与串口连接2使用eop烧写裸板程序3eop烧写常见问题4使用uboot烧写裸板程序烧写到Nand5恢复出厂设置原创 2020-03-29 20:13:30 · 141 阅读 · 0 评论 -
r0-r15寄存器的作用
r0-r3 用作传入函数参数,传出函数返回值。在子程序调用之间,可以将 r0-r3 用于任何用途。被调用函数在返回之前不必恢复 r0-r3。如果调用函数需要再次使用 r0-r3 的内容,则它必须保留这些内容。r4-r11 被用来存放函数的局部变量。如果被调用函数使用了这些寄存器,它在返回之前必须恢复这些寄存器的值。r12 是内部调用暂时寄存器 ip。它在过程链接胶合代码(...转载 2020-03-26 21:07:06 · 2207 阅读 · 0 评论 -
8-第一个ARM裸板程序及引申
0.点亮LED看原理图,确定控制LED的引脚;看主芯片手册确定如何设置/控制引脚;写程序。1. 辅线1_硬件知识_LED原理图2. 辅线1_硬件知识_S3C2440启动流程与GPIO操作这种控制方式存在缺陷,会改变其他为涉及的引脚。对寄存器的访问方式:直接和间接3. 编写第1个程序点亮LED汇编基础从cpu的角度看,寄存器就是内存。汇编_机器码_...原创 2020-03-26 19:20:34 · 225 阅读 · 0 评论 -
7-ARM裸机开发步骤
各平台开发步骤:gcc和arm-linux-gcc的区别:gcc是linux系统下面用来将代码编译成一个可执行程序的手段。编译出来的是适用于linux系统的可执行二进制文件。所以你用gcc编译出来的可执行程序只有在linux系统下面可以运行。举个例子你的可执行程序里面有一句01011.这句在linux下面可能是吃饭的意思,但是在windows下面可能01011是撒尿的意思。那你说linux...原创 2020-03-26 16:06:25 · 759 阅读 · 0 评论 -
ARM启动解析
起始地址在分析启动流程之前我们首先要清楚不论是arm的何种处理器,其都是从0x0000 0000地址处开始执行程序的。以2440为例:启动方式S3C2440支持两种启动模式:NAND和非NAND(这里是Nor Flash),具体采用的方式取决于OM0、OM1两个引脚的状态。地址布局从上图我们可以清楚的看到左边的是从Nor Flash启动的地址布局,右边是从NAND启动的地址布局...转载 2020-03-25 21:54:51 · 1560 阅读 · 0 评论 -
10-ARM芯片的时钟体系
分析ARM时钟体系,以S3C2440为例:通过阅读芯片手册得出:共有三种时钟工作模式:普通模式普通模式中,包括电源管理模块、CPU核心、总线控制器、存储器控制器、中断控制器、DMA和外部主控在内的所有外设和基本模块完全可以运行。然而除基本模块外,提供给每个外设的时钟都可以由软件有选择的停止以降低功耗。空闲模式空闲模式中,停止了除总线控制器、存储器控制器、中断控制器、电源管理模块外的提供...原创 2020-03-20 23:58:51 · 679 阅读 · 0 评论 -
5-Linux进阶命令
find目的:查找符合条件的文件1)在那些目录中查找2)查找的内容格式: find 目录名 选项 查找条件举例:1)find /work/001_linux_basic/dira/ -name “test1.txt”说明:a)/work/001_linux_basic/dira/指明了查找的路径b)-name表明以名字来查找文件c)“test1.txt”,...原创 2020-03-20 19:49:27 · 134 阅读 · 0 评论 -
4-vi编辑器
vi编辑器的使用一个编辑器具备的功能1)打开文件、新建文件、保存文件2)光标移动3)文本编辑4)(多行间|多列间)复制、粘贴、删除5)查找和替换//=========================================vi编辑器的配置cd /etc/vimcp vimrc ~/.vimrccd ~gedit .vimrc在.vimrc中加入如下内容:"关闭兼...原创 2020-03-20 19:45:14 · 114 阅读 · 0 评论 -
2-Linux入门命令
基本命令pwd :显示当前所在的目录ls :显示当前目录下的文件cd :切换路径cd … 返回到上一级路径mkdir :新建目录rmdir :删除目录touch : 新建文件cp :复制文件 rm :删除文件 cat :将文件内容显示到终端中clear :清除屏幕的显示内容在shell中输入字符串并回车的过程:shell根据第1个字符串去环境变量PATH所指...原创 2020-03-20 19:43:02 · 81 阅读 · 0 评论 -
1-嵌入式Linux系统软件组成
1 Windows PC:BIOS——>(启动)windows内核——>(挂载硬盘)系统盘/应用盘——>(启动)应用程序。2 嵌入式Linux系统:bootloader——>(启动)Linux内核——>(挂载)跟系统文件——>(启动)应用程序。3 简单驱动的开发流程:...原创 2020-03-20 19:37:58 · 571 阅读 · 0 评论