自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 嵌入式学习的两大误区

很多想学嵌入式Linux 的同学经常问我,我不会Linux系统,怎么学习嵌入式Linux开发,于是他们就花费了大量的精力和时间去研究学习桌面版本Linux系统的使用,什么redhat 、federo,、ubuntu等等都用过,如何配置Linux,Linux的各种使用命令都背的滚瓜烂熟,Linux各种服务器的配置,还原备份各种操作非常熟悉,以为这样就学会了嵌入式Linux开发。我们的目标不是学习Linux服务器的配置和使用,Linux服务器的高级配置和使用那是另外一个领域,不属于嵌入式Linux讨论的范畴。

2023-11-03 09:50:49 377

原创 嵌入式自学路线大披露!!!

显然,这个应用程序就要读取配置文件,根据配置文件去启动用户程序(监控、手册界面、平板界面等等)这个问题提示我们,文件系统的内容是有一些约定的,比如要有/sbin/init,要有配置文件。简单的自问自答到这里,要想深入了解,可以看一下busybox的init.c,就可以知道init进程做的事情了。1. 我在学校时读的是物理电子专业,其实课程里没有教怎么设计电路,只是教了些电子电路方面的知识。3. 在实验室、在第1家公司,就是设计些简单的PCI卡,写一下windows的驱动程序。它运行时,得找到库。

2023-11-02 11:34:39 376

原创 如何从bootloader开始嵌入式学习?

这需要一定的硬件知识,不求你能设计硬件,但是至少能看懂;答:这个地址用"链接脚本"决定,在ADS里有scatter文件,KEIL里也有类似的文件。对于bootloader,我学习时是先看了<ARM体系架构与编程>,然后自己写程序把各个硬件的实验都做了一遍,在ADS或KEIL里,重定位的代码是制作这些工具的公司帮你写好了。2. 但是Flash一般是只能读不能直接写的,如果我用到全局变量,这些全局变量在哪里?4. 内存那么大,我怎么知道把"原来存在Flash上的内容"读到内存的"哪个地址去"?

2023-11-01 09:57:44 383

原创 作为一个新人,怎样学习嵌入式Linux?

在嵌入式Linux里也许我们用QT也许用Android,这个时候你应该去学学QT、Android的编程。你学过VC的话,也是要花时间去了解那些类、控件的。也许你说在嵌入式上要做些优化,是的,要优化,但是未经优化的程序和PC上的程序开发没什么差别。学C语言唯一的方法是多写程序多练习,编译出错没关系,自己去解决;如果你是想做应用开发,那么你去把C语言、数据结构、JAVA什么的学好吧。回到主题,首先我们要明白你的目的是什么,大概来说所谓。,这是我的专长,倒是可以说一点。,不涉及界面这些东西,

2023-10-31 13:37:05 293

原创 怎么避免野指针?

(3)所以NULL的实质其实就是地址0,然后我们给指针赋初值为NULL,其实就是让指针指向0地址处。为什么指向0地址处?(1)野指针的错误来源就是指针定义了以后没有初始化,也没有赋值(总之就是指针没有明确的指向一个可用的内存空间),然后去解引用。(2)知道了野指针产生的原因,避免方法就出来了:在指针的解引用之前,一定确保指针指向一个绝对可用的空间。(2)在C语言中,int *p,你可以p = (int *)0,但是不可以p = 0,因为类型不同。第三点:在指针解引用之前,先去判断这个指针是不是NULL。

2023-10-30 09:07:02 309

原创 嵌入式学习笔记(65)野指针问题

第三种情况就是指向了一个可用的空间,而且这个空间其实在程序中正在被使用(譬如说是程序的一个变量x),那么野指针的解引用就会刚好修改这个变量x的值,导致这个变量莫名其妙的被改变,程序出现离奇的错误。(5)指针变量如果是局部变量,则分配在栈上,本身遵从栈的规律(反复使用,使用完不擦出,所以是脏的,本次在栈上分配到的变量的默认值是上次这个栈空间被使用时余留下来的值),就决定了栈的使用多少会影响这个默认值。(1)野指针,就是指针指向的位置是不可知的(随机的、不正确的、没有明确限制的)

