自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 硬件相关知识

MCU:CPU + RAM +ROM +I/O,在CPU基础上加入片上RAM,flash,串口,adc等外设,在一块芯片上集成整个计算机系统//内存控制单元。norflash 不仅可以存储数据,还可以取指执行(mcu给出地址,nor可以直接返回地址交给mcu去执行,避免了拷贝指令到ram中执行)时钟信号:cpu的FCLK AHB总线外设的HCLk APB总线外设的PCLK。IIC 同步半双工 多主多从 SDA SCLK 开始信号 结束信号 应答信号。差分信号:提高信号的抗干扰性。CPU:取指 译码 执行。

2024-10-25 19:43:31 169

原创 知识汇总回顾

0-3G是进程的空间 3-4G是内核空间进程的状态:执行,阻塞,就绪px aux//查询进程top//根据CPU占有率查看进程相关信息kill -2 PID 15//发送信号-2给对应的进程killall -9 进程名//发送信号-9给对应的所有进程//生成子进程,一次调用会返回两次父进程中成功返回 子进程的pid,失败返回-1子进程中成功返回零,失败无一次fork生成一个进程getpid();//获取本进程的pidgetppid();//获取父进程的pid。

2024-10-17 20:35:31 525 1

原创 platform总线以及内核定时器

platform总线是没有总线的设备的归总,从而让他们拥有一个总线。driver 文件:platform_driver dir =.flags =(有宏)设置时间为将来的某一时刻,在定时的时间触发事件。

2024-10-15 20:56:04 189

原创 驱动GPIO宏

gpio_direction_output(GPIO_XXX,设置电平);//引脚设为输出模式并输出高低电平。//获取电平 1 或 0。gpio_set_value(GPIO_XXX,电平);

2024-10-15 20:38:16 132

原创 驱动开发整理

5.改变开源内核目录中arch/arm/boot/Makefile的uImage下载地址(不修改会导致pc访问错误的程序段,导致无法启动内核)4.注释掉kernel/timeconst.pl的错误并修改要进行驱动编写目录中Makefile的地址。加载ubuntu的文件系统要先修改uboot里面的环境变量,再执行第二步的第一条。2. 加载本芯片的文件系统直接执行命令: tftp 内存地址 内核(kernel)注:每次切换要挂载的文件系统时都要执行第二步(重新将内核下载到内存地址)

2024-10-09 11:33:29 167

原创 多路 IO

selectepoll。

2024-09-09 14:01:58 120

原创 网络编程相关概念

4.物理层 ARP(地址转换协议) RARP (逆向转换) ip--->mac。1.socket 套接字(用于网络的一种函数)//返回值为文件描述符。2.传输层 TCP(传输控制协议) UDP(用户数据报协议)IP地址的分类: A B C D E 四类。3.网络层 IP ICMP(ping)2.ip + port 地址 + 端口。IP地址 = 网络位 + 主机位。1.应用层 HTTP DNS。

2024-09-02 15:50:32 98

原创 进程间通信

pipe无名管道//亲缘关系进程才可以用 pipe。read最好读取二进制文件,fgets读取文本文件。fifo有名管道//任意进程 mkfifi。实现fd与fp的转换。echo $$ //返回终端的id号。kill://发信号到进程。

2024-08-27 09:01:35 130

原创 线程,互斥与同步

僵尸进程:要进行回收操作 //如果程序运行时间长要回收,短的话不回收。waitpid();//非阻塞回收(有可能失败,失败了稍后再试)pthread_join();//尽量不要直接用局部变量。互斥锁(对临界资源的排他性访问):互斥锁变量(内核对象)同步:有顺序的访问临界资源。**:表示改变指针的指向。变量可以共享,节省资源。*:表示改变指针的内容。pthread 线程。

2024-08-23 10:21:31 201

原创 进程与线程

2.批处理进程 shell脚本(一堆命令写在一个文件里,一行行执行命令)fork()&&fork()||fork() 考虑截断效应。进程的状态:就绪态->执行态->阻塞态(基本的操作系统)exit(0\1);//会刷新缓冲区,用于结束进程。//不刷新缓冲区,用于结束进程。top/根据CPU占用率查看进程的相关信息。getppid(获取父进程pid号)3.守护进程(杀毒软件、输入法等)pcb(进程控制块)是一个结构体。ps aux//查看进程相关信息。僵尸进程//子进程先消亡。孤儿进程//父进程先消亡。

2024-08-19 21:33:22 221

原创 linux目录操作

symlink 软链接 (快捷方式)truncate 减小文件的大小。Makefile://工程管理工具。link ln 硬链接。

