自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(37)
  • 收藏
  • 关注

原创 2.uboot和系统移植-第5部分-2.5.uboot源码分析1-启动第一阶段

原因1:BL1(uboot的前一部分)在SRAM中有一份,在DDR中也有一份,因此如果是冷启动那么当前代码应该是在SRAM中运行的BL1,如果是低功耗状态的复位这时候应该就是在DDR中运行的。ARM的段式映射中长度为1MB,因此一个映射单元只能管1MB内存,那我们整个4G范围内需要4G/1MB=4096个映射单元,也就是说这个数组的元素个数是4096.实际上我们做的时候并没有依次单个处理这4096个单元,而是把4096个分成几部分,然后每部分用for循环做相同的处理。这个函数就是uboot的第二阶段。

2024-02-08 03:58:21 912

原创 2.uboot和系统移植-第4部分-2.4.uboot配置和编译过程详解

注意:uboot中配置和编译过程,所有的文件或者全局变量都是字符串形式的(不是指的C语言字符串的概念,指的是都是字符组成的序列)。uboot可移植性的实现原理:在uboot中有很多彼此平行的代码,各自属于各自不同的架构/CPU/开发板,我们在具体到一个开发板的编译时用符号连接的方式提供一个具体的名字的文件夹供编译时使用。这样就可以在配置的过程中通过不同的配置使用不同的文件,就可以正确的包含正确的文件。它里面的内容是一个宏定义,宏定义的值内容就是我们在Makefile中配置的uboot的版本号。

2023-06-05 01:53:46 178

原创 2.uboot和系统移植-第3部分-2.3.初识初体验uboot

注意:强调一下,uboot的配置阶段(其实就是根目录下面的mkconfig脚本和Makefile中配置有关的部分)主要解决的问题就是在可移植性领域能够帮助我们确定具体的文件夹的路径,然后编译时可以找到应该找到的文件,才能编译成功。(2)SoC厂商在推出一款SoC后,厂商的工程师会去uboot官网下载一个uboot,根据自己的SoC进行第一步的移植,移植的目标是厂商推出的开发板。common是普遍的普通的,这个文件夹下放的是一些与具体硬件无关的普遍适用的一些代码。另一类是env开头的,是用来实现环境变量的。

2023-06-02 03:45:04 139

转载 linux下tar命令压缩/解压缩.tar/.gz/.bz2文件、分卷压缩

tar命令是linux非常使用频率非常高的一个命令,比如:离线软件包的解压缩、将一个目录打包备份、将一个压缩包解压到一个指定的目录。tar命令主要用来将一个或者多个目录以及一个或者多个文件打包到一个以后缀为tar的文件里,同时也可以将归档的文件压缩成以tar.gz结尾的文件。可以将一个tar或者tar.gz结尾的文件解压到指定的目录下。FAT32格式的usb最大支持4G的文件,拷贝超过4G的文件需要把usb换成NTFS格式。一、linux下tar命令压缩/解压缩.tar/.gz/.bz2文件。

2023-06-01 03:37:10 11349

原创 2.uboot和系统移植-第2部分-2.2.补基础之shell和Makefile

只不过脚本程序的编译链接过程不是以脚本程序源代码为单位进行的,而是在脚本运行过程中逐行的解释执行时才去完成脚本程序源代码转成二进制的过程(不一定是编译链接,因为这行脚本程序可能早就编译连接好了,这里我们只是调用它)的。但是因为我们的shell是要在linux系统下运行的,所以换行符必须是'\n',而windows下的换行符是"\r\n",因此windows中的编辑器写的shell不能在linux下运行。(2)shell中的$# $1等内置变量的值不是不可变的,而是可以被改变,被shift指令改变。

2023-05-31 16:22:37 81

原创 Securecrt Mac版快捷键介绍

Alt + Enter -- 全屏Alt + B --打开新的连接Alt + 1/2/3/4/5.../9 -- 切换到第1/2/3/4/5.../9个标签Ctrl + A -- 光标移至行首。Ctrl + B -- 光标前移1个字符Ctrl + D -- 删除光标后1个字符Ctrl + E -- 光标移至行末Ctrl + F -- 光标后移1个字符Ctrl + H -- 删除光标前的1个字符Ctrl + J -- 回车Ctrl + k -- 删除当前光标至行末的字符。