2023-10-29 15:23:43 130

原创 嵌入式学习笔记(64)指针带来的一些符号的理解

譬如“我回家了”,这里面的家指的是你家的房子(类似于左值);我们写的代码是给编译器看的,代码要想达到你想象的结果,就必需要编译器对你的代码的理解和你自己对代码的理解一样。当一个变量做右值时,编译器认为这个变量符号的真实含义是这个变量的值,也就是这个变量所对应的内存空间中存储的那个数。(2)*在用于指针相关功能的是后续有2种用法:第一种是指针定义时,*结合前面的类型用于表明要定义的指针的类型;取地址符使用时直接加在一个变量的前面,然后取地址符和变量加起来构成一个新的符号,这个符号表示这个变量的地址。

2023-10-28 17:56:59 166

原创 走进人工智能的大门:打造职业梦想的契机

华清远见教育科技集团,成立于2004年,是一家集产学研用于一体的科技驱动型新一代信息技术领域教育服务领导品牌。致力于让每位学子都能简单直接高效地获取紧跟科技时代前沿的IT教育服务,实现高端职业梦想。从线下到线上,从教学到研发,从理论到实践,从校园到职场,同时为企业、高校、个人提供全方位的人才培养解决方案。目前已在全国主要一二线城市成立12个学习中心,为企业输送27余万IT人才,并为1000余所高校20000余家企业赋能人才培养和人才支撑。

2023-10-28 17:55:23 417

原创 嵌入式学习笔记(63)指针到底是什么

在汇编中都有间接访问(CPU访问内存通过CPU中的寄存器写入内存地址来实现间接访问,譬如:ldr r0, [r1] 将CPU中的r1寄存器中保存的DDR内存地址处所保存在DDR内存中的值赋值给r0寄存器),其实就是CPU的寻址方式中的间接寻址。(2)此时如果我们解引用p,则相当于我们访问了这个随机数字为地址的内存空间。(1)当我们int *p 定义一个指针变量p时,因为p是局部变量,所以也遵循C语言局部变量的一般规律(定义局部变量并且未初始化,则值是随机的),所以此时p变量中存储的是一个随机的数字。

2023-10-26 10:03:31 138

原创 嵌入式学习笔记(63)位操作实战

说明这个式子应该是 ~(~(0U)<<(m-n+1)) << (n-1) ,这就又分为2部分了。(4)给定一个整形数a,清除a的bit15~bit23,保持其他位不变。(2)给定一个整形数a,设置a的bit3~bit7,保持其他位不变。(3)给定一个整型数a,清除a的bit15,保证其他位不变。(1)给定一个整型数a,设置a的bit3,保证其他位不变。分析为什么要>>(n-1),相当于是我们(5)中的第二步。(5)给定一个整形数a,取出a的bit3~bit8。分析为什么要&,相当于我们(5)中的第一步。

2023-10-25 20:42:36 314

原创 嵌入式学习笔记(62)如何用位运算构建特定二进制数

(譬如本例中要构造的数bit4~bit10为0其余位为1,那我们就先构造一个bit4~bit10为1,其余位为0的数,然后对这个数按位取反即可) ~(0x7f<<4)(1)从上节可知,对寄存器特定位进行置1或者清0或者取反,关键性的难点在于要事先构建一个特别的数,这个数和原来的值进行位与、位或、位异或等操作,即可达到我们对寄存器操作的要求。(2)更难一点的要求:获取bit3~bit7为1,同时bit23~bit25为1,其余位为0的数:((0x1f<<3) | (0x7<<23))

2023-10-24 15:18:28 147

原创 嵌入式学习笔记(61)位操作寄存器时的特殊作用

读改写的操作理念,就是:当我想改变一个寄存器中某些特定位时,我不会直接去给他写,我会先读出寄存器整体原来的值,然后在这个基础上修改我想要修改的特定位,再将修改后的值整体写入寄存器。(2)如果希望将一个寄存器的某些特定位变成0而不影响其他位,可以构造一个合适的1和0组成的数和这个寄存器原来的值进行位与操作,就可以将特定位清零。我们要构造这样一个数:要置1的特定位为1,其他位为0,然后将这个数与原来的数进行位或即可。(1)回顾上节讲的位或操作的特点:任何数,其实就是1或者0)与1位或变成1,与0位或无变化。

