自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(40)
  • 资源 (16)
  • 收藏
  • 关注

原创 C语言 左移溢出

2. 左移操作中,若常量移位到符号位,会得到错误的结果(如图变量b c),具体错误的结果依赖于编译器的实现方式,此时需要进行强制类型转换(如图变量a d)1. 在c语言中,常量的默认类型为signed int(如图变量b c)

2023-03-03 15:32:20 589

原创 嵌入式C常见面试题

1. 展开的时机:inline函数在编译时展开,#define在预处理时展开 2. 参数的类型检查: inline函数还是一个函数,会进行参数类型检查,而#define不会,只是做简单的字符串替换 3. 是否允许复杂语句:inline函数不允许出现复杂语句,例如递归,大型循环等;#define一定展开。对应短小精悍且被频繁调用的函数,加上inline关键字会在编译时在函数调用位置替换为函数的代码块,节省函数调用的时间和对栈内存重复开辟带来的消耗,代价上增加了程序文件的大小。

2022-10-21 09:43:58 219

原创 常用算法总结

【代码】常用算法总结。

2022-09-09 16:50:10 219

原创 NAND FLASH -WARMUP CYCLE

当NAND interface速度在800MB/s以上时,为了增加信号传输的稳定度,可以使用warmup cycle(DQS latency cycle)。warmup cycle主要时在burst read/write开始之前,加入几个cycle的dummy data,用来sync DQ/DQS, 使sampling 更加准确。...

2022-08-07 09:24:49 1314 1

原创 Linux常用命令

xz命令 xz -z test.txt 压缩文件 xz -d test.txt.xz 解压文件 xz test.txt 压缩文件 unxz test.txt.xz 解压文件 xzcat test.txt.xz 查看文件内容tar命令# 压缩文件 file1 和目录 dir2 到 test.tar.gztar -zcvf test.tar.gz file1 dir2# 解压 test.tar.gz(将 c 换成 x 即可)tar

2021-07-15 10:03:42 91

原创 NAND Read Error