2023-05-26 17:04:22 511

原创 1.3.ARM裸机第三部分-开发板、原理图和数据手册

一般是用一根串口线连接开发板的串口和我们笔记本电脑的串口,然后在电脑上打开一个串口监视,这样开发板上的串口输出内容就可以在电脑上看到。办法是使用USB转串口线,这种线传入电脑后需要安装驱动,安装驱动后在电脑上会形成一个串口(叫usb转串口),这样就相当于你电脑有了一个串口,可以通过这个串口来监视开发板的串口输出。3 第四部分(1.4.ARM裸机第四部分-GPIO和LED)的第一节课已经讲过了dnw下载裸机程序(dnw的介绍,dnw驱动的安装,配置下载地址的方法),大家可以先看这节课,然后再来看本节。

2023-05-25 04:29:57 114

原创 2.uboot和系统移植-第1部分-2.1.uboot学习前传

(如果你直接就用我的虚拟机,那就已经搭建好了,不用再搭建了;(4)环境变量可以被认为是系统的全局变量,环境变量名都是系统内置的(认识就认识,不认识就不认识,这部分是系统自带的默认的环境变量,譬如PATH;(2)uboot本质上是一个裸机程序(不是操作系统),一旦uboot开始SoC就会单纯运行uboot(意思就是uboot运行的时候别的程序是不可能同时运行的),一旦uboot结束运行则无法再回到uboot(所以uboot启动了内核后uboot自己本身就死了,要想再次看到uboot界面只能重启系统。

2023-05-21 01:38:01 80

原创 1.16.ARM裸机第十六部分-shell原理和问答机制引入

本节为概念篇,主要讲解了什么是shell,shell的工作方式,常见的shell有哪些,shell的实现机制等,目的是让大家对shell有直观的认识,后面才好去写shell。(4)用户输入命令的界面是一个命令行,命令行的意思就是用户输入的命令是以行为单位的,更好理解的说用户输入的命令在用户按下回车键之后就算是结束了,shell可以开始接收了。本节是shell实战第五节,我们将继续向标准命令集的shell添加更多的命令,本节实现的是pwm蜂鸣器的控制和ADC采集的控制。本节继续来实现环境变量。

2023-05-21 01:02:06 53

原创 1.15.ARM裸机第十五部分-触摸屏TouchScreen

在没有按下时测试无结果,但是在有人按下时在按下的那一点2个面板接触,接触会导致第二个面板上整体的电压值和接触处的电压值相等,所以此时测量到的电压就是接触处在第一个面板上的电压值。计算机和外部交互就是通过IO。按照之前讲的电容式触摸屏的原理,单个电容式触摸屏面板也无法支持多点触摸,但是可以将一个大的触摸面板分成多个小的区块,每个区块相当于是一个独立的小的电容式触摸屏面板。(4)触摸屏经过操作,按下之后要的就是按下的坐标,坐标其实就是位置信息,这个位置信息和电压成正比了,而这一点的电压可以通过AD转换得到。

2023-05-11 04:08:35 203

原创 1.14.ARM裸机第十四部分-LCD显示器

(之前讲过,LCd显示时实际是显示的是对应的内存中的显存区域的数值)虚拟屏幕其实就是一个内存中的显存区域,有几个显存区域就有几个虚拟屏幕,但是这些虚拟屏幕都被映射到一个真实的显示屏上面,所以将来真实的现实效果实际是这几个虚拟屏幕的显示内容的叠加。(4)必须说明:这6个参数对于LCD显示器其实本来是没用的,这些信号其实是老式的CRT显示器才需要的,LCD本身不需要,但是出于历史兼容性要求,LCD选择了兼容CRT显示器的这些时序要求,所以理解LCD显示器时序和编程时,用CRT的方式来理解不会错。

2023-05-10 01:49:14 249

转载 LCD常用接口原理

TTL接口属于并行方式传输数据的接口,采用这种接口时,不必在液晶显示器的驱动板端和液晶面板端使用专用的接口电路,而是由驱动板主控芯片输出的TTL数据信号经电缆线直接传送到液晶面板的输人接口。对于8bit单路TTI,输出接口,共有24条RGB数据线,分别是R0~R7红基色数据8条,B0~B7绿基色数据8条,BO~B7蓝基色数据8条,共3*8=24条。对于6bit单路TTL输出接口,共有18条RGB数据线,分别是R0~R5红基色数据6条,G0~G5绿基色数据6条,B0~B5蓝基色数据6条,共3*6=18条。

2023-04-09 14:47:42 1797

原创 1.13.ARM裸机第十三部分-ADC

譬如2个AD,A的量程是0〜50V,B的量程是0〜0.5V,A是12位的,B是10位的,可能B的精度比A的还要高。(1)模拟的就是连续的,现实生活当中的时间、电压、高度等都是模拟的(连续分布的,划分的话可以无限的更小划分)。(1)AD转换输出的数字值是有一定的位数的(譬如说10位,意思就是输出的数字值是用10个二进制位来表示的,这种就叫10位AD)。(2)CPU本身是数字的,而外部世界变量(如电压、温度、高度、压力···)都是模拟的,所以需要用CPU来处理这些外部的模拟变量的时候就需要做AD转换。

2023-04-02 23:34:10 113

原创 1.12.ARM裸机第十二部分-I2C通信详解

I2C通信详解

2023-04-01 10:15:30 200

原创 1.11.ARM裸机第十一部分-NandFlash和iNand

NandFlash和iNand

2023-03-24 10:38:44 312

转载 Ubuntu系统使用root远程登录

Ubuntu系统使用root远程登录

2023-03-05 19:13:32 1584 1

原创 Ubuntu 14.04无法连接ssh服务解决方法

Ubuntu 14.04无法连接ssh服务解决方法

2023-03-05 18:50:55 3074

转载 用 S5PV210 学习 Linux (一) 刷机(一)

用 S5PV210 学习 Linux (一) 刷机

2023-03-05 18:16:32 318

原创 Ubuntu14.04 安装VMware tools

Ubuntu14.04 安装VMware tools

2023-03-05 12:16:50 572

原创 ubuntu14.04直接使用root用户登录

在使用ubuntu系统搭建环境时,如果在非root环境下常会由于权限不足的问题非常头疼,所以我经常使用root用户直接登录并配置环境。,然后系统会让你输入密码,这时输入的密码就是root用户的密码了,设置完成之后就可以切换root用户登录了。在终端中用命令gedit /root/.profile,打开文件后找到“mesg n”,刚刚安装好的ubuntu系统是没有设置root密码的,首先使用普通用户登录。在普通用户模式下,给root用户设置密码输入命令。二、设置可以使用root直接登录。

2023-03-05 12:11:40 766

转载 UBUNTU14.04下VIM的安装配置

UBUNTU14.04下VIM的安装配置

2023-03-05 12:07:41 1750

原创 1.10.ARM裸机第十部分-SD卡启动详解

早期的磁盘扇区是512字节,实际上后来的磁盘扇区可以做的比较大(譬如1024字节,譬如2048字节,譬如4096字节),但是因为原来最早是512字节,很多的软件(包括操作系统和文件系统)已经默认了512这个数字,因此后来的硬件虽然物理上可能支持更大的扇区,但是实际上一般还是兼容512字节扇区这种操作方法。210中有96KB的SRAM,并且有一段iROM代码作为BL0,BL0再去启动BL1(210中的BL0做的事情在2440中也有,只不过那时候是硬件自动完成的,而且体系没有210中这么详细)。

2023-03-03 03:03:37 418

原创 1.9.ARM裸机第九部分-定时器、看门狗和RTC

(2)早期的简单单片机里(譬如51单片机)是没有专用的PWM定时器的,那时候我们需要自己结合GPIO和定时器模块来手工生产PWM波形(流程是这样:先将GPIO引脚电平拉高、同时启动定时器定T*duty时间,时间到了在isr中将电平拉低,然后定时T*(1-duty)后再次启动定时器,然后时间到了后在isr中将电平拉高,然后再定时T*duty时间再次启动定时器····如此循环即可得到周期为T,占空比为duty的PWM波形)。特别是逆变器,用SoC的GPIO输出的PWM波形来分别驱动2路整流的IGBT。

2023-02-25 21:58:55 433

原创 1.8.ARM裸机第八部分-按键和CPU的中断系统

当中断发生时,在irq_handler中依次去查询4个中断源寄存器,看哪一个的哪一位被置1,则这个位对应的寄存器就发生了中断,即找到了中断编号。要考虑中断返回的问题。(2)第二个问题,怎么找到对应的isr的问题:首先给每个中断做了个编号,进入isr_handler之后先通过查阅中断源寄存器和子中断寄存器(中哪一位为1)确定中断的编号,然后用这个编号去isr数组(isr数组是中断初始化时事先设定好的,就是把各个中断的isr的函数名组成一个数组,用中断对应的编号作为索引来查询这个数组)中查阅得到isr地址。

2023-02-20 23:00:51 277

原创 1.7.ARM裸机第七部分-串口通信详解

第一部分、章节目录1.7.1.通信涉及的几个基础概念1.7.2.串口通信的基本概念1.7.3.串口通信的基本原理1.7.4.S5PV210串行通信接口详解11.7.5.S5PV210串行通信接口详解21.7.6.S5PV210串行通信接口详解31.7.7.S5PV210串行通信编程实战11.7.8.S5PV210串行通信编程实战21.7.9.uart stdio的移植11.7.10.uart stdio的移植21.7.11.uart stdio的移植31.7.12.串口实验烧录问题总

2023-02-16 20:07:27 295

原创 1.6.ARM裸机第六部分-S5PV210的时钟系统

分频器在编程时实际对应某个寄存器中的某几个bit位,我们可以通过设置这个寄存器的这些对应bit位来设置分频器的分频系数(譬如左边进来的时钟是80MHz,分频系统设置为8,则分频器右边输出的时钟频率为10MHz)。默认的时钟都是打开的,好处是不会因为某个模块的时钟关闭而导致莫名其妙的问题,坏处是功耗控制不精细、功耗高。SoC内部的各个外设其实是挂在总线上工作的,也就是说这个外设的时钟来自于他挂在的总线,譬如串口UART挂在PSYS域下的APB总线上,因此串口的时钟来源是PCLK_PSYS。

2023-02-14 17:13:08 114

原创 java线程池

keepAliveTime,就是线程池中除了核心线程之外的其他的最长可以保留的时间,因为在线程池中,除了核心线程即使在无任务的情况下也不能被清 除,其余的都是有存活时间的,意思就是非核心线程可以保留的最长的空闲时间,创建线程和销毁线程的花销是比较大的,这些时间有可能比处理业务的时间还要长。如果每个请求都创建一个线程去处理,那么服务器的资源很快就会被耗尽,使用线程池可以减少创建和销毁线程的次数,每个工作线程都可以被重复利用,可执行多个任务。

2022-09-02 00:22:45 211

原创 Java线程死锁的原因和条件

在系统中所配置的非剥夺性资源,由于它们的数量不能满足诸进程运行的需要,会使进程在运行过程中,因争夺这些资源而陷入僵局。可把系统中的资源分为两类,一类是可剥夺性资源,是指进程在获得这类资源后,该资源可以再被其它进程或系统剥夺。还有一种是所谓的临时资源,这是指由一个进程产生,被另一进程使用一短暂时间后便无用的资源,故也称为消耗性资源,它也可能引起死锁。(2)请求和保持条件:指进程已经保持了至少一个资源,但又提出了新的资源请求,而该资源又被其它进程占有,此时请求进程阻塞,但又对自己获得的其它资源保持不放。

2022-09-02 00:18:25 415

原创 ARM裸机第五部分-SDRAM和重定位relocate

SDRAM和重定位relocate

2022-08-16 09:52:55 436 1

原创 1.4.ARM裸机第四部分-GPIO和LED

ARM裸机第四部分-GPIO和LED

2022-08-16 09:47:39 436

原创 HashMap初始容量为什么是2的n次幂及扩容为什么是2倍的形式

HashMap的初始容量都是2的n次幂的形式存在的,而扩容也是2倍的原来的容量进行扩容,也就是扩容后的容量也是2的n次幂的形式存在的,下面就来说明一下为什么是2的n次幂的形式! 先来看一下源码,也就是向HashMap中添加元素,或者扩容时是怎么存放元素的。 第一个截图是向HashMap中添加元素putVal()方法的部分源码,可以看出,向集合中添加元素时,会使用(n - 1) & hash的计算方法来得出该元素在集合中的位置;而第二个截图是HashMap扩容时调用resize()..

2020-09-02 19:42:54 1175

转载 Android的通信

Android中的几种IPC方式1、使用Bundle在Android开发中,我们通常会使用Bundle在不同的组件中传递一些数据,由于Bundle 本身已经实现了Parcelable 接口,所以它可以很方便地在进程间传输。当我们在一个进程中启动了另一个进程的Activity、Service和Receiver,我们可以将需要传输的数据放入Bundle中并通过Intent传递出去。使用示例:private void startMain() { Intent intent = n...

2020-09-02 19:40:06 231

转载 Android深入理解IPC机制(三) Android中的几种IPC方式

Android中的几种IPC方式1、使用Bundle在Android开发中,我们通常会使用Bundle在不同的组件中传递一些数据,由于Bundle 本身已经实现了Parcelable 接口,所以它可以很方便地在进程间传输。当我们在一个进程中启动了另一个进程的Activity、Service和Receiver,我们可以将需要传输的数据放入Bundle中并通过Intent传递出去。使用示例:private void startMain() { Intent intent = new .

2020-09-02 19:35:38 207

转载 Android屏幕适配基本概念

目录一、为什么要适配由于Android系统的开放性,任何用户、开发者、硬件厂商、运营商都可以对Android系统和硬件进行定制,修改成他们想要的样子。 那么这种“碎片化”到达什么程度呢?img以上每一个矩形都代表一种机型,且它们屏幕尺寸、屏幕分辨率大相径庭。随着Android设备的增多,设备碎片化、系统碎片化、屏幕尺寸碎片化、屏幕碎片化的程度也在不断加深。备注:Android系统碎片化:基于Google原生系统,小米定制的MIUI、魅族定制的flyme、华为定制的EMUI等等..

2020-09-02 19:34:20 254

转载 Android性能优化:Bitmap详解&你的Bitmap占多大内存?

在开发app时,显示一张本地图片,这张图片在加载时会占用大多内存呢?猜测占用内存大小和以下几个因素有关:设计师切图,图片本身的分辨率; 图片所放文件夹代表的 密度 dpi; 手机自身的屏幕密度; 经过系统缩放得到的最终加载到手机上图片的密度和占用的内存。我们知道Android中在加载本地大图时,很容易OOM,主要原因在于加载的Bitmap占用内存太大。接下来将围绕以下几个问题说明如何计算一张Bitmap占用的内存大小。将一张分辨率为 720x1080 的图片放到 xxhdpi 或者 hdpi

2020-09-02 19:32:06 521

转载 Android中Bitmap内存优化

Android开发中,Bitmap是经常会遇到的对象,特别是在列表图片展示、大图显示等界面。而Bitmap实实在在是内存使用的“大客户”。如何更好的使用Bitmap,减少其对App内存的使用,是Android优化方面不可回避的问题。因此,本文从常规的Bitmap使用,到Bitmap内存计算进行了介绍,最后分析了Bitmap的源码和其内存模型在不同版本上的变化。Bitmap的使用一般来说,一个对象的使用,我们会尝试利用其构造函数去生成这个对象。在Bitmap中,其构造函数:// calle.

2020-09-02 19:30:34 160

转载 Android Jetpack架构组件

Jetpack时Google新推出的一种架构模式,按照Google官方的说明,它有以下优点加速开发:组件可以单独采用(不过这些组件是为协同工作而构建的),同时利用 Kotlin 语言功能帮助您提高工作效率。 消除样板代码:Android Jetpack 可管理繁琐的 Activity(如后台任务、导航和生命周期管理),以便您可以专注于如何让自己的应用出类拔萃。 构建高质量的强大应用:Android Jetpack 组件围绕现代化设计实践构建而成,具有向后兼容性,可以减少崩溃和内存泄漏。 同时指出了

2020-09-02 19:28:02 108

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除