2023-10-23 09:39:05 209

原创 嵌入式学习笔记(61)位操作符

(3)从真值表可以看出:位或操作的特点是:只有2个0相位或才能得到0,只要有1个1结果就一定是1.位异或:(任何数,其实就是1或者0)与1位异或会取反,与0位异或无变化。(1)位异或真值表:1^1=0 0^0=0 1^0=1 0^1=1。位与:(任何数,其实就是1或者0)与1位与无变化,与0位与变成0。位或:(任何数,其实就是1或者0)与1位或变成1,与0位或无变化。(2)真值表:1&0=0 1&1=1 0&0=0 0&1=0。(2)真值表:1|0=1 1|1=1 0|0=0 0|1=1。

2023-10-22 10:28:41 194

原创 嵌入式学习笔记(60)内存管理之堆

如果申请内存并使用后未释放,这段内存就丢失了(在堆管理器的记录中,这段内存仍然属于你这个进程,但是进程自己又以为这段内存已经不用了,再用的时候又会去申请新的内存块,这就叫吃内存。它的工作原理是:先重新创建一个新的数组大小为要更改后的数组,然后将原数组的所有元素复制进新的数组,然后释放掉原数组,最后返回新的数组给用户。内存管理对OS来说是一件非常复杂的事,因为首先内存容量大,其次内存需求在时间和大小块上没有规律(OS上运行着几十、几百、几千个进程随时都会申请或者释放内存,申请或者释放的内存块大小随意)。

2023-10-21 10:14:22 232

原创 嵌入式学习笔记(59)内存管理之栈

我们在C语言中定义一个局部变量时(int a),编译器会在栈中分配一段空间(4字节)给这个局部变量用(分配时栈顶指针会移动给出空间,给局部变量a用的意思就是,将这字节的栈内存的内存地址和我们定义的局部变量名a给关联起来),对应栈的操作是入栈。因为这段内存空间在栈上,而栈内存是反复使用的(脏的,上次用完没清零的),所以说使用栈来实现的局部变量定义时如果不显式初始化,值就是脏的(也就是随机值)。首先,栈是有大小的。队列的特点是入口和出口都有,必须从入口进,从出口出,所以先进去的必须先出来,否则就堵住后边的。

2023-10-20 17:50:15 182

原创 嵌入式学习笔记(59)内存管理之结构体

不过别担心,我为大家整理了一份150多G的学习资源,基本上涵盖了嵌入式物联网学习的所有内容。这样包含了函数指针的结构体就类似于面向对象中的class,结构体中的变量类似于class中的成员变量,结构体中的函数指针类似于class中的成员方法。数组的优势:数组比较简单,访问使用下标,可以随机访问(就是可以通过下标随机访问需要访问的元素)。数组的缺陷:(1)数组中元素类型必须相同 (2)数组大小必须在定义时给出,而且一旦给出不能更改。C语言作为面向过程的语言,可以通过结构体内嵌指针实现面向对象的代码。

2023-10-19 09:41:29 150

原创 嵌入式学习笔记(58)C语言的内存操作

在很多情况下,我们定义的8位char变量,编译器会帮我们分配32位内存来存储这个char变量,也就是说浪费了24位的内存,但是效率高。CPU要访问一个int型数据,则首先取地址,这里的地址指的是int型数据单元的首地址,即4字节中的首字节的地址,然后就可以读取到这4个字节空间中所保存的数据。在程序运行中,CPU实际只认识内存地址,而不关心这个地址所代表的空间在哪里、怎么分布等这些实体问题,因为硬件设计保证了这个地址就一定能找到这个格子,所以内存单元的2个概念:地址和空间是内存单元的两个方面。

2023-10-18 09:59:31 192

原创 嵌入式学习笔记(58)程序运行为什么需要内存?

哈佛结构就是将程序的代码和数据分开存放的一种结构,而他们存放的位置可以是相同的也可以是不同的(ROM&RAM或者RAM),总之只要是分成两个部分单独访问的结构都可以叫哈佛结构。)哈佛结构的特点就是代码和数据单独存放,使之不会互相干扰,进而当程序出BUG时,最多只会修改数据的值(因为代码部分是只读的,不可改写),而不会修改程序的执行顺序。对于S5PV210的程序来说,程序运行时要存放代码和数据,代码放在DRAM的只读权限代码段,数据放在DRAM的可读可写数据段,程序要跑,内存是必要条件。