NAND FLASH基本存储单元(Cell)是一种类NMOS的双层浮空栅(Floating Gate) MOS管组成 。写操作是在控制极加正电压,使电子通过绝缘层进入浮栅极。擦除操作正好相反,是在衬底加正电压,把电子从浮栅极中吸出来。如下图所示:一个存储单元存储1bit数据的NAND FLASH,我们叫它为SLC (Single Level Cell),2bit为MLC (Multiple Level Cell),3bit为TLC (Triple Level Cell...

2021-05-17 17:05:10 1101

原创 概念区分之LUN、die、target、channel

在nand里,LUN(Logical Unit)和die是同一个意思。都是执行cmd和report status的最小单位。一个target对应一个CE、R/B信号线。根据封装的不同,target里可能会有一个或多个die。spec原文如下:1 die target2 die targetchannel 表示有几组ALE、CLE、IO[7:0]、DQS、RE、WE、WP信号线。...

2021-04-02 10:01:55 10163 2

原创 OLED SH1106通过I2C显示

预备知识1. I2C基本原理2. SH1106通过I2C读写OLED初始化#define OLED_CMD 0 #define OLED_DATA 1/**********************************************// IIC Write Command**********************************************/void Write_IIC_Command(unsigned char IIC_Command

2021-03-22 10:52:12 2811 2

原创 局部变量定义顺序与地址顺序

局部变量的定义顺序与存储顺序不一定一致,具体与编译器和平台相关。从编译器的角度来说,变量的地址是可以随机安排的,又不影响寻址使用,不一定非要按排列顺序。一般而言,编译器按照内存地址递减的方式给局部变量分配内存,如下图:...

2021-03-18 10:06:39 780

原创 I2C

The I2C-bus is for bi-directional, two-line communication between different ICs or modules.I2C (Inter Integrated Circuit,内部集成电路) 总线是价格低廉却很有效的用以互连小规模嵌入式系统内的外设的网络。I2C 总线用两根线来连接多支路总线中的多个设备。这种总线是双向、低速的,并与公共时钟同步。可以直接将一个设备接到 I2C 总线上或是从该总线上取下,而不会影响其他设备。I2C 总线的数

2021-03-12 14:03:15 268

原创 概念解释之持续集成

continuous integration(CI) is the practice of merging all developer working copies to a shared mainline several times a day.持续集成的含义是:频繁的(一天多次的)将所有开发者的工作合并到主干上。持续集成是一种软件开发实践,即团队开发成员更加频繁的集成他们的工作,通常每个成员每天至少集成一次。每次集成都通过自动化的构建(包括自动编译,自动生成部署包、自动发布测试环境,自动化测试) .

2021-03-12 13:53:37 1128

原创 概念区分之时钟周期、机器周期、指令周期

时钟周期时钟周期也称为振荡周期,定义为时钟脉冲的倒数 (可以这样来理解,时钟周期就是单片机外接晶振的倒数,例如 12M 的晶振,它的时间周期就是 1/12 us),是计算机中最基本的、最小的时间单位。机器周期机器周期也称为 CPU 周期。在计算机中,为了便于管理,常把一条指令的执行过程划分为若干个阶段(如取指、译码、执行等),每一阶段完成一个基本操作。完成一个基本操作所需要的时间称为机器周期。一般情况下,一个机器周期由若干个时钟周期组成。例如,MCS-51 采用定时控制方式,有固定的机器周期

2021-03-11 13:54:10 783

原创 位运算常用技巧

1、获得第 i 位的数字(a>>i)&12、设置第 i 位为 1a=a|(1<<i)3、设置第 i 位为 0a=a&(~(1<<i))4、把第 i 位取反a=a^(1<<i)5、lowbit函数(用来取一个二进制最低位的1与后边的 0 组成的数)方法一:a&(-a) ,原理:二进制数的负数是正数取反加一方法二: a - ( a & (a-1) ),原理: 先消掉最后一位1,然后再用原...

2021-03-03 13:47:27 305

原创 前缀和

预备知识前缀和是一个数组的某项下标之前(包括此项元素)的所有数组元素的和。设a[]为原数组,b[]为前缀和数组,可得,前缀和的定义式和递推式如下图所示:其中,一维数组的前缀和的递推式可以很容易看出来,二维数组的前缀和的递推式证明如下:如图,灰色阴影的面积 S(O,D)=S(O,C)+S(O,B)−S(O,A)+D。设preSum[i][j]表示从matrix[0][0]到matrix[i][j]的所有元素的和,则可以得出以下的递推公式:preSum[i][j]=preSum[i−1]

2021-03-02 15:11:27 127

原创 异或

异或,英文为 exclusive OR,缩写成 xor。异或的数学符号为 “⊕”,C语言中的运算符为“^”。异或也叫半加运算,其运算法则相当于不带进位的二进制加法:二进制下用 1 表示真,0 表示假,则异或的运算法则为:0⊕0=0,1⊕0=1,0⊕1=1,1⊕1=0(同为 0,异为 1)。运算法则1.归零律:a ⊕ a = 02.恒等律:a ⊕ 0 = a3.交换律:a ⊕ b = b ⊕ a4.结合律:a ⊕b ⊕ c = a ⊕ (b ⊕ c) = (a ⊕ b) ...

2021-02-24 15:19:30 4795 1

原创 Leetcode中参数returnSize和returnColumnSizes的解释

Leetcode中,一些题目会传入 returnSize 和 returnColumnSizes 这两个参数。例如:int** flipAndInvertImage(int** A, int ASize, int* AColSize, int* returnSize, int** returnColumnSizes)之所以传入指针,是因为C语言是值传递,如果传的是值,无法改变传入的值。题目中要求会返回一个二维数组,且数组的行数列数是可能被function改变的。在这个题目中,二维数组A的行数是

2021-02-24 14:51:33 4601 2

原创 向上取整

在C语言中,取整操作总是把小数部分截断。因此当操作数为正的时候,相当于向下取整。以下讨论的方法都是操作数为正的情况,操作数为负和浮点数的情况不作讨论。方法一:检查余数int func1(int x, int n){ int remainder; int sum = x / n; if( x % n ) { sum++ } return sum;}方法二:增加一点小处理(推荐)int func1(int x, int

2021-02-04 10:54:31 1145

原创 地址与内存空间

数据总线,地址总线,运算位宽32位CPU指的是运算位宽为32位,通常也是指的是通用寄存器的位宽。CPU通过地址总线寻址,然后通过数据总线与外设通信。地址总线位数决定CPU寻址范围;数据总线的位数决定CPU单次通信能交换的信息数量。CPU位宽与寻址能力并不完全等效,具体看CPU的设计:CPU 的位宽一般是以min {ALU 位宽、通用寄存器位宽、数据总线位宽} 决定的!也就是说 CPU 由 ALU、通用寄存器、数据总线三者之中最少的位宽决定!所以 CPU 位宽与其寻址能力并不是挂钩的!也.

2021-02-02 14:32:25 873 1

原创 递归算法debug技巧

在debug递归函数的时候,最常见的做法是在IDE里一步一步打断点下去看。但是有一个问题是容易绕晕。这里分享一个比较直观方便的技巧,参考自<<分享一个小技巧,提高刷题幸福感>>。在递归函数中,缩进最能提升我们debug的效率。打印关键值,配合缩进,可以更加直观地观察递归函数执行情况。因此我们新定义一个函数printIndent和一个全局变量count:// 全局变量,记录递归函数的递归层数int count = 0;// 输入 n,打印 n 个 tab 缩进...

2021-01-28 16:36:03 1586

原创 C Training 1

singly-Linked List//// singly-linked list structure//typedef struct _LINK{ struct _LINK xdata *pLink;} LINK, xdata *PLINK;//// link head structure//typedef struct _LINK_HEAD{ PLINK pHead; PLINK pTail;} LINK_HEAD, xdata *PLINK_.

2021-01-27 14:30:19 171

原创 C Training 2

Doubly-Linked List////doubly-linked list structure//typedef struct _LIST_ENTRY{ struct _LIST_ENTRY xdata *pFLink; struct _LIST_ENTRY xdata *pBLink;} LIST_ENTRY, xdata *PLIST_ENTRY;////ListInitializeHead// initialize the head of a doubly-

2021-01-27 14:29:54 84

原创 C Training 3

#include <stdtypes.h>#define HEAD_SIZE (sizeof(HEAD_STRUCT))////control block structure//typedef struct _HEAD_STRUCT{ UINT size;// data block size struct _HEAD_STRUCT xdata *pFLink;// next structure pointer} HEAD_STRUCT, xdata *PHEA...

2021-01-27 14:29:00 135

原创 插入排序

直接插入排序基本思想将一个记录插入到已经排好序的有序表中,从而一个新的、记录数增 1 的有序表。在其实现过程使用双层循环,外层循环对除了第一个元素之外的所有元素,内层循环对当前元素前面有序表进行待插入位置查找,并进行移动。C实现(默认升序排列)void InsertSort(int *arr, int len){ int tmp; int i; int j; for (i = 1; i < len; i++) { tmp = arr[i];//待插入的元素 f

2021-01-26 14:58:12 70 2

原创 匿名联合/结构体

GCC (https://gcc.gnu.org/onlinedocs/gcc-4.6.2/gcc/Unnamed-Fields.html#Unnamed-Fields) 允许在联合/结构体中定义一个无名称的联合/结构体,例如:struct { int a; union //无名称的联合 { int b; float c; }; int d;} foo;可以直接访问无名称联合体的成员,例如: foo.b。如果直接定义一

2021-01-21 17:33:09 842

原创 常量的默认类型与移位

常量的默认类型C语言中的常量分为整形常量、浮点数常量、字符常量、字符串常量。整型常量的默认数据类型是int类型,即有符号整型。浮点数常量的默认类型是double类型,即长浮点数类型。字符常量的默认类型是char类型,即有符号字符类型,字符串常量的类型,一般为const int类型。同时,不同的编译器,略有不同,但一般遵守该规则。数据类型对应字节数 引用:https://blog.csdn.net/zhangxinbin5/article/details/7929591不同...

2021-01-19 13:52:45 2237

原创 SSD TRIM命令

TRIM(SATA), Deallocate(NVMe), UNMAP(SCSI)指的是同一类指令,都是为了减少不必要的数据搬移。原因:在文件系统中,删除文件并没有真正的删除物理的数据,只是清空了记录表。而此时,对SSD来说,它并不知道文件已经被删除了,只有下次覆写的时候,SSD才能发现之前被删除的文件对应的page是无效的,从而启动GC。然而,如果在此之前发生了GC等数据搬移动作,无效的page仍然会被当做是有效的。作用:Trim 只是一个指令,它让操作系统通知 SSD 主控某个页的数据已

2020-11-25 15:40:08 2878

原创 概念解释之SRAM,DRAM,流水线,中断

SRAM and DRAMSRAM:价格高,速度快DRAM:价格相对低些,速度比SRAM慢,需要对电容状态进行保持和刷新处理流水线CPU 流水线 (CPU pipeline):CPU 流水线一种将指令分解为多步,并让不同指令的各步操作重叠,从而实现几条指令并行处理,以加速程序运行过程的技术。指令的每步有各自独立的电路来处理,每完成一步,就进到下一步,而前一步则处理后续指令中断中断:当出现来自系统外部,机器内部,甚至处理机本身的任何例外的,或者虽然是事先安排的,但出现在现行程序的什么

2020-11-23 10:38:16 545

原创 Record -> C

用malloc给指针分配空间1. 分配的是数组时,malloc大小应为数组大小ex:int *a = (int *)malloc(sizeof(int)*N) //note: 分配的是数组时,malloc大小应为数组大小数组作为函数返回值1. 返回的数组不能是定义在函数内的数组。 因为函数内定义的数组是局部变量,函数结束时被释放。虽然没有语法错误,但是地址里的值已经没有意义。头文件重复包含的问题#ifndef X //X为标识符,可以随便取名一般取名为大写的头文...

2020-11-23 10:31:54 185

原创 Record -> Linux简单命令

Linux:普通用户切换root用户: su rootroot用户切换普通用户:su 用户名编译:gcc 源文件名.c -o 目标文件名运行:./文件名退出cat命令:ctrl + C/ctrl + DVim:编辑模式: i退出编辑模式:Esc保存并退出::+ wqcd 命令跳至上层目录 cd .. 跳入用户主目录 cd ~ ...

2020-11-23 10:28:53 356

原创 NVMe从入门到放弃

Queue PairNamespaceA namespace is a quantity of non-volatile memory that may be formatted into logical blocks 如果把闪存空间划分成若干个独立的逻辑空间,每个空间逻辑块地址(LBA)范围是 0 到 N-1 (N 是逻辑空间大小),这样划分出来的每一个逻辑空间我们就叫做 NSNS 由 Host 创建和管理,每个创建好的 NS,从 Host 操作系统角度看来,就是一个独立的磁.

2020-11-23 10:23:34 982

原创 概念区分之 M.2, PCIe, NVMe

NVMe, AHCI and IDE are transfer protocols (languages). They run on top of transfer interfaces such as PCIe or SATA (spoken, written).NVMe,AHCI 和 IDE 是传输协议(语言)。 它们运行在诸如 PCIe 或 SATA(口头,书写)之类的传输接口之上。M.2 更多的指的是主板上的硬件接口,而 SATA/PCI-E 则更多的指的是一种数据传输通道,而 AHC..

2020-09-16 17:10:53 8619

原创 概念区分之 进程与线程

进程(Process):每个进程都有自己独立的地址空间,使得进程之间的地址空间相互隔离。进程的总体目标是希望每个进程从逻辑上来看都可以独占计算机的资源。线程(Thread): 优势被称为轻量级进程(Lightweight Process,LWP),是程序执行流的最小单元。一个标准的线程由线程ID,当前指令指针(PC),寄存器集合和堆栈组成。区别和联系:通常意义上,一个进程由一个到多个线程组成,各个线程之间共享程序的内存空间(包括代码段,数据段,堆等)及一些进程级的资源(如打开文件和信号)。

2020-09-10 14:03:59 137

原创 数组和指针总结

来源: <<C 专家编程>>

2020-07-16 17:38:23 117

转载 Page Register

对Nand flash来说,读写是以page为单位。对于flash中的每个plane,都有一个page register(或者叫cache register, data register),用于存放将要写入到物理存储单元中去的或者刚从存储单元中读取出来的数据。也就是说,nand flash的数据流向如下图所示:...

2018-09-27 09:08:30 1892

转载 Nand flash相关概念介绍

1. SDR/DDRSDR(Single Data Rate): 读写数据使用上升沿或下降沿。DDR(Double Data Rate):写数据时通过MCU来控制DQS信号跳变沿来触发(即上升沿和下降沿均触发)。2. 同步/异步Sync模式是指Flash操作时需要一个源时钟来对锁存信号进行同步,提高信号采集的准确性。Async,即不需要时钟信号来进行同步,数据通过WEN...

2018-09-26 11:08:27 1552

原创 C 可变参数函数的实现方法

基本原理在C中,函数形参从右往左入栈,且栈是从高地址往低地址方向增长。通过利用指针,可以访问未出现在列表中的参数。实现步骤相关宏定义如下://define in stdarg.h#define va_start __crt_va_start#define va_arg __crt_va_arg#define va_end __crt_va_end//define...

2018-09-06 13:36:43 1504

原创 eMMC Summary

1. overview11-wire bus : clock, data strobe, 1 bit command , 8 bit data bus DAT0 low :busy2. Message Tokens• Command: token that starts an operation• Host to device• CMD line• Response...

2018-08-07 17:03:50 400

原创 学习小结之 MFC

问题1:MFC列表框中内容不按照添加的顺序显示解决:控件属性-&gt;行为-&gt;sort-&gt;false设置编辑框变灰且不可输入:GetDlgItem(IDC_EDIT1)-&gt;EnableWindow(FALSE);清除编辑框中已经显示的内容:GetDlgItem(IDC_EDIT1)-&gt;SetWindowText(L"");L””等于CString类型的NULL,不等于一般的...

2018-06-28 09:31:30 337

原创 SSD相关术语

接口类型:    SATA    PCIe传输协议:    AHCI(对应SATA)    NVMe(对应PCIe)

2018-06-27 13:11:09 440

原创 学习小结之 Git

## Git 学习总结### Git简介&gt; Git是一个开源的分布式版本控制系统,可以有效、高速的处理从很小到非常大的项目版本管理。Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。### Git 环境配置**1.**[下载](https://github.com/git-for-windows/git/releases/do...

2018-06-20 19:07:35 114

DigilentFTDIConfig.7z

Digilent量产工具

2021-07-10

OLED SH1106/SSD1306显示

OLEDSH1106/SSD1306通过I2C点亮屏幕及显示

2021-03-18

JESD84-B51_eMMC 5.1_x3.pdf

eMMC (Embedded Multi Media Card)是 MMC 协会订立、主要针对手机或平板电脑等产品的内嵌式存储器标准规格。eMMC 在封装中集成了一个控制器,提供标准接口并管理闪存,使得手机厂商就能专注于产品开发的其它部分,并缩短向市场推出产品的时间

2020-09-17

PCI Express Base Specification Revision 5.0 Version 1.0.pdf

PCI-Express(peripheral component interconnect express) 是一种高速串行计算机扩展总线标准,它原来的名称为 “3GIO”,是由英特尔在 2001 年提出的,旨在替代旧的 PCI,PCI-X 和 AGP 总线标准。

2020-09-17

论文画图软件

matlab描点工具,适用于论文画图。软件名为getdata,具体使用方法自行百度。

2018-07-03

git学习总结

Git是一个开源的分布式版本控制系统,可以有效、高速的处理从很小到非常大的项目版本管理。Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。

2018-06-29

VS code c语言配置文件

Microsoft在2015年4月30日Build 开发者大会上正式宣布了 Visual Studio Code 项目:一个运行于 Mac OS X、Windows和 Linux 之上的,针对于编写现代 Web 和云应用的跨平台源代码编辑器。

2018-06-29

MFC学习心得

微软基础类库(英语:Microsoft Foundation Classes,简称MFC)是微软公司提供的一个类库(class libraries),以C++类的形式封装了Windows API,并且包含一个应用程序框架,以减少应用程序开发人员的工作量。其中包含大量Windows句柄封装类和很多Windows的内建控件和组件的封装类。

2018-06-28

Cx51学习总结

The Cx51 Compiler User's Guide contains information about how to use the Keil C51 and CX51 Compilers. The Cx51 Compiler creates object modules from the C files you write and compile. Object modules created may be added into a library (using the LIB51 Library Manager) or may be linked with other object modules and libraries to form a program (using the BL51 Linker or the LX51 Linker).

2018-06-28

Ax51学习总结

The Ax51 Assembler provides a number of directives you may use to control source file assembly. Directives are composed of one or more letters or digits and, unless otherwise specified, may be specified after the filename on the command line or within the source file when preceded by a dollar sign ('$').

2018-06-28

8051学习总结

8051是一种8位元的单芯片微控制器,属于MCS-51单芯片的一种,由英特尔公司于1981年制造。INTEL公司将MCS51的核心技术授权给了很多其它公司,所以有很多公司在做以8051为核心的单片机,如Atmel、飞利浦、深联华等公司,相继开发了功能更多、更强大的兼容产品。 8051单芯片是同步式的顺序逻辑系统,整个系统的工作完全是依赖系统内部的时脉信号,用以来产生各种动作周期及同步信号。在8051单片机中已内建时钟产生器,在使用时只需接上石英晶体谐振器(或其它振荡子)及电容,就可以让系统产生正确的时钟信号。

2018-06-28

c程序设计语言学习总结

c程序设计语言学习总结。《C程序设计语言》是由C语言的设计者Dennis M. Ritchie和著名计算机科学家Brian W. Kernighan编写的一部介绍标准C语言及其程序设计方法的权威性经典著作。全面、系统地讲述了C语言的各个特性及程序设计的基本方法,包括基本概念、类型和表达式、控制流、函数与程序结构、指针与数组、结构、输入与输出、UNIX系统接口、标准库等内容。

2018-06-27

公式识别小工具

能够检测识别出pdf文件和图片中的公式,以便于复制和使用。

2018-06-20

空空如也

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

TA关注的人

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