- 博客(36)
- 资源 (1)
- 收藏
- 关注
原创 Linux 应用编程和网络编程重要知识点
1、API是一些函数,这些函数是由linux系统提供支持的,由应用层程序来使用。2、基于linux去做应用编程,其实就是通过调用linux系统API来实现应用需要完成的任务。3、我们要使用linux系统来读写文件,手段就是学习linux系统的API中和文件IO有关的几个(open、close、write、read、lseek)。4、打开文件时,文件的读写权限:O_RDONLY以只读方式打开O_WRONLY以只写方式打开O_RDWR以可读可写的方式打开打开存在并且由内容的文件时:O_APPEN
2020-06-23 13:54:31
333
原创 网络通信重点知识(IP/TCP)
1、环回地址(一般是1 2 7 . 0 . 0 . 1)2、以太网和8 0 2 . 3对数据帧的长度都有一个限制,其最大值分别是1 5 0 0和1 4 9 2字节。链路层的这个特性称作M T U,最大传输单元3、I P仅提供最好的传输服务4、任何要求的可靠性必须由上层来提供(如T C P)5、I P提供不可靠、无连接的数据报传送服务6、普通的I P首部长为2 0个字节(分为5个部分,每部分4个字节,每个字节8位)7、大部分网络设备的MTU都是1500(也就是以太网的MTU)8、4个字节的32
2020-06-23 13:51:48
533
原创 linux驱动开发一般步骤(以S5PV210开发板为例)
1、驱动的价值就在于实现API2、驱动是内核的一部分3、驱动开发的步骤1)驱动源码的编写、Makefile编写、编译2)insmod装载模块、用应用程序测试、rmmod卸载模块4、在linux中用find来查找某个文件所在的路径find . -name ‘x210ii_qt_defconfig’ //在当前文件夹下面查找x210ii_qt_defconfig的路径一般的xxx_defconfig文件在arch/arm/config/文件夹下5、常用的模块操作指令lsmod 将当前内核中已经
2020-06-23 13:45:51
699
原创 TCP/IP协议十大重要知识点(面试必问)
本文整理了一些TCP/IP协议簇中需要必知必会的十大问题,既是面试高频问题,又是程序员必备基础素养。一、TCP/IP模型TCP/IP协议模型(Transmission Control Protocol/Internet Protocol),包含了一系列构成互联网基础的网络协议,是Internet的核心协议。基于TCP/IP的参考模型将协议分成四个层次,它们分别是链路层、网络层、传输层和应用...
2020-03-27 00:01:05
1218
原创 S5PV210中有USB启动改为SD卡启动时为启动程序添加16byte(字节)的校验头程序详解
在USB启动原文件上添加上下面代码即可完成校验头的添加,不过一般的做法是把此程序成单独文件在Makefile中进行编译,一般形式为:gcc check_head.c -o check_head./check_head no_check_head.bin have_check_head.bin注:编译器要使用gcc,平台(Linux)编译器,不能使用交叉编译工具链中的gcc,因为此程序的编译工...
2020-03-01 15:22:27
194
原创 Makefile重点常用技巧二(通配符、文件搜索、自动化变量、=、:=、?=)
Makefile中的*通配符:举例说明:print: * .c目标 print 依赖于所有的[.c]文件。objects = * .o上面例子表示了,通符同样可以用在变量中。并不是说[* .o]会展开,objects的值就是“* .o”。如果你要让通配符在变量中展开,也就是让 objects 的值是所有[.o]的文件名的集合,那么,你可以这样:objects := $ (wildca...
2020-02-29 13:04:12
180
原创 Makefile重点常用技巧三(变量值的替换、追加变量值、执行指定的Makefile、MAKECMDGOALS变量)
变量值的替换:其格式是“$ (var:a=b)”或是“${var:a=b}”,其意思是,把变量“var”中所有以“a”字串“结尾”的“a”替换成“b”字串。eg:foo := a.o b.o c.obar := $ (foo:.o=.c)这个示例中,我们先定义了一个“$ (foo)”变量,而第二行的意思是把“$ (foo)”中所有以“.o”字串“结尾”全部替换成“.c”,所以我们的“$...
2020-02-29 13:00:53
994
原创 Makefile重点常用技巧一(宏定义、隐晦规则、引用其它Makefile、make clean做法、Makefile中5大主线)
重点:在 Makefile 中的命令,必须要以[Tab]键开始。Makefile中定义变量类比C中的宏定义:比如,我们声明一个变量,叫 objects我们在 makefile 一开始就这样定义:objects = main.o kbd.o command.o display.o \ // ‘\’为换行符insert.o search.o files.o utils.o...
2020-02-29 12:16:03
458
原创 Makefile中的常用函数
Makefile中的常用函数使用:函数调用以“$”开头,以圆括号或花括号把函数名和参数括起来。1、subst$(subst < from >,< to >,< text >)有3个参数名称:字符串替换函数——subst。功能:把字串< text >中的< from >字符串替换成< to >。返回:函数返回被替换过...
2020-02-29 12:07:35
392
原创 Makefile中的自动化变量
Makefile中的自动化变量1、$ @表示规则中的目标文件集。在模式规则中,如果有多个目标,那么,"$ @“就是匹配于目标中模式定义的集合。2、$ %仅当目标是函数库文件中,表示规则中的目标成员名。例如,如果一个目标是"foo.a(bar.o)”,那么,"$ %“就是"bar.o”,"$@“就是"foo.a”。如果目标不是函数库文件(Unix下是[.a],Windows 下是[.li...
2020-02-29 11:56:14
301
原创 Linux中安装交叉编译工具链与创建符号链接(三星官方在开发S5pv210利用的)
**交叉编译工具链版本选择:**arm-2009q3版本交叉编译工具链的安装步骤:第一步:打开虚拟机,在/usr/local/下创建/usr/local/arm文件夹第二步:利用共享文件夹将安装包从Windows中弄到linux中去第三步:解压,tar -jxvf arm-2009q3.tar.bz2第四步:复解压好的arm-2009q3到/usr/local/arm文件夹下到此相当于...
2020-02-20 12:53:16
189
原创 S5PV210开发板破坏内部的iNand与利用fastboot工具进行刷机
破坏内部的iNand从其它方式启动:方法一:在系统完全启动之后,在SecureCRT界面用dd命令破坏第一步:busybox dd if=/dev/zero of=/dev/block/mmcblk0 bs=512 seek=1 count=1 conv=sync第二步: sync方法二:在uboot下破坏内部iNand第一步:在开机计数开始,按下回车键,进入uboot下第二步:mov...
2020-02-20 12:36:26
307
原创 ARM体系结构(ARM的7种工作模式和异常处理机制)与常用的ARM汇编指令集
CISC:复杂指令集CPU,CISC体系的设计理念是用最少的指令来完成任务(譬如计算乘法只需要一条MUL指令即可),因此CISC的CPU本身设计复杂、工艺复杂,但好处是编译器好设计。RISC:精简指令集CPU,RISC的设计理念是让软件来完成具体的任务,CPU本身仅提供基本功能指令集。因此RISC CPU的指令集中只有很少的指令,这种设计相对于CISC,CPU的设计和工艺简单了,但是...
2020-02-19 00:50:45
964
原创 S5PV210的启动方式与过程详解与内存和外存的介绍
S5PV210启动过程流程图:存储器情况:210内置了一块96KB大小的SRAM(叫iRAM),同时还有一块内置的64KB大小的NorFlash(叫iROM)启动过程详解:①iROM可以进行初始引导:初始化系统时钟,设备专用控制器和引导设备(该代码被称为BL0,出厂前就已经设置)。②iROM引导代码可以将引导加载程序加载到SRAM。 引导加载程序被称为BL1。然后,iROM在安全启动...
2020-02-18 16:00:23
431
原创 Linux中常用的命令和使用技巧(全面、易懂)
Linux中常用的命令:1、绝对路径:路径是从绝对位置开始的。譬如Windows中从某一个盘符开始(eg:C:\),linux中从根目录/开始相对路径:指明路径的时候,是从当前所在的位置开始的。2、ls(list,列表)作用:使用列表把当前文件夹下所有文件显示出来ls -a 显示所有文件,包括隐藏文件ls -l 以详细信息显示ls -a -l == ls -l -a == ls -l...
2020-02-18 00:25:46
449
原创 C语言中常见文件访问指针函数,fseek()、ftell()、rewind()和lseek()的用法(通俗易懂)
fseek()函数:作用:重定位文件内部指针的位置。头文件包含:#include <stdio.h>函数原型:int fseek(FILE *stream, long offset, int whence);参数解析:stream为文件打开后的流(文件内部)指针(FILE *);offset为偏移量(正数为从文件头向文件尾的偏移方向,负数相反,0不偏移);fromwhere为指...
2020-02-17 14:42:00
2858
1
原创 cJSON项目实现大致流程
CJSON代码解析:JSON是一种轻量级的数据交换格式,它的作用是把其它格式的数据,处理成JSON格式,JSON格式的数据易于阅读和编写。CJSON,就是用C语言来实现JSON1、从主函数入手,可以看出里面最重要的一个函数就是doit()函数,主函数main()就是靠调用这个函数来实现功能的。但是在利用doit函数实现功能的时候,在调用doit()之前,必须先在主函数内部给出要进行处理的...
2020-02-16 23:55:14
440
原创 常用的字符串处理函数(memcpy+memmove+memset+memcpy+memchr+strcpy/strncpy+strcat/strncat+strcmp/strncmp+strdup)
memcpy:从一个字符串复制一个字节到另外一个字符串(The memcpy() function copies n bytes from memory area src to memor area dest. ),并且两个字符串不能有重叠区域。头文件包含:#include <string.h>memcpy()函数原型:void *memcpy(void *dest, ...
2020-02-15 15:28:45
483
原创 库函数与API+NULL深度解析+debug宏
库函数与API:应用程序与操作系统之间的通信是通过API实现的,当应用程序要使用系统资源时就通过API向操作系统发出申请。C库函数可以理解为是对API函数的二次封装,使应用程序更加好用。NULL深度解析:(viod *)0这个整体表达式表示一个指针,这个指针变量本身占4个字节,指针变量的值为0,也就是说指针变量指向0地址(实际是0地址开始的一段内存);因为内存0地址处都不是可以随便访问的,是...
2020-02-14 12:15:27
120
原创 变参函数的深度解析(通俗易懂)
可变参数函数的定义:可变参数函数又称参数个数可变函数(本文也简称变参函数),即函数参数数目可变。其中,参数可分为两部分:数目确定的固定参数和数目可变的可选参数。函数至少需要一个固定参数,其声明与普通函数参数相同;可选参数由于数目不定(0个或以上),声明时用"…"表示(“…”用作参数占位符)。固定参数和可选参数共同构成可变参数函数的参数列表。可变参数函数的原型:type VarArgFunc(...
2020-02-13 12:34:28
1368
原创 存储类常用关键字与链接属性
存储类常用关键字:auto关键字:用来修饰局部变量,表示这个局部变量是自动局部变量,分配在栈上;平时定义局部变量时就是定义的auto的,只是省略了auto。static关键字:1、用来修饰局部变量(改变存储类性质),表示静态局部变量分配在数据段/bss段上。非静态局部变量分配在栈上。2、用来修饰全局变量(改变链接属性),静态全局变量链接属性为内链接,非静态全局变量链接属性为外链接。静态...
2020-02-12 17:00:37
222
原创 函数的宏定义与常用的函数库
从源码到可执行程序的生产过程:源码(.c文件)->经过预处理,变为.i源文件->经过编译,变为.S汇编文件->经过汇编,变为.O目标文件->经过链接,变为.elf可执行程序。可简单理解为:将.C源文件经过编译(包括汇编)可以得到.O目标文件,将.O目标文件经过链接可以得到.elf的可执行文件。1、gcc xx.c -c -o xx.o //将xx.c源文件只编译获得x...
2020-02-12 15:50:33
325
原创 共用体与大小端问题深度解析+枚举使用
共用体(union):共用体在类型定义、变量定义、使用方法上相似;共用体中的各个成员是一体的,它们使用同一个内存单元(也就是共用体中的说有元素使用的内存单元是同一个,大小是占用内存最大的那个元素的大小)。多用于对同一个内存单元进行多种不同规则的解析。代码说明:#include <stdio.h>// a和b其实指向同一块内存空间,只是对这块内存空间的2种不同的解析方式。//...
2020-02-11 23:06:38
267
原创 字符串+sizeof/strlen+typedef+结构体对齐访问(全面解析)
字符串解析:C语言中没有原生字符串类型,定义字符串时可以通过字符串指针来间接实现。char *p=“linux”,此时p就代表一个字符串。字符串在内存中是多个字节连续分布的。在C语言中用一个指针指向字符串头;以’\0’结尾;中间的有效字符连续连接。存储多个字符的两种方式:字符串和字符数组字符数组自身有内存可以出字符,字符串一定需要额外的内存来存字符,字符串本身只存真正的那些字符所在内存空...
2020-02-11 22:32:10
179
原创 全指针知识点+指针的深度解析+数组知识点+指针与数组的纠葛
指针的本质:指针的本质就是一个变量,只不过该变量的值为一个地址,指针变量简称为指针。使用指针的三部曲:1、定义指针变量2、关联指针变量3、指针变量的解引用指针所占内存:在32位系统中 不管是什么类型的指针,所有指针的长度都为4个字节。野指针:1、野指针,就是未初始化的指针变量,指针指向的位置是不可知的(随机的/错误的/未知的)。2、怎样避免野指针定义指针时,同时初始化为NUL...
2020-02-10 23:01:29
220
原创 理解状态机(通俗易懂)
状态机简单概念:满足一个状态时将会跳转到下一个状态,当所有状态都满足(或执行完所有的状态时),将会完成所要的结果。eg:密码锁的密码设为13579,则状态机总共有6中状态。可以定义为state1~state6。当输入1,跳转到state1(当前状态就设为了state2)当输入3,跳转到state2(当前状态就设为了state3)...当输入9,跳转到state5(当前状态就设为了s...
2020-02-09 00:19:57
1954
原创 C语言双链表深度解析
双链表深度解析:双链表的理解方式同单链表类似,只是比单链表多了一个指向前一个节点的指针(单链表的理解可以参考本博主的链表的概念与单链表的深度解析博文)。双链表实现举例:只要能够理解下面程序,就可以理解透彻双链表。因为程序中包含了头指针、头节点、节点的创建、节点的头插入、节点的尾插入、链表的遍历、链表节点的删除重点内容。#include <stdio.h>#include &...
2020-02-08 23:34:04
151
原创 链表的概念与单链表的深度解析
链表的概念:链表的引入是为了解决数组的插入和删除的窘境,可以把链表看作为一个动态扩展(实时变大/缩小)的数组。链表是由多个节点相互连接组成的,连接是通过指针实现的;所说的节点并非一点,而是一段,包括有效数据区和指针,有效数据局用来存储数据,指针用来指向下个节点整体。单链表解析:对于链表(包括单链表和双链表)而言,重点理解概念,学会怎么用和实现原理。重点理解链表的插入、遍历、删除。单链表实...
2020-02-08 16:51:08
284
原创 何为哈希(Hash)表(散列表)?
Hash表与数组的关系:Hash表又称散列表;可以把Hash表看作为一种特殊的数组;Hash表与数组的主要区别在于:1、数组在存储数据的时候是连续存储2、Hash在存储数据的时候是非连续存储的,通过Hash函数在索引值与数据之间建立映射关系,查找或存储的时候通过关键字和Hash函数来进行。3、相比于数组,哈希表的响应速度更快,效率更高。数组在查询数据时是遍历查询,哈希表为一对一的精确查...
2020-02-07 13:33:24
404
原创 利用宏定义来进行位运算
宏定义原型:1、利用宏定义来完成某一位的置位#define SET_BIT(a,n) (a | ((1U)<<(n-1)))2、利用宏定义来完成某一位的复位#define CLEAR_BIT(a,n) (a & ~((1U)<<(n-1)))3、利用宏定义来完成部分连续位的取出#define GETBITS(a,n,m) ((a & ~( ~(0...
2020-02-06 22:30:23
1702
原创 const关键字和指针的结合 & static关键字
const关键字和指针的结合:1、const int *p;p所指向的数据为常量。2、int const *p;p所指向的数据为常量。3、int *const p;p本身为常量,p所指向的数据为变量。4、const int *const *p;p本身为常量,p所指向的数据为常量。注:对理解函数输入型参数有很大帮助static关键字:静态局部变量:为了继承局部变量每次执行完之后...
2020-02-05 11:40:18
180
原创 container_of宏深度解析
作用:由结构体中某个元素的指针,推出整个结构体变量的指针。原型:#define container_of(ptr,type,member){const typeof(((type*)0)->member)* _myptr=(ptr);(type*)((char*)_myptr-offsetof(type,member));})变量分析:ptr指向结构体元素member元素的指针...
2020-02-03 15:21:35
2945
原创 offsetof宏深度解析
作用:计算结构体中某个元素和结构体首地址之间的偏移量。原型:#define offsetof(TYPE,MEMBER) ((int)&((TYPE*)0))->MEMBER变量分析:TYPE为结构体变量的类型;MEMBER为结构体中的某个元素。原理:虚拟一个TYPE类型的结构体变量,然后用TYPE.MEMBER的方式去访问那个MEMBER元素,继而得到MEMBER元素相...
2020-02-03 13:04:16
368
原创 C语言中内存管理方式(堆、栈、数据区)
三种内存管理方式:1、栈2、堆3、数据管理区(包括代码段、数据段(.data)、bss段)不同内存管理方式使用区别:栈:只有一个出口呈现出先进后出方式。使用时是自动的,完全有编译器和运行环境提供服务,不用人为干预。堆:在使用的时候需要人工申请人工释放。存储数据不同:栈:普通局部变量、函数内部临时使用的,但是出了函数不会用到的变量。数据区:代码段:程序中可执行的部分(函数)、常量...
2020-01-31 16:50:12
473
原创 C与C++内存分配专题(malloc/calloc/realloc/_alloca/new)
1.函数原型void* malloc(size_t size);void* calloc(size_t nmemb, size_t size);void* realloc(void* p,size_t newsize);void* _cded_alloca(size_t);2.区别malloc: malloc()函数接收一个参数,为要分配的内存空间的大小。在内存的动态存储中分配一块长度...
2020-01-28 17:40:47
414
原创 电脑或U盘文件夹变为后缀为.exe文件,解决办法。
**电脑或U盘文件夹变为后缀为.exe文件,解决办法。** //download.csdn.net/download/m0_46204326/12109057当你发现你的电脑文件夹后缀变为.exe格式的时候,切记不要打开,因为你的你的电脑已经被木马病毒感染,这种病毒通常是通过U盘作为传播介质。可以使用提供的方法进行解决(见网盘,点击link)。link...
2020-01-17 12:53:27
2375
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人