- 博客(146)
- 资源 (22)
- 收藏
- 关注
原创 高速信号编码之8B/10B
1. 线路编码技术在高速链路中导致接收端眼图闭合的原因,很大部分并不是由于高频的损耗太大了,而是由于高低频的损耗差异过大,导致码间干扰严重,因此不能张开眼睛。针对这种情况,可以通过CTLE和FFE(包括DFE)均衡进行解决,原理无非就是衰减低频幅度或者抬高高频幅度,从而达到在接收端高低频均衡的效果。缓解码间干扰还可以通过编码技术来实现。 说到针对于NRZ数据的编码方式,常见的有4B/5B,8B/10B,64B/66B,64/67B,128B/130B,128B/132B编码(可能各位还...
2021-01-22 11:41:26
4824
转载 搞懂vim复制粘贴
转载https://liushiming.cn/2020/01/18/copy-and-paste-in-vim/概述复制粘贴是文本编辑最常用的功能,但是在vim中复制粘贴还是有点麻烦的,有一点学习成本。本文总结了使用vim复制粘贴的典型场景和使用方法,希望对读者有帮助。vim内部复制、粘贴、剪切选择文本v+光标移动 (按字符选择)高亮选中所要的文本,然后进行各种操作(比如,d表示删除)。 V (按行选择) v+选中的内容+c 更改选中的文字复制:y(ank)y 用v命令选中文
2021-01-08 17:20:04
858
转载 VLIW的前世今生:为什么DL加速器都青睐于它
VLIW:(Very Long Instruction Word,超长指令字)一种非常长的指令组合,它把许多条指令连在一起,增加了运算的速度。 超长指令字(VLIW)是指令级并行,超线程(Hyper-Threading)是线程级并行,而多内核则是芯片级并行。这三种方式都是提高并行计算性能的有效途径。其中,VLIW(超长指令字)体系结构是美国Multiflow和Cydrome公司于20世纪80年代设计的体系结构,EPIC体系结构就是从VLIW中衍生出来的深度学习加速器,更宏观些应该称为处理器,我认为.
2021-01-07 15:03:18
3572
转载 关于TOCTTOU攻击的简介
关于TOCTTOU攻击的简介转载自:https://www.cnblogs.com/liqiuhao/p/9450093.html前言最近看到了一些以at结尾的Linux系统调用,在维基百科上面说这可以防御一些特定的TOCTTOU攻击,而在TOCTTOU对应页面中并没有中文版的介绍,而且百度的结果也比较少,于是决定抽空写一个关于 TOCTTOU攻击的简介,其中部分参考了英文版的维基百科。什么是竞争条件与TOCTTOU?在电路设计、软件开发、系统构建中,如果一个模块的...
2021-01-07 09:38:55
2613
转载 从0实现malloc函数
本文介绍如何用c语言实现一个简单的内存分配器,可替换glibc中的malloc(),calloc(),realloc(),free().这是一篇入门级别的文章,所以不会介绍所有的细节。 代码实现主要为了演示内存分配器的基本工作原理,所以和工业级内存分配器相比,缺少非常多的性能优化,分配内存时也不会按页对齐,但是至少,我们构建的内存分配器是可以工作的。在构建内存分配器之前,需要先介绍程序的内存布局。操作系统中的进程运行在它自己独有的虚拟地址空间,不同进程间的虚拟地址空间是独立、相互隔离的。虚拟...
2021-01-06 16:41:53
312
转载 简述 LLVM 与 Clang 及其关系
随着 Android P 的逐步应用,越来越多的客户要求编译库时用 libc++ 来代替 libstdc++。libc++ 和 libstdc++ 这两个库有关系呢?它们两个都是 C++ 标准库,libc++ 是针对 Clang 编译器特别重写的 C++ 标准库,而 libstdc++ 则是 GCC 的对应 C++ 标准库了。从 Android 市场来说,Android NDK 已在具体应用中放弃了 GCC,全面转向 Clang,正如很早前 Android NDK 在 Changelog 中提到的那样:
2020-11-18 15:42:02
381
原创 The C Programing Language笔记
1、extern,逗号表达式#include <stdio.h>#include <stdlib.h>/****************************************** * Descir : 测试一个逗号表达式 *****************************************/int main(int argc, char *argv[]) {extern int Val ;//extern声明,使用全局变量
2020-11-05 15:56:33
222
转载 C语言中结构体直接赋值
FROM:http://codewenda.com/c语言结构体直接赋值/在C语言中结构体变量之间可以进行赋值操作吗?简单结构体的赋值先说结论:一般来说,C语言中的结构体变量可以用另一个变量对其进行赋值或初始化。简单结构体(不包含指针成员)直接赋值没有问题。我们先下面一段代码: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 1
2020-11-05 09:27:41
7782
转载 FLASH介绍
非易失性存储元件有很多种,如EPROM、EEPROM、NOR FLASH和NAND FLASH,前两者已经基本被淘汰了,因此我仅关注后两者,本文对FLASH的基本存储单元结构、写操作、擦除操作和读操作的技术进行了简单介绍,对了NOR和NAND由存储结构决定的特性和应用场合的差异,对后续的硬件设计和驱动编程起到铺垫作用。1 FLASH基本存储单元---浮栅场效应管 NOR FLASH和NAND FLASH都是使用浮栅场效应管(Floating Gate FET)作为基本存储单元来存储数据的,浮栅场效
2020-09-04 09:42:40
1270
原创 大小端介绍与分析
1. 字节序 字节序即字节的存储顺序,如果数据都是单字节的,那怎么存储无所谓了,但是对于多字节数据,比如int,double等,就要考虑存储的顺序了。字节序是硬件层面的东西,通常只和你使用的处理器架构有关,而和编程语言无关。字节序分为大端序和小端序。 大端序:数据的高位字节存放在地址的低端 低位字节存放在地址高端。 小端序:数据的高位字节存放在地址的高端 低位字节存放在地址低端。0x1234567的大端字节序和小端字节序的写法如下图。可见,大端模式和字符串的存储模式类似...
2020-09-04 09:15:09
785
转载 Vim配置#Vim中使用鼠标功能
1、简介最近在使用vim,忽然发现vim也能使用鼠标,本章主要说明如何使用鼠标功能。2、打开鼠标功能:set mouse=a3、关闭鼠标功能:set mouse-=a4、鼠标模式‘mouse’的参数说明 // n 普通模式 // v 可视模式 // i 插入模式 // c 命令行模式 // h 在帮助文件里,以上所有模式 // a 以上所有模式 // r 跳过|lit-enter|提...
2020-08-19 11:05:09
3372
转载 eMMC---简介、分区管理、总线协议和工作模式
一、eMMC 简介eMMC 是embedded MultiMediaCard的简称。MultiMediaCard,即MMC, 是一种闪存卡(Flash Memory Card)标准,它定义了 MMC 的架构以及访问 Flash Memory 的接口和协议。而eMMC 则是对 MMC 的一个拓展,以满足更高标准的性能、成本、体积、稳定、易用等的需求。eMMC 的整体架构如下图片所示:图片: eMMC 整体架构eMMC 内部主要可以分为Flash Memory、Flash Contro...
2020-07-28 10:12:28
4083
原创 C语言中的Doxygen注释模板
目录一、文件注释,放于文件的开头二、文件注释,放于文件的开头三、文件注释,放于文件的开头三、文件注释,放于文件的开头三级目录嵌入式C语言开发中通常使用Doxygen进行文档的生成。Doxygen支持多种格式,非常灵活,但排版不好就会显的比较杂乱,不便于阅读。下面给出一份注释模板。一、文件注释,放于文件的开头/*** @file * @brief This is a brief description.* @details This is the detail descr
2020-07-06 21:18:18
10222
原创 C语言指定初始化
C语言指定初始化数组指定初始化结构体指定初始化指定初始化综合使用新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入C90标准要求初始化的元素以固定顺序出现,与被初始化的数组或结构中的元素的顺序相同。在ISO C99标准中,可
2020-06-30 20:04:44
684
转载 C中的类型自动提升
同一句语句或表达式如果使用了多种类型的变量和常量(类型混用),C 会自动把它们转换成同一种类型。以下是自动类型转换的基本规则:1. 在表达式中,char 和 short 类型的值,无论有符号还是无符号,都会自动转换成 int 或者 unsigned int(如果 short 的大小和 int 一样,unsigned short 的表示范围就大于 int,在这种情况下,unsigned short 被转换成 unsigned int)。因为它们被转换成表示范围更大的类型,故而把这种转换称为“升级(...
2020-06-30 16:48:05
1511
原创 可变长度数组分析说明
1、零长度数组说明 长度为的数组在标准c和c++中是不允许的,如果使用长度为的数组,编译时会产生错误,提示数组长度不能为。但在GNUc中,这种用法却是合法的。它的最典型的用法就是位于数组中的最后一项,如上面所示,这样做主要是为了方便内存缓冲区的管理。如果你将上面的长度为的数组换为指针,那么在分配内存时,需采用两步:首先,需为结构体分配一块内存空间;其次再为结构体中的成员变量分配内存空间。这样两次分配的内存是不连续的,需要分别对其进行管理。当使用长度为的数组时,则是采用一次分配的原则,一次...
2020-06-30 16:23:12
1409
转载 ELF 文件数据分析: 全局变量
先编译一个简单的 C 程序。#include <stdio.h>char* s = "Hello, World!";char* x;int i = 0x1234;int main(int argc, char* argv[]){x = "Ubuntu";printf("%s/n", s);return 0;}编译后,使用 objdump 输出 ELF Section 信息。我们通常关心只有 .text, .rodata, .data, .bss 这几个段。yu...
2020-06-30 12:24:51
6084
1
转载 linux中export与source的作用
以前一直觉得export可有可无,虽然知道export是干嘛的,不就是把本地变量变成全局变量么(实际中叫环境变量),但是感觉好像没有这货也没影响,今天看了这篇博文,终于恍然大悟。用自己的语言,思维方式重新整理一遍首先说明两个概念:父shell与子shell,从shellA中启动一个shell,称之为shellB。 shellA为父shell,shellB为子shell。最容易理解的情况就是在一个shell中执行一个gnome-terminal命令(不同桌面环境命令不一样),弹出一个新的shell最
2020-06-24 14:57:49
330
原创 数字电路符号整理
0 常见的数字电路符号1、D触发器这个就是D触发器的示意图。其中,clk为时钟,rst_n为复位,d为输入,q为输出。这个功能非常简单,复位有效的时候,这个q的值你可以认为是0。如果复位无效的时候,那么在时钟上升沿的时候,就把d的值给了q。就是这么简单,记住这个动作,先有时钟上升沿,再有把d的值给了q。这就意味着,时钟上升沿的时候q的值还是没变的。只有时钟上升沿之后,q的值才变化。这是一个很重要的概念,也就是说先有时钟上升沿才有q的变化。如果下一个时钟上升沿没有到来,那么q的值就保持不.
2020-06-23 14:03:24
34182
转载 clock domain crossing(CDC)
随着技术的发展,数字电路的集成度越来越高,设计也越来越复杂。很少有系统会只工作在同一个时钟频率。一个系统中往往会存在多个时钟,这些时钟之间有可能是同步的,也有可能是异步的。如果一个系统中,异步时钟之间存在信号通道,则就会存在CDC(clock domain crossing)问题。在下面的文章里,我们将会讨论CDC的一些技术细节。一, CDC的基本概念我们首先来看CDC的一些基本的概念:1. 时钟域(Clock domain)如果某一设计只有一个或者几个有固定相位关系的时钟驱动,我们称这...
2020-06-23 09:26:05
5264
转载 ISO 26262中的ASIL等级确定与分解
ISO 26262中的ASIL等级确定与分解1. 引言 汽车上电子/电气系统(E/E)数量不断的增加,一些高端豪华轿车上有多达70多个ECU(Electronic Control Unit电子控制单元),其中安全气囊系统、制动系统、底盘控制系统、发动机控制系统以及线控系统等都是安全相关系统。当系统出现故障的时候,系统必须转入安全状态或者转换到降级模式,避免系统功能失效而导致人员伤亡。失效可能是由于规范错误(比如安全需求不完整)、人为原因的错误(比如:软件bug)、环境的影响( 比如:电磁...
2020-06-22 16:22:28
1892
1
转载 STM32 上电后的启动过程
微控制器(单片机)上电后,是如何寻找到并执行main函数的呢?很显然微控制器无法从硬件上定位main函数的入口地址,因为使用C语言作为开发语言后,变量/函数的地址便由编译器在编译时自行分配,这样一来main函数的入口地址在微控制器的内部存储空间中不再是绝对不变的。相信读者都可以回答这个问题,答案也许大同小异,但肯定都有个关键词,叫“启动文件”,用英文单词来描述是“Bootloader”。无论性...
2020-06-22 16:14:29
583
3
转载 ARM的三级流水线结构(一)
看到汇编中很多关于程序返回与中断返回时处理地址都很特别,仔细想想原来是流水线作用的效果。所以,决定总结学习下ARM流水线。ARM7处理器采用3级流水线来增加处理器指令流的速度,能提供0.9MIPS/MHz的指令处理速度。PS:MIPS(Million Instruction Per Second)表示每秒多少百万条指令。比如0.9MIPS,表示每秒九十万条指令。MIPS/MHz表示...
2020-04-19 20:57:23
2463
转载 锁相环(PLL)的工作原理
1.锁相环的基本组成许多电子设备要正常工作,通常需要外部的输入信号与内部的振荡信号同步,利用锁相环路就可以实现这个目的。锁相环路是一种反馈控制电路,简称锁相环(PLL,Phase-Locked Loop)。锁相环的特点是:利用外部输入的参考信号控制环路内部振荡信号的频率和相位。因锁相环可以实现输出信号频率对输入信号频率的自动跟踪,所以锁相环通常用于闭环跟踪电路。锁相环在工作的过程中,...
2020-04-19 19:31:56
27873
转载 uart接口的时序分析
数据传送速率用波特率来表示, 指单位时间内载波参数变化的次数, 或每秒钟传送的二进制位数 如每秒钟传送240个字符, 而每个字符包含10位(1个起始位, 1个停止位, 8个数据位), 这时的波特率为2400Bd 传输时序如下图 在UART中,信号线上共有两种状态, 分别用逻辑1(高电平)和逻辑0(低电平)来区分 在空闲时, 数据线应该保持在逻辑高电平状态 其中...
2020-04-17 02:05:56
20622
2
转载 IIC通信
i2c简易时序图 启动信号: SCL为高电平的时候,SDA由高电平向低电平跳变。结束信号:SCL为高电平的时候,SDA由低电平向高电平跳变。 应答信号: I2C总线上的所有数据都是以8位字节传送的,发送器每发送一个字节,就在时钟脉冲9期间释放数据线,由接收器反馈一个应答信号。应答信号为低电平时,规定为有效应答位(ACK简称应答位),表示接收器已经成功地接收了该字节;应答信号...
2020-04-17 01:54:40
2711
1
转载 多级反馈队列调度算法
多级反馈队列调度算法如果有很多任务排队等着被处理,哪个任务先被处理,哪个任务后处理,这个需要由操作系统决定,这就是调度。多级反馈队列调度算法是目前操作系统调度算法中被公认的一种较好的调度算法。它可以满足各种类型进程的需要,既能使高优先级的作业得到响应又能使短作业(进程)迅速完成。基本概念多级反馈队列调度算法是一种根据先来先服务原则给就绪队列排序,为就绪队列赋予不同的优先级数,...
2020-04-10 22:31:44
4144
1
转载 linux下日志文件系统
众所周知,文件系统是操作系统最为重要的一部分。每种操作系统都有自己的文件系统。文件系统直接影响着操作系统的稳定性和可靠性。Linux下的文件系统通常有两种,即日志文件系统和非日志文件系统,以下简单介绍两类文件系统。一、非日志文件系统非日志文件系统在工作时,不对文件系统的更改进行日志记录。文件系统通过为文件分配文件块的方式把数据存储在磁盘上。每...
2020-04-10 22:30:16
1836
转载 【剑指Offer】面试题17. 打印从1到最大的n位数
题目输入数字 n,按顺序打印出从 1 到最大的 n 位十进制数。比如输入 3,则打印出 1、2、3 一直到最大的 3 位数 999。示例 1:输入: n = 1输出: [1,2,3,4,5,6,7,8,9]说明:用返回一个整数列表来代替打印 n 为正整数解题思路1、针对本题的常规思路,利用pow函数,秒解2、假设可能出现大数(本题不可能),转换为大数问题求解...
2020-04-07 10:00:13
238
转载 【剑指Offer】面试题15. 二进制中1的个数
题目请实现一个函数,输入一个整数,输出该数二进制表示中 1 的个数。例如,把 9表示成二进制是 1001,有 2 位是 1。因此,如果输入 9,则该函数输出 2。示例 1:输入:00000000000000000000000000001011输出:3解释:输入的二进制串 00000000000000000000000000001011中,共有三位为 '1'。示例 2:...
2020-04-07 09:46:10
216
转载 【剑指Offer】面试题11. 旋转数组的最小数字
题目把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。例如,数组[3,4,5,1,2] 为 [1,2,3,4,5] 的一个旋转,该数组的最小值为1。示例 1:输入:[3,4,5,1,2]输出:1示例 2:输入:[2,2,2,0,1]输出:0思路一:暴力代码时间复杂度:O(n)空...
2020-04-07 09:37:31
235
转载 【剑指Offer】面试题10. 斐波那契数列
题目写一个函数,输入 n ,求斐波那契(Fibonacci)数列的第 n 项。斐波那契数列的定义如下:F(0) = 0, F(1)= 1F(N) = F(N - 1) + F(N - 2), 其中 N > 1.斐波那契数列由 0 和 1 开始,之后的斐波那契数就是由之前的两数相加而得出。答案需要取模 1e9+7(1000000007),如计算初始结果为:100000...
2020-03-29 22:58:39
786
转载 【剑指Offer】面试题09. 用两个栈实现队列
题目用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead操作返回 -1 )示例 1:输入:["CQueue","appendTail","deleteHead","deleteHead"][[],[3],[],[]]输出:[nu...
2020-03-29 22:32:32
323
转载 【剑指Offer】面试题07. 重建二叉树
题目输入某二叉树的前序遍历和中序遍历的结果,请重建该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如,给出前序遍历 preorder =[3,9,20,15,7]中序遍历 inorder = [9,3,15,20,7]返回如下的二叉树: 3 / \ 9 20 / \ 15 7限制:0 <=...
2020-03-29 21:54:22
233
转载 【数据结构】二叉树遍历
前序遍历(根左右)前序遍历(DLR),是二叉树遍历的一种,也叫做先根遍历、先序遍历、前序周游,可记做根左右。前序遍历首先访问根结点然后遍历左子树,最后遍历右子树。前序遍历首先访问根结点然后遍历左子树,最后遍历右子树。在遍历左、右子树时,仍然先访问根结点,然后遍历左子树,最后遍历右子树。若二叉树为空则结束返回,否则:(1)访问根结点。(2)前序遍历左子树。(3)前序遍历右子树...
2020-03-26 23:54:14
423
转载 【剑指Offer】面试题06.从尾到头打印链表
题目输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)。示例 1:输入:head = [1,3,2]输出:[2,3,1]限制:0 <= 链表长度 <= 10000思路一:反转数组代码时间复杂度:O(n)空间复杂度:O(1)class Solution {public: vector<int> reverse...
2020-03-25 23:59:50
473
原创 【剑指Offer】面试题05.替换空格
题目请实现一个函数,把字符串 s 中的每个空格替换成"%20"。示例 1:输入:s = "We are happy."输出:"We%20are%20happy."限制:0 <= s 的长度 <= 10000思路:双指针暴力方法,从前向后遍历,遇到空格就替换,则每次替换需要移动空格后面O(n)个字符,所以总时间复杂度为O(n^2)。我们可以先计算出空格...
2020-03-25 23:42:36
145
转载 【剑指Offer】面试题04. 二维数组中的查找
题目在一个 n * m 的二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。示例:现有矩阵 matrix 如下:[ [1, 4, 7, 11, 15], [2, 5, 8, 12, 19], [3, 6, 9, 16, 22], [10, ...
2020-03-25 23:11:28
168
原创 【C++】引用作为函数参数
C++中,引用作为函数参数引用作为函数参数C++之所以增加引用类型, 主要是把它作为函数参数,以扩充函数传递数据的功能。————————————————————c++,函数传参:(1)将变量名作为实参和形参。这时传给形参的是变量的值,传递是单向的。如果在执行函数期间形参的值发生变化,并不传回给实参。因为在调用函数时,形参和实参不是同一个存储单元。//同c(2) 传递变量的指...
2020-03-19 15:51:36
10839
转载 【C++】swap
C++中的swap(交换函数)交换两个变量的值很简单。比如 int a = 1; b = 2; 交换a b的值这个很简单 很容易想到的是找个中间变量比如 int temp = a; a = b; b = temp;不需要中间变量可不可以?当然是可以的。比如【加减法】a = a + b;b = a - b;a = a - b;该方法可以交换整型和浮点型数值...
2020-03-19 15:31:17
2244
Part1_Physical_Layer_Simplified_Specification_Ver7.10.pdf
2020-11-27
Embedded Multi-Media Card (e•MMC) Electrical Standard (5.1)
2020-11-27
STMF103驱动SX1276
2015-11-21
emmc_ddr_crc_check.c
2020-11-27
PartE7_iSDIO_Simplified_Specification_Ver1.10
2020-11-27
WampServer2.0i.exe
2014-02-27
数字系统工程
2017-01-05
用eclipse开发android的ADB.exe
2015-03-26
基于运算放大器和模拟集成电路的电路设计(第3版)及答案
2015-06-30
SublimeText_2.0.2.
2014-12-05
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