2024-08-19 10:27:45 110

原创 文件io操作

/定位文件流指针,再偏移多少以确定文件流指针的位置。读取操作或者写入操作后,光标会移动到末尾位置,需要重新移动光标。文件io:一般是对设备文件操作,当然也可以对普通文件操作。//文件开头到文件流指针字符大小。3.文件描述符 很小的非负整数 0-1023。2.操作对象不是流,二十文件描述符。open打开 成功返回函数描述符。write写入 成功返回写入的个数。read读取 成功返回读取的个数。全缓冲 //主要用于文件的写。

2024-08-13 21:43:33 193

原创 linux文件操作

fgets和fputs不可以处理二进制文件,只能处理文本文件。fputc(写入的内容,要写入的文件地址);man手册在linux系统很重要。vimdiff:文本对照工具。//一个字符一个字符处理。

2024-08-12 21:32:21 85

原创 枚举的定义

算术右移:看符号位,看数据类型,如果是有符号类型的数据,右移时最高位补符号位,如果是无符号类型,右移时最高位补0。//此时a是int类型的一个别名 a b = 5;函数指针 指向函数类型的指针 //基类型是函数的指针。3.枚举类型的本质实际是一个int类型的数据。4.枚举类型的变量与整形类型的变量是通用的。a << n //将a这个数据左移n位置。a >> n //将a这个数据右移n位置。如果有给定的值,后续没有给值的依次加1。typedef//给类型起别名。或运算 |:一真则真 //置1。

2024-08-11 22:47:45 164

原创 结构体共用体

为成员运算符//表示 的。2.共用体里面赋值,默认最后一个为值赋给共用体,但是还看要最后一个值能影响几个字节。}//表示定义出一个数据类型,可以进行定义变量,定义指针变量,定义数组等操作。结构体变量的引用:一般是引用到具体的成员数据。结构体类型:用来描述复杂数据的一种数据类型。1.共用体初始化时,默认第一个值赋给共用体。根据各个成员的类型,按顺序依次初始化。同类型的结构体变量之间,可以相互赋值。结构体变量的使用:变量名.成员名。2.共用体中,成员共用一块空间。不超过,按照最大的字节对齐。

2024-08-09 21:44:40 301

原创 指针以及操作

指针数组:数组中存放着指针,也就是地址。1.可以定义一个函数类型的指针变量来保存函数的入口地址。2. 有了这个指针可以通过指针变量进行函数调用。函数名就代表着函数的入口,也就是首地址。回调函数 callback。通过指针的方式来调用函数。指针操作二位字符型数组。

2024-08-08 19:53:34 91

原创 指针操作一维数组

void *memcpy(void *dest, const void *src, size_t n(总字节数))const int *p = &a//限定基类型,表示不能通过*p的方式来修改值(只读)//限定基类型,表示不能通过*p的方式来修改值。// p指向二维数组名, *p 是里面的一维数组名。void * //空类型的指针,也叫万能指针,可以接受任意类型的指针。//限定指针变量p,p为只读。//p *p 都不可修改。1.如果不想通过*p方式改变基类型对应的数据。

2024-08-07 21:36:07 117

原创 指针以及快速排序

1.将数组首元素a[0]作为基准值,首位地址为begin,末位地址为end。//数组名a代表的是数组的首地址,表示p指向数组a。形参:指针类型变量,用来接收实参(实参是要访问的内存空间的地址)形参:数组形式//本质上是一个指针类型变量。地址传递:要改变的变量要传地址过来,但是要保证空间有效。p - q //表示相差几个基类型且是同一类型的指针。p + q p *q p/q //无实际意义,会报错。//p是指针类型,q是int类型。//空指针,地址为0。p + 1 //表示跳过了1个基类型。

2024-08-06 18:38:26 307

原创 预处理宏定义

对于一般的简短代码,考虑写成带参宏(不需要保存现场,还原现场,优势劣势都有)预编译:执行代码中的预处理命令,生成一个只包含的.c文件。函数的参数是有类型的,编译阶段是要进行类型检查的。将使用的代码链接到一起,最终生成可执行文件。宏的参数,只进行文本替换,不进行语法检验。//&a 的数据类型是 int *函数的使用本质上是函数代码的调用。宏的使用本质上是文本的原样替换。*p表示访问 p所指向的基类型的内存空间的内容。# undef N //取消宏名的定义。则预处理程序段1//保留程序段1的代码。

2024-08-05 20:48:09 387

原创 函数以及关键字