2023-10-17 20:29:42 229

原创 嵌入式学习笔记(57)LCD如何显示图像

(1)LCD驱动器一般和LCD显示面板集成在一起(本来是分开的,做面板的是只做面板的,譬如说三星、LG、台湾的友达、奇美都是做面板的;LCD驱动器芯片负责给面板提供控制液晶分子的模拟电信号,驱动器的控制信号(数字信号)来自于自己的数字接口,这个接口就是LCD屏幕的外部接口(第二节中讲到的接口)。(2)像素可以被单独控制,或控制其亮或不亮(单色屏)、或控制其亮度强弱(譬如亮50%,35%,这样叫灰度屏,以前的黑白电视机)、或控制其显示一定的颜色(这就是我们现在最常用的彩色显示屏)。

2023-10-16 09:10:21 400

原创 嵌入式学习笔记(56)LCD的接口技术

(3)TTL电平的缺陷就是不能传递太远,如果LCD屏幕和主机控制器太远(1米甚至更远)就不能直接TTL连接了,要进行转换。(2)SoC的LCD控制器硬件接口是TTL电平的,LCD这边硬件接口也是TTL电平的。(4)VCLK(像素时钟):LCD工作时需要主板控制器给LCD模组一个工作时钟信号,就是VCLK。(6)LEND(行结束标志,不是必须的):时序信号,非必须,譬如x210接口就没有。(3)VSYNV(垂直同步信号):时序信号线,为了让LCD能够正常显示给的控制信号。(2)HSYNC(水平同步信号)

2023-10-15 09:39:18 232

原创 嵌入式学习笔记(55)LCD简介

(2)液晶是一种材料,液晶这种材料具有一种特点:可以在电信号的驱动下液晶分子进行旋转,旋转时会影响透光性,因此我们可以在整个液晶面板后面用白光照(称为背光),可以通过不同电信号让液晶分子进行选择性的透光,此时在液晶面板前面看到的就是各种各样不同的颜色,这就是LCD显示。有些显示器(譬如LED显示器、CRT显示器)自己本身会发光称为主动发光,有些(LCD)本身不会发光只会透光,需要背光的协助才能看起来是发光的,称为被动发光。(4)液晶应用领域:电视机、电脑显示屏、手机显示屏、工业显示屏等····

2023-10-14 19:57:22 198

原创 嵌入式学习笔记(54)S5PV210的ADC控制器

(1)等待触摸屏转换完毕的方法有2种:一种是检查标志位,第二种是中断。第一种方法是同步的,第二种方式是异步的。(2)AD转换都是需要反复进行的,那么转完一次一般要立即开启下一次转换,所以需要有一种机制能够在一次转完时自动开启下一次转换。这个机制就叫start by read,这个机制的工作方法是:当我们读取本次AD转换的AD值后,硬件自动开启下一次AD转换。数字引脚和模拟引脚一般是不能混用的。(2)电阻式触摸屏本身工作时就依赖于AD转换,所以在210的SoC中电阻触摸屏接口本身和ADC接口是合二为一的。

2023-10-13 15:24:37 158

原创 嵌入式学习笔记(53)ADC的主要相关概念

(4)AD的模拟量程一样的情况下,AD精度位数越多精度越高,测出来的值越准。譬如2个AD,A的量程是0~50V,B的量程是0~0.5V,A是12位的,B是10位的,可能B的精度比A的还要高。这个时间需要多久,不同的芯片是不一样的,同一颗芯片在配置不一样(譬如说精度配置为10位时时间比精度配置为12位时要小,譬如说有些AD可以配转换时钟,时钟频率高则转换时间短)时转换时间也不一样。(1)AD转换输出的数字值是有一定的位数的(譬如说10位,意思就是输出的数字值是用10个二进制位来表示的,这种就叫10位AD)。

2023-10-12 15:11:07 244

原创 嵌入式学习笔记(52)ADC的引入

(2)数字的就是离散的,离线的就是不连续的。数字化就是离散化,就是把连续分布的模拟量按照一定精度进行取点(采样)变成有限多个不连续分布的数字值,就叫数字量。(1)模拟的就是连续的,现实生活当中的时间、电压、高度等都是模拟的(连续分布的,划分的话可以无限的更小划分)。(2)CPU本身是数字的,而外部世界变量(如电压、温度、高度、压力···)都是模拟的,所以需要用CPU来处理这些外部的模拟变量的时候就需要做AD转换。(4)计算机处理参量的时候都是数字化的,计算机需要数字化的值来参与运算。

2023-10-11 10:02:41 193

原创 嵌入式学习笔记(51)X210板载gsensor介绍

(2)I2C从设备地址本身是7位的,但是在I2C通信中发送I2C从设备地址时实际发送的是8位,这8位中高7位(bit7~bit1)对应的I2C从设备的7位地址,最低一位(LSB)存放的是R/W信息(就是说下一个数据时主设备写从设备读(对应0),还是主设备读从设备写(对应1))(3)重力加速度传感器、地磁传感器、陀螺仪等三个传感器结合起来,都是用来感测运动的速度、方位等信息的,所以现在有9轴传感器,就是把三者结合起来,并且用一定的算法进行综合得出结论,目的是更加准确。(2)可以用来设计智能手表的计步器功能。

2023-10-10 09:48:03 278

原创 嵌入式学习笔记(50)S5PV210的I2C控制器

(3)移位寄存器(shift register),将代码中要发送的字节数据,通过移位寄存器变成1个位一个位的丢给SDA线上去发送/接收。(1)时钟部分,时钟来源是PCLK_PSYS,经过内部分频最终得到I2C控制器的CLK,通信中这个CLK会通过SCL线传给从设备。(3)第二级分频是得到最终I2C控制器工作的时钟,以I2CCLK这个中间时钟为来源,分频系数为[1,16]。(4)最终要得到的时钟是2级分频后的时钟,譬如一个可用的设置是:65000KHz/512/4=31KHz。(4)地址寄存器+比较器。

2023-10-09 22:25:31 125

原创 嵌入式学习笔记(49)由I2C学通信时序

如果从设备拉低总线失败,或者从设备根本就没有拉低总线,则主设备看到的现象就是总线在第9周期仍然一直保持高,这对主设备来说,意味着我没收到ACK,主设备就认为刚才给从设备发送的8位不对(接收失败)。(2)主设备在每个通信周期会先发8位的从设备地址(其实8位中只有7位是从设备地址,还有1位表示主设备下面是要写入还是读出)到总线(主设备是以广播的形式发送的,只要是总线上的所有设备其实都能收到这个信息)。(4)在某一通信时刻,主设备和从设备只能有一个在发(占用总线,也就是向总线写),另一个在收(从总线读)。

2023-10-08 14:55:31 231

原创 嵌入式学习笔记(48)什么是I2C通信

(3)每一个I2C从设备在通信中都有一个I2C从设备地址,这个设备地址是从设备本身固有的属性,然后通信时主设备需要知道自己将要通信的那个设备的地址,然后在通信中通过地址来甄别是不是自己要找的那个从设备。(4)低速率:I2C一般是用在同一个板子上的2个IC之间的通信,而且用来传输的数据量不大,所以本身通信速率很低(一般几百KHz,不同的I2C芯片的通信速率可能不同,具体在编程时要看自己所使用的设备允许的I2C通信最高速率,不能超过这个速率)。(2)主设备来负责调度总线,决定某一时间和哪个从设备通信。

2023-10-07 13:37:33 182

原创 嵌入式学习笔记(47)Nand的常见操作及流程分析

等待方法是SoC不断读取状态寄存器(这个状态寄存器有2种情况:一种是SoC的Nand控制器自带的,另一种是SoC通过发命令得到命令响应得到的),然后通过检查这个状态寄存器的状态位就能知道Nand接口电路刚才写的那一页数据写完了没、写好了没。当我们操作Nand芯片时,只要按照SoC的要求按时打开ECC生成开关,则当我们写入Nand芯片时SoC的Nand控制器的ECC模块会自动生成ECC数据放在相应的寄存器中,然后我们只需将这生成的ECC数据写入Nand芯片的带外数据区即可;(1)擦除时必须给块对齐的地址。

2023-10-06 10:55:23 396

原创 嵌入式学习笔记(46) NandFlash的结构

其中2K字节数据带内数据,是我们真正的存储空间,将来存储在Nand中的有效数据就是存在这2K范围内的(我们平时计算Nand的容量时也是只考虑这2KB);(1)Nand的页和以前讲过的块设备(尤其是硬盘)的扇区是类似的。Nand也是一样,不同的Nand的页的大小是不同的,也有512字节/1024字节/2048字节/4096字节等。总结:Nand的组织架构挺乱的,接口时序也不同,造成结果就是不同厂家的Nand芯片,或者是同一个厂家的不同系列型号存储容量的Nand接口也不一样。坏块是不可避免的,而且。

2023-10-05 16:41:07 357

原创 嵌入式学习笔记(45) NandFlash的接口

所以Nand是地址编排精确到字节,但是实际读写却只能精确到页(所以Nand的很多操作要求给的地址是页对齐的,譬如2K、4K、512K等这样的地址,不能给3K这样的地址)。Nand接口是一种公用接口,是一种标准,理论上来说外部SoC可以直接模拟Nand接口来读写Nand芯片,但是实际上因为Nand接口对时序要求非常严格,而且时序很复杂,所以一般的SoC都是通过专用的硬件的Nand控制器(这些控制器一般是作为SoC内部外设来存在的)来操控Nand芯片的。(1)Nand有8位数据位的,也有16位数据位的。

2023-10-04 11:16:13 389

原创 嵌入式学习笔记(44)S5PV210的SD卡启动实战

它的实现方式是:iROM启动,然后从SD卡的扇区1开始读取16KB的BL1然后去执行BL1,BL1负责初始化DDR,然后从SD卡中读取整个程序(BL1+BL2)到DDR中,然后从DDR中执行(利用ldr pc, =main这种方式以远跳转到iRAM中运行的BL1跳转到DDR中运行BL2)。(3)细节2:uboot在烧录到SD卡的时候,先截取uboot.bin的前16KB(实际脚本截取的是8KB)烧录到SD卡的block1~block32,然后将整个uboot烧录到SD卡的某个扇区中(譬如49扇区)

2023-10-04 11:15:25 232

原创 嵌入式学习笔记(43)S5PV210的SD卡启动详解

像我们x210开发板,板子贴片好的时候,内部inand是空的,此时直接启动无启动,因为此时inand是空的,所以第一启动失败,会转入第二启动,就从外部SD2通道的SD卡启动了。SteppingStone(启动基石)技术就是在SoC内部内置4KB的SRAM,然后开机时SoC根据OMPin判断用户设置的启动方式,如果是NandFlash启动,则Soc的启动部分的硬件直接从外部NandFlash中读取开头的4KB到内部SRAM作为启动内容。(2)BL1执行之后剩下的就是软件的事情了,SoC就不用再去操心了。

2023-10-03 10:15:33 255

原创 嵌入式学习笔记(42)SD卡的编程接口

(2)SD卡内部出了存储单元Flash外,还有SD卡管理模块,我们SoC和SD卡通信时,通过9针引脚以SD协议/SPI协议向SD卡管理模块发送命令、时钟、数据等信息,然后从SD卡返回信息给SoC来交互。(1)SD卡与SRAM/DDR/SROM之类的东西的不同:SRAM/DDR/SROM之类的存储芯片是总线式的,只要连接上初始化好之后就可以由SoC直接以地址方式来访问,但是SD卡不能直接通过接口给地址来访问, 它的访问需要按照一定的接口协议(时序)来访问。(1)SD协议是专门用来和SD卡通信的。

2023-10-03 10:13:56 225

原创 嵌入式学习笔记(41)SD卡启动详解

内存和外存的区别:一般是把这种RAM(random access memory,随机访问存储器,特点是任意字节读写,掉电丢失)叫内存,把ROM(read only memory,只读存储器,类似于Flash SD卡之类的,用来存储东西,掉电不丢失,不能随机地址访问,只能以块为单位来访问)叫外存。这些东西的本质还是NandFlash,内部由Nand的存储颗粒构成,再集成了块设备管理单元,综合了SD卡为代表的各种卡的优势和原始的NandFlash芯片的优势。这样做的好处就是不同厂家的SD卡可以通用。

2023-10-02 09:16:09 222

原创 嵌入式学习笔记(41)实时时钟RTC

(3)BCD码的作用在于可以将十进制数拆成组成这个十进制数的各个数字的编码,变成编码后就没有位数的限制了。当我们从寄存器BCDMIN中读取一个时间时(譬如读取到的是0x59),需要将之当做BCD码转成十进制再去显示(0x59当做BCD码就是59,转成十进制的59,所以显示就是59分)。(2)RTC是SoC中一个内部外设,RTC有自己独立的晶振提供RTC时钟源(32.768KHz),内部有一些寄存器用来记录时间(年月日时分秒星期)。(1)RTC中所有的时间(年月日时分秒星期,包括闹钟)都是用BCD码编码的。

2023-10-02 09:13:14 253

原创 嵌入式学习笔记(40)看门狗定时器

(4)典型应用情景是:我们在应用程序中打开看门狗设备,初始化好给它一个时间,然后应用程序使用一个线程来喂狗,这个线程的执行时间安全短于看门狗的复位时间。(1)PCLK_PSYS经过两级分频后生成WDT(watchdog timer)的时钟周期,然后把要定的时间写到WTDAT寄存器中,刷到WTCNT寄存器中去减1,减到0时(定时时间到)产生复位信号或中断信号。(5)补充:实战中有时候为了绝对可靠,我们并不会使用SoC中自带的看门狗,而是使用专门的外置的看门狗芯片来实现看门狗。

2023-10-01 09:51:46 255

原创 嵌入式学习笔记(39)蜂鸣器和PWM定时器编程实践

(5)据以上分析,只要用PWM波形的电压信号来驱动蜂鸣器,把PWM波形的周期T设置为要发出的声音信号的1/频率即可;(1)蜂鸣器里边有2个金属片,离得很近但没挨着。没电的时候两个金属片在弹簧本身的张力作用下分开彼此平行,有电的时候两边分别充电,在异性电荷的吸力作用下两个片挨着。(2)我们只要以快速的频率给蜂鸣器的正负极供电、断电,进行这样的循环,蜂鸣器的两个弹簧片就会挨着分开挨着分开···形成敲击,发出声音。(3)人耳能听见的声音频率是有限的(20Hz~20000Hz),我们实验时一般给个2KHz的频率。

2023-10-01 09:50:41 424

原创 嵌入式学习笔记(38)什么是PWM

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

2023-09-30 14:49:07 437

原创 嵌入式学习笔记(37) S5PV210的PWM定时器

(3)工作流程就是:我们事先算好TCNT寄存器中开始减的那个数(譬如300),然后将之写入TCNTB寄存器中,在启动timer前,将TCNTB中的值刷到TCNT寄存器中(有一位寄存器专门用来操作刷数据过去的),刷过去后就可以启动定时器开始计时;(2)S5PV210的5个PWM定时器的时钟源为PCLK_PSYS,timer0和timer1共同使用一个预分频器,timer2、3、4共同使用一个预分频器;可以选择的有1/1、1/2、1/4、1/8、1/16等。(1)叫定时器说明它本质上的原理是定时器。

2023-09-30 14:47:44 257

空空如也

空空如也

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

TA关注的人

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