- 博客(91)
- 资源 (1)
- 收藏
- 关注
原创 嵌入式100题(90):嵌入式系统中经常要用到无限循环,你怎么样用C编写死循环呢?...
嵌入式系统中经常要用到无限循环,你怎么样用C编写死循环呢? 一、while(1) { }没有划定初始化、更新区域的代码块(位置)。这两项代码的书写,就由作者来随意设置(完成)。后人接手程序,就要花精力查找,无形中增添了工作量。用圆括号括起的判断部分,要求的不是代码块,而是一个,仅一个表达式。这就要求每次判断,都要执行这个表达式,以求得表达式的值,来决定是否继续执行循环。换句话,每次循环...
2021-03-02 17:09:00
3480
1
原创 嵌入式100题(89):arm和dsp有什么区别
arm和dsp有什么区别 ARM具有比较强的事务管理功能,可以用来跑界面以及应用程序等,其优势主要体现在控制方面,它的速度和数据处理能力一般,但是外围接口比较丰富,标准化和通用性做的很好,而且在功耗等方面做得也比较好,所以适合用在一些消费电子品方面; 而DSP主要是用来计算的,比如进行加密解密、调制解调等,优势是强大的数据处理能力和较高的运行速度。由于其在控制算法等方面很擅长,所以适合用...
2021-02-27 15:15:00
460
原创 嵌入式100题(88):什么是异步串口和同步串口
什么是异步串口和同步串口 串行通信进行数据传送时是将要传送的数据按二进制位,依据一定的顺序逐位发送到接收方。其有两种通信方式:异步通信和同步通信。 异步通信,是指数据传送以字符为单位,字符与字符间的传送是完全异步的,位与位之间的传送基本上是同步的。异步通信采用固定的通信格式,数据以相同的帧格式传送。每一帧由起始位、数据位、奇偶校验位和停止位组成。异步串行通信的特点可以概括为:以字符为...
2021-02-27 15:14:00
665
原创 嵌入式100题(87):请说明总线接口USRT、I2C、USB的异同点(串/并、速度、全/半双工、总线拓扑等)...
请说明总线接口USRT、I2C、USB的异同点(串/并、速度、全/半双工、总线拓扑等) UART:通用异步串行口,速率不快,可全双工,结构上一般由波特率产生器、UART发送器、UART接收器组成,硬件上两线,一收一发。 I2C:双向、两线、串行、多主控接口标准。速率不快,半双工,同步接口,具有总线仲裁机制,非常适合器件间近距离经常性数据通信,可实现设备组网。 SPI:高速同步串行口,...
2021-02-27 15:13:00
1560
原创 嵌入式100题(86):简述处理器在读内存的过程中,CPU核、cache、MMU如何协同工作?画出CPU核、cache、MMU、内存之间的关系示意图加以说明...
简述处理器在读内存的过程中,CPU核、cache、MMU如何协同工作?画出CPU核、cache、MMU、内存之间的关系示意图加以说明 现代操作系统普遍采用虚拟内存管理机制,这需要MMU(Memory Management Unit,内存管理单元)的支持。有些嵌入式处理器没有MMU,则不能运行依赖于虚拟内存管理的操作系统。 操作系统可以分成两类,用MMU的、不用MMU的。用MMU的是:Wi...
2021-02-27 15:12:00
849
原创 嵌入式100题(85):扇区 块 页 簇的概念
扇区 块 页 簇的概念1、什么是扇区和(磁盘)块? 物理层面:一个磁盘按层次分为 : 磁盘组合 -> 单个磁盘 -> 某一盘面 (platter)-> 某一磁道 (track)-> 某一扇区(sector)。 磁头(head):读写头, 柱面(cylinder):柱面是我们抽象出来的一个逻辑概念,简单来说就是处于同一个垂直区域的磁道称为柱面 ,即各盘面上...
2021-02-27 15:09:00
363
原创 嵌入式100题(84):IO口工作方式:上拉输入 下拉输入 推挽输出 开漏输出
IO口工作方式:上拉输入 下拉输入 推挽输出 开漏输出 1、上拉电阻:将一个不确定的信号,通过一个电阻与电源VCC相连,固定在高电平。在IO口为输入模式且为上拉电阻时,IO口的常态为高电平。 2、下拉电阻:将一个不确定的信号,通过一个电阻与地GND相连,固定在低电平。在IO口为输入模式且为下拉电阻时,IO口的常态为低电平。 3、推挽输出:可以输出高、低电平,连接数字器件。推挽结果一般...
2021-02-27 15:07:00
2336
原创 嵌入式100题(83):ROM RAM的概念浅析
ROM RAM的概念浅析 随机存取存储器(Random Access Memory,RAM)又称作“随机存储器”,是与CPU直接交换数据的内部存储器,也叫主存(内存)。它可以随时读写,而且速度很快,通常作为操作系统或其他正在运行中的程序的临时数据存储媒介。当电源关闭时RAM不能保留数据。如果需要保存数据,就必须把它们写入一个长期的存储设备中(例如硬盘)。RAM和ROM相比,两者的最大区别是R...
2021-02-27 15:06:00
513
原创 嵌入式100题(82):arm和dsp、fpga有什么区别
arm和dsp、fpga有什么区别 ARM:ARM(Advanced RISC Machines)是微处理器行业的一家知名企业,设计了大量高性能、廉价、耗能低的RISC处理器、相关技术及软 件。ARM架构是面向低预算市场设计的第一款RISC微处理器,基本是32位单片机的行业标准,它提供一系列内核、体系扩展、微处理器和系统芯片方案,四个功能模块可供生产厂商根据不同用户的要求来配置生产。由于所有...
2021-02-27 15:05:00
292
原创 嵌入式100题(81):波特率是什么,为什么双方波特率要相同,高低波特率有什么区别;...
波特率是什么,为什么双方波特率要相同,高低波特率有什么区别; 波特率是每秒钟可以传送的二进制位数,其单位为bps(bits per second)也写作bits/s。它是衡量串行数据速度快慢的重要指标。 波特率相当于通讯的采样率 这样的比方可能你会理解的容易一些就是2个玩杂耍的人面对面丢瓶子那样 2个人必须保持一样的速度。 对于通信系统来说: (1)可靠性跟有效性是一对矛盾。有效...
2021-02-27 15:04:00
2096
原创 嵌入式100题(80):内存 虚拟内存 磁盘/硬盘 的关系
内存 虚拟内存 磁盘/硬盘 的关系 大家都知道组装电脑需要CPU硬盘,内存等硬件,系统中还含有虚拟内存,对于其中的相互关系,大家可能不了解! 下面用最简明易懂的语言,为大家介绍其中的关系!CPU: CPU即中央处理器,是英语“Central Processing Unit”的缩写。CPU从内存或缓存中取出指令,放入指令寄存器,并对指令译码分解成一系列的微操作,然后发出各种控制命令,...
2021-02-27 15:03:00
455
原创 嵌入式100题(79):数据库创建索引有什么优点和缺点
数据库创建索引有什么优点和缺点优点: 第一,通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性。 第二,可以大大加快数据的检索速度,这也是创建索引的最主要的原因。 第三,可以加速表和表之间的连接,特别是在实现数据的参考完整性方面特别有意义。 第四,在使用分组和排序子句进行数据检索时,同样可以显著减少查询中分组和排序的时间。 第五,通过使用索引,可以在查询的过程...
2021-02-26 17:29:00
289
原创 嵌入式100题(78):Linux 操作系统挂起、休眠、关机相关命令
Linux 操作系统挂起、休眠、关机相关命令立刻关机: halt init 0 shutdown -h now shutdown -h 0定时/延时关机: shutdown -h 10:00 shutdown -h +30 //单位为分钟重启: reboot init 6 shutdown -r now待机/挂起: sudo pm-s...
2021-02-26 17:28:00
374
原创 嵌入式100题(77):中断怎么发生,中断处理大概流程
中断怎么发生,中断处理大概流程1. 中断概念: 中断是指由于接收到来自外围硬件(相对于中央处理器和内存)的异步信号或来自软件的同步信号,而进行相应的硬件/软件处理。发出这样的信号称为进行中断请求(interrupt request,IRQ)。硬件中断导致处理器通过一个上下文切换(context switch)来保存执行状态(以程序计数器和程序状态字等寄存器信息为主);软件中断则通...
2021-02-26 17:27:00
1959
原创 嵌入式100题(76):中断和异常的区别
中断和异常的区别1、异常: 是指CPU内部出现的中断,即在CPU执行特定指令时出现的非法情况。同时异常也称为同步中断,因此只有在一条指令执行后才会发出中断,不可能在指令执行期间发生异常。 产生的原因: 程序的错误产生的,编程异常通常叫做软中断(eg:除数为0) 内核必须处理的异常条件产生的(eg:缺页) 产生的目的: Linux利用异常来达到两...
2021-02-26 17:24:00
938
原创 嵌入式100题(75):计算机中,32bit与64bit有什么区别
计算机中,32bit与64bit有什么区别表示: 32bit:X 86 64bit:X 64处理数据的能力: 32位计算机的CPU一次最多能bai处理32位数据,例如它的EAX寄存器就是32位的,32位计算机通常也可以处理16位和8位数据。64位计算机一次处理数据要比32位大得多,一次运行64位的数据。支持的内存不同(寻址能力不同): 32位的系统许多支持4G的内存...
2021-02-26 17:20:00
1610
1
原创 嵌入式100题(74):硬链接与软链接的区别
硬链接与软链接的区别 硬链接(hard link):A是B的硬链接(A和B都是文件名),则A的目录项中的inode节点号与B的目录项中的inode节点号相同,即一个inode节点对应两个不同的文件名,两个文件名指向同一个文件,A和B对文件系统来说是完全平等的。如果删除了其中一个,对另外一个没有影响。每增加一个文件名,inode节点上的链接数增加一,每删除一个对应的文件名,inode节...
2021-02-26 17:18:00
327
原创 嵌入式100题(73):死锁的原因、条件 创建一个死锁,以及如何预防
死锁的原因、条件 创建一个死锁,以及如何预防死锁产生的原因: 系统资源的竞争:系统资源的竞争导致系统资源不足,以及资源分配不当,导致死锁。 进程运行推进顺序不合适:进程在运行过程中,请求和释放资源的顺序不当,会导致死锁。产生死锁的四个必要条件: 互斥条件:一个资源每次只能被一个进程使用,即在一段时间内某资源仅为一个进程所占有。此时若有其他进程请求该资源,则请求进程只能...
2021-02-26 17:15:00
492
原创 嵌入式100题(72):堆和栈的区别
堆和栈的区别1、堆栈空间分配区别: 栈(操作系统):由操作系统(编译器)自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。 堆(操作系统): 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收,分配方式倒是类似于链表。2、堆栈缓存方式区别: 栈使用的是一级缓存, 它们通常都是被调用时处于存储空间中,调用完毕立即释放。 堆则...
2021-02-26 17:13:00
599
原创 嵌入式100题(71):什么是堆,栈,内存泄漏和内存溢出?
什么是堆,栈,内存泄漏和内存溢出? 堆(heap):是由malloc之类函数分配的空间所在地。地址是由低向高增长的。 栈(stack):是自动分配变量,以及函数调用的时候所使用的一些空间。地址是由高向低减少的。 内存溢出(out of memory):通俗理解就是内存不够,通常在运行大型软件或游戏时,软件或游戏所需要的内存远远超出了你主机内安装的内存所承受大小,就叫内存溢出。...
2021-02-26 17:12:00
809
原创 嵌入式100题(70):一个程序从开始运行到结束的完整过程(四个过程)
一个程序从开始运行到结束的完整过程(四个过程)1、编译预处理:处理伪指令 1> 头文件包含 2> 宏定义 3> 条件编译 #if #endif gcc -E xxx.c -o xxx.i 2、编译:把预处理之后的文件进行语法分析,生成汇编代码 gcc...
2021-02-26 17:11:00
942
2
原创 嵌入式100题(69):大小端的区别以及各自的优点,哪种时候用
大小端的区别以及各自的优点,哪种时候用 所谓的大端模式,是指数据的低位(就是权值较小的后面那几位)保存在内存的高地址中,而数据的高位,保存在内存的低地址中,这样的存储模式有点儿类似于把数据当作字符串顺序处理:地址由小向大增加,而数据从高位往低位放; 所谓的小端模式,是指数据的低位保存在内存的低地址中,而数 据的高位保存在内存的高地址中,这种存储模式将地址的高低和数据位权有效地结合...
2021-02-26 17:09:00
2485
1
原创 嵌入式100题(68):linux下检查内存状态的命令
linux下检查内存状态的命令通过“top”命令可以时时查看内存使用状态。通过“free -m”命令查看内存使用情况。通过“cat /proc/meminfo”命令查看内存的更详细的状态。...
2021-02-26 14:23:00
286
原创 嵌入式100题(67):为什么自旋锁不能睡眠 而在拥有信号量时就可以?
为什么自旋锁不能睡眠 而在拥有信号量时就可以? 自旋锁自旋锁禁止处理器抢占;而信号量不禁止处理器抢占。 基于这个原因,如果自旋锁在锁住以后进入睡眠,由于不能进行处理器抢占,其他系统进程将都不能获得CPU而运行,因此不能唤醒睡眠的自旋锁,因此系统将不响应任何操作(除了中断或多核的情况,下面会讨论)。而信号量在临界区睡眠后,其他进程可以用抢占的方式继续运行,从而可以实现内存拷贝等功能...
2021-02-26 14:22:00
742
原创 嵌入式100题(66):linux内核同步方式总结
linux内核同步方式总结每CPU变量: 正如其名,每cpu变量即为每个CPU都有自己的变量,各个CPU仅访问自己的每CPU变量,可以想象每CPU变量一般的数据结构是一个数组。 type name[CPU_COUNT]; 因此每CPU变量解决的是多CPU之间可能发生的竞争条件,而因内核抢占而产生了进程切换时,则很可能使每CPU变量产生竞争条件。原子操作: 原子操作即在...
2021-02-26 14:20:00
247
原创 嵌入式100题(65):Bootloader的作用、为什么需要Bootloader?
Bootloader的作用、为什么需要Bootloader?1、Bootloader的作用: 简单的说,BootLoader就是在操作系统运行之前运行的一段小程序。通过这段小程序,可以初始化硬件设备,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统做好准备。对于Bootloader的启动过程又分为两个阶段stage1和stage2。 stage1全部由汇编编写,...
2021-02-26 14:17:00
1849
原创 嵌入式100题(64):linux的内核是由bootloader装载到内存中的?
linux的内核是由bootloader装载到内存中的? linux的内核的确是由bootloader装载bai到内du存中的。linux的bootloader有2个部分zhi组成:bootstrap和uboot。所以更准确点的说法是dao:linux的内核是由uboot装载到内存中的。内核文件本身是存放在硬盘的文件系统中,这句话就是错的。内核和文件系统是分开存储的。uboot读取k...
2021-02-26 14:16:00
348
原创 嵌入式100题(63):Bootloader多数有两个阶段的启动过程
Bootloader多数有两个阶段的启动过程 bootloader一般都是分为两个阶段的,第一个阶段使用汇编来实现,它完成一些依赖于CPU体系结构的初始化,并调用第二阶段的代码;第二阶段则通常使用C语言来实现,这样可以实现更复杂的功能,而且代码会有更好的可读性和移植性。 两个阶段如下:一、第一阶段功能:(1)硬件设备初始化。(2)为加载bootloader的第二个阶段代码...
2021-02-26 14:15:00
661
原创 嵌入式100题(62):bootloader内核 根文件的关系
bootloader内核 根文件的关系 一般来说,为了使开发板成功运行linux系统,我们需要完成以下三个方面的开发工作:bootloader(启动装载)kernel(内核)rootfs(根文件系统)bootloader: 对于bootloader,我们一般用u-boot来制作。 当开发板烧写了u-boot并启动后,你可以使用命令行来控制开发板进行一些简单硬件操作...
2021-02-26 14:14:00
560
原创 嵌入式100题(61):内核态,用户态的区别
内核态,用户态的区别 就像世界上的人并不平等一样,并不是所有的程序都是平等的。世界上有的人占有资源多,有的人占有资源少,有的人来了,别人得让出资源,有的人则专门为别人让出资源。程序也是这样,有的程序可以访问计算机的任何资源,有的程序则只能访问非常受限的少量资源。而操作系统作为计算机的管理者,自然不能和被管理者享受一样的待遇,它应该享有更多的方便或特权。为了区分不用程序的不同权利,人们...
2021-02-26 14:12:00
301
原创 嵌入式100题(60):系统调用的作用
系统调用的作用1、操作系统作为用户和硬件的接口,向上提供一些简单易用的服务,主要包括命令接口和程序接口,其中程序接口由一组系统调用组成。2、用户接口:命令接口:联机命令接口(用户说一句系统做一句);脱机命令接口(用户说一堆系统做一堆)。程序接口:由一组系统调用组成,通过程序间接使用。3、系统调用:系统调用是操作系统提供给应用程序(程序员)使用的接口,可以理解为一种可...
2021-02-26 14:11:00
399
原创 嵌入式100题(59):系统调用read()/write(),内核具体做了哪些事情
系统调用read()/write(),内核具体做了哪些事情 用户空间read()-->内核空间sys_read()-->scull_fops.read-->scull_read(); 该过程分为两个部分:用户空间的处理和核心空间的处理。在用户空间中通过0x80 中断的方式将控制权交给内核处理,内核接管后,经过6个层次的处理最后将请求交给磁盘,由磁盘完成最终的数...
2021-02-26 14:09:00
1340
原创 嵌入式100题(58):用户空间与内核通信方式有哪些?
用户空间与内核通信方式有哪些?系统调用,提供特定的用户空间与内核空间的信息传递。信号,内核空间出现一些异常时候会发送信号给进程,如SIGSEGV、SIGILL、SIGPIPE等。/proc,proc可以读取内核空间的信息并且设置部分属性的值,需要循环检测。文件,可以通过指定文件的读写操作来实现通信,但是流程不够实时,需要循环检测来实现。netlink,类似socket通信方式...
2021-02-26 14:06:00
1649
原创 嵌入式100题(57):Linux内核的组成
Linux内核的组成 一个完整的Linux内核一般由5部分组成,它们分别是内存管理、进程管理、进程间通信、虚拟文件系统和网络接口。1、内存管理: 内存管理主要完成的是如何合理有效地管理整个系统的物理内存,同时快速响应内核各个子系统对内存分配的请求。 Linux内存管理支持虚拟内存,而多余出的这部分内存就是通过磁盘申请得到的,平时系统只把当前运行的程序块保留在内存中,其他程序...
2021-02-26 14:04:00
335
原创 嵌入式100题(56):STL底层数据结构实现
STL底层数据结构实现vector底层数据结构为数组,支持快速随机访问。list底层数据结构为双向链表,支持快速增删。deque底层数据结构为一个中央控制器和多个缓冲区,详细见STL源码剖析P146,支持首尾(中间不能)快速增删,也支持随机访问deque是一个双端队列(double-ended queue),也是在堆中保存内容的.它的保存形式如下: [堆1] -->...
2021-02-26 14:02:00
289
原创 嵌入式100题(55):vector和deque的比较
vector和deque的比较vector的底层实现时数组;而deque的底层实现时“中央控制区”和缓冲的结构。vector的内存空间时连续的;而deque的内存空间是一种假的连续,实际上是不连续的。vecotr的支持数组的随机访问;而deque虽然也是支持使用[]的运算符,但实际上是需要通过中央控制器二次寻址的,效率比vector略低。vector在空间不够重新申请新空间策略...
2021-02-26 14:00:00
261
原创 嵌入式100题(54):vector list异同
vector list异同Vector: 连续存储的容器,动态数组,在堆上分配空间。 底层实现:数组。 两倍容量增长:vector 增加(插入)新元素时,如果未超过当时的容量,则还有剩余空间,那么直接添加到最后(插入指定位置),然后调整迭代器。如果没有剩余空间了,则会重新配置原有元素个数的两倍空间,然后将原空间元素通过复制的方式初始化新空间,再向新空间增加元素,最后析构并释...
2021-02-26 13:58:00
207
原创 嵌入式100题(53):快排的partition函数与归并的Merge函数
快排的partition函数与归并的Merge函数代码:三个函数:基准插入函数:int getStandard(int array[],int low,int high)(返回基准位置下标)递归排序函数:void quickSort(int array[],int low,int high)主函数:int main()#include <stdio.h>#i...
2021-02-26 13:56:00
231
原创 嵌入式100题(52):快速排序
快速排序 快速排序:快速排序有两个方向,左边的i下标一直往右走,当a[i] <= a[center_index],其中center_index是中枢元素的数组下标,一般取为数组第0个元素。而右边的j下标一直往左走,当a[j] > a[center_index]。如果i和j都走不动了,i <= j,交换a[i]和a[j],重复上面的过程,直到i > j。 交换a...
2021-02-26 13:55:00
301
2
原创 嵌入式100题(51):归并排序
归并排序 归并排序:归并排序是把序列递归地分成短序列,递归出口是短序列只有1个元素(认为直接有序)或者2个序列(1次比较和交换),然后把各个有序的段序列合并成一个有序的长序列,不断合并直到原序列全部排好序。可以发现,在1个或2个元素时,1个元素不会交换,2个元素如果大小相等也没有人故意交换,这不会破坏稳定性。那么,在短的有序序列合并的过程中,稳定是是否受到破坏?没有,合并过程中我们可...
2021-02-26 13:53:00
202
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人