/ 3.static 修饰的变量 -- 只能用常量初始化 (不能用变量初始化)//表示限定全局变量的作用域位本文件,别的文件不能通过extern来声明使用。auto //表示它是一个自动变量 (局部变量) --- 自动申请 自动释放。extern //外部的 ---表示你的变量 是存在外部的 //多文件编程。//register 修饰的变量 ,不能 做 & //(取地址)// 2.static 修饰的变量 -- 具有继承性。[存储类别] 类型 变量名;

2024-08-04 23:05:51 437

原创 函数,递归

形参:写成数组形式,且需要数组长度 void sum(a[],len)函数调用的本质:利用栈的结构(先入后出)保证了函数可以层层嵌套调用。实参:数组名,数组长度 sum(a,len);主要用来存放自动变量或函数调用的数据。思路:要解决问题n,先解决问题n-1。函数不可嵌套定义,但是可以嵌套调用。空间大,可以手动申请,手动释放。1.能拆成函数的尽量拆成函数。存放全局变量 和静态变量。1.数组元素作为函数参数。2.数组本身作为函数参数。2.考虑健壮性,拓展性。

2024-08-02 22:08:36 236

原创 嵌入式学习之C语言

2.strcpy(*dest,*src)将src复制到dest dest:目标 src:源。int [3][4] a[2]:再两个int存储空间中,分别插入[3][4]二维数组。4.strcmp(a,b)比较大小,返回值为ab最后停的位置上的差值。3.strcat(*dest,*src)将src拼接到dest。二维数组: int a[2][2];2.二维数组实际上是数组的数组。1.c语言中不存在真正的数组。

2024-07-31 21:17:20 209

原创 嵌入式学习之c语言排序

擂台制,所取的数字作为第一个令其为最小值,后面的数字都与之比较,后面的数字更小则交换位置,比完一轮就可确定第一个数是最小的,接下来同理找第二小的。

2024-07-30 23:08:21 192

原创 嵌入式学习之c语言

先执行后判断,表达式为真一直执行语句,直至为假跳出;//为可变长数组,但是不可以进行初始化!求数组内有多少个数据可以用数组总长除以数据类型的长度。全部初始化:int a[3] = {1,2,3};结束本次循环,继续下一次循环,只用在循环语句中。部分初始化:int a[3] = {1};单一性:数组内数据的数据类型相同。数组下标:从0开始,表示偏移量。不初始化:int a[3];a的值为数组所占空间的首地址。a的数据类型为整个数组的类型。数组:存储一组的数据的集合。数组内的数据的数据类型相同。

2024-07-29 20:02:15 176

原创 嵌入式学习之c语言流程控制

表达式1?表达式2:表达式3表达式1成立执行表达式2,否则执行表达式3if else多种情况可以用else if 来继续选择最后用else 结束switch(表达式的值)case: ......default:break;未遇到break或者}都不结束,继续运行。

2024-07-28 22:32:07 195

原创 嵌入式学习之c语言

1.驼峰命名法:FirstNum 大驼峰 firstNum 小驼峰2.内核命名法:first_num3.要见名知意,尽量不用拼音。

2024-07-26 20:17:51 300

原创 嵌入式学习之c语言基础知识

n:换行\t:调到下一个制表符,制表符的长度为八个字节\b:退格\r:回车,回到本行开头字符常量:'A''\101':八进制'/x41':十六进制。

2024-07-25 20:46:21 181

原创 计算机基础知识

数据类型 int short long long long float double long double char 等。负数的反码为符号位不变,数值为取反;负数的补码为反码加一;特殊情况:1000 0000 0000 0000 其中的1既是符号位又是数值位。5.偏移量为127+2=129 二进制为1000 0001。unsigned 无符号位 signed 有符号位。1.先将整数位化为二进制为110(除二取余法)2.将小数位化为二进制为001(乘二取整法)6.以符号位 指数位 尾数位 结合。

2024-07-24 21:05:38 131

原创 linux基本命令

mv 源文件 目标文件 //目标文件不存在,为重命名;cp 源文件 目标文件 -r //若目标文件不存在,为复制一份;cp 源文件 目标文件 //将源文件复制一份,命名为目标文件。ls -a //查看所有文件(.开头的为隐藏文件)touch file1 file2 //创建文件。mkdir 1/2/3 -p //创建多级目录。ls -lh //带单位大小查看文件属性。mkdir 文件名 //创建目录。ls -l //查看文件属性。ls //查看目录下的文件。rm -r //删除文件夹。

2024-07-23 20:32:40 204

空空如也

空空如也

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

TA关注的人

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