自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 GPIO驱动的传感器

操作:主机将总线拉低60~120us,表示发送0;发送完数据后将总线拉低30us,从机才能接受数据,每次发送时间应该大于60us。接着就可以接收温度了,即使用总线接收数据,接收两个字节(两个八进制数),一个为LSB,第二个为LSB;操作:主机将总线拉低1~15us,然后释放总线,接着开始读取数据(读取时间尽量靠近拉低的那15us)。现象:等待15~60us后,从机会响应一个60~240us的低电平,然后也置高。操作:首先将线电位置高,接着将其拉低480us以上,然后释放总线(将其置高)

2024-04-29 23:07:22 221

原创 经典排序算法总结

本文章对之前了解过的排序算法进行简单的总结与解释:以该数组为例:a[5]={41,23,57,18,47};

2024-04-29 16:47:19 794 1

原创 I2C同步通信

在SCL时钟处于高电平的时候,SDA发送一个低电平(起始位),从而其他设备停止发送数据,进入聆听状态,然后主设备发送7位从机地址以及一位数据方向地址,其中方向地址为1时主机接收数据,为0时发送数据,在时钟位为低电平时,数据线才能产生电位变化(假如发送0010,发送到第二个0时,要发送第三个数字时,必须等到时钟线为低)。发送完一帧数据后(8位数据,先发MSB,再发LSB)必须再发送一位应答位,若应答(0),则可以继续发送或发送一位中止信号停止发送,若无应答(保持1),则发送一位中止信号。

2024-04-21 17:58:41 261

原创 UART串口通信

2^8-2smod * focs / 32 / bps / 12,其中smod表示PCON的B7,根据实际情况带入,不是0就是1,bps目标波特率,2^8这里的8来自定时器的工作方式,因为我们使用的是8位自动重装方式,所以是8。模式一:sm1为1,sm0为0,波特率可调,为2的(PCON寄存器第7位的值-5)次方×定时器1的溢出率。模式三:sm1为1,sm0为1,波特率可调,为2的(PCON寄存器第7位的值-5)次方×定时器1的溢出率。通讯协议中信号线上的状态位高电平代表’1’,低电平代表’0’。

2024-04-21 14:23:11 375

原创 ARM汇编基础

比较函数cmp :将cmp后的两个值进行对比,并根据比较结果设置条件码寄存器,如cmp a,b 将a与b进行比较。ble---若最后一次对比的值为小于等于,则跳转到b后面接着的函数。bge---若最后一次对比的值为大于等于,则跳转到b后面接着的函数。以add为例:add r0,r1,#1 含义为将r1 的值加1后赋予r0;bl---保存数据到r14并跳转。引用函数b:---跳转到b后面接着的函数。用以上代码即可以实现循环以及选择语句。nop---空闲一个指令周期。eor---按位异或。

2024-04-17 23:31:26 124

原创 数据结构DAY5--二叉树相关流程

流程有:创建->遍历->得到信息->销毁。

2024-04-12 17:01:55 846

原创 数据结构DAY5--二叉树的概念

由n个节点组成的有限集,有一个根节点;其他节点只有一个前驱节点,但可以有多个后继节点。(一对多)叶子节点(终端结点):只有前驱结点没有后继结点非叶子节点(分支节点):既有一个前驱结点又有一个以上的后继结点。度:子节点的个数称之为度树的度:树中各节点度的最大值深度:从根节点到最底层节点的层数、所以除了叶子节点,其余结点度可以作为根节点。

2024-04-10 23:50:53 523 1

原创 数据结构DAY4--哈希表

用表结构体定义一个指针,设置一个循环次数为哈希表长度的循环,再嵌套一个循环,若角标为循环次数的哈希表不为空(循环条件),则使指针等于角标为循环次数的哈希表,并使该哈希表值为指针的后驱结点,最后释放指针即可。用表结构体定义一个大小为结构体大小的指针结点,使其数据域为输入的数据,后驱指针指向空,用建立的查找方法获得该结构体的角标,然后使后驱指针指向角标为获得的角标的哈希表,并使该表值为带新数据的表头。建立表结构体,包括储存数据的数据为和表结构体类型的指针(用于指向下一位)。

2024-04-09 22:03:36 685

原创 数据结构DAY3--栈与队列

首先建立结点,用结点结构体定义一个大小为结构体大小的指针,使其数据域为输入数据,结点的后驱指针指向空,然后将其返回,返回后,使结点的后驱等于栈链的栈顶,栈链的栈顶等于结点,栈个数加1,一个栈就建立好了。用结点结构体定义一个指针,其等于队列表头的头,队列表头的头等于指针的后驱结点,如果队列表头的头为空,则使其尾也为空,如果数据域不为空,则使传入的数据指针的值为数据域的值。用结点结构体定义一个指针 ,其值等于队列链表的前驱,只要该结点不为空,就打印其数据域的数据,并使该结点的值为该结点的后驱结点。

2024-04-07 22:31:15 695

原创 数据结构day2--双向链表

函数中,用结点结构体定义一个指针P,大小为表头结构体的大小,P的前驱与后继指针都指向空,数据为输入函数的参数。

2024-04-05 21:03:12 693

原创 使用framebuff技术绘制图片与汉字

2.从尾部开始读取(bmp的特性),从左到右,循环从指针中读取rgb值,一次读取3个8位二进制值作为b、g、r的值,读取后,对r值左移16位,g值左移8位,b值移动0位(RBG888),或对r值右移3位再左移11位,g值右移2位再左移5位,b值移动3位(RBG565),然后相或。4.打印时,需再加一个循环遍历字符块的行数像素点(0~8),并使像素点的代码与0x80相与,判断其为字符体还是字符背景。3.按照先高后宽的原则循环打印字符块(数组)中的代码串---两个循环,一个高,一个宽。

2024-03-29 09:51:39 249

原创 framebuffer技术

即帧缓存技术,就是将像素点显示在显示屏上。其需显卡的硬件支持,显卡将显存中的数据转化到显示屏上,而该技术就是将用户空间与显存空间进行内存映射,用户在用户空间写入数据(RGB颜色值),显存空间也会有该数据,从而可以通过此过程实现绘制图像。显示屏上的数据储存是从左到右再从上至下的,而用户空间与显存空间是一维空间,所以要绘制指定位置的图像,首先要将显示屏上的二维坐标转化为一维坐标,再找到坐标根据RGB码绘制即可。

2024-03-28 14:30:45 415

原创 数据结构学习DAY1

其原理相同,即为创建一个结点类型的指针,使其等于(指向)表头的head,然后通过不断的使其指向结点的pnext,直到指向null值为止,该过程即为遍历,而查找只需将停止条件的null改为乡查找的数据即可,在找到后,向结点的数据中输入新的数据,即为修改。用表头的pnode指向表结点,即为一个单向列表,若需增加表长度,只需要将表结点的pnext指向下一个结点,增加结束,需将最后一个表结点指向NULL。操作:创建--插入--删除--查找--修改--销毁--遍历。V:视图----数据的反应和人机交互。

2024-03-23 18:06:59 450

原创 C语言下使用SQL语言

例如:sqlite3_exec(ppdb,tmpbuf,NULL,NULL,&errmsg);例如:sqlite3_open("1.db",&ppdb);//ppdb为定义的sqlite3类型的空指针。errmsg:出错信息存放空间首地址(使用完毕后使用sqlite3_free释放空间)callback: 只有在select时才会使用,其余调用时传递NULL。ppDb:操作数据库指针存放空间的首地址。sql: 要执行的SQL语句字符串首地址。sqlite3*: 数据库句柄。成功返回SQLITE_OK。

2024-03-13 17:37:08 582

原创 Linux环境下的数据库SQL学习

1.在Ubuntu下安装sqlite3软件输入sqlite3启动,输入.quit退去2.SQL语言与命令:sqlite3+文件名----寻找文件地址.header on/off 打开/关闭 数据库中列的名称数据库程序:名字.sql.schema 表名称 查看表名称对应的表的格式(有那几列?每列类型).width 宽度 设置显示时的数据宽度。

2024-03-12 23:17:53 762

原创 网络学习DAY3--TCP并发

events:要监听的事件 POLLIN:是否可读 POLLOUT:是否可写。select监听文件描述符集合中是否有文件描述编程ready状态。成功返回文件描述符集合中的文件描述符个数。fds:监听文件描述符集合数组空间首地址。exceptfds:其余文件描述符集合。nfds:监听文件描述符集合元素个数。writefds:写文件描述符集合。判断文件描述符fd是否仍在集合中。readfds:读文件描述符集合。监听文件描述符集合是否有事件发生。将文件描述符fd从集合中清除。epfd:事件表的文件描述符。

2024-03-11 17:33:39 688

原创 网络协议学习DAY2--TCP通信

握手成功后,开始进行消息的收发,发送结束后,发端发送一个FIN,收端最后发送一条消息,然后发送ACK,停止结收数据,然后也发送FIN,发端收到FIN后,发送ACK,使收端关闭,则三次挥手结束。发端发送SYN信号,收端收到后回复SYN+ACK,发端收到回复后,发送ACK给收端,则三次握手成功。注意:TCP收端的sockfd为accept的返回值,而不是套接字的返回值。backlog:允许等待的尚未被处理的三次握手请求的最大个数。address:存放IP地址的空间首地址。addr:目的地址存放空间首地址。

2024-03-08 18:12:55 629

原创 网络协议学习DAY1

注意:最后一个参数是socklen_t 类型,因此与sendto不同,要设置一个socklen_t类型的值储存src_addr的长度。网络层 数据的路由(如何从一个局域网到达另一个局域网) IP地址。收端: socket -> bind -> recvfrom -> close。dest_addr:目的地址信息存放的空间首地址。子网掩码是1的部分表示IP地址的网络位。子网掩码是0的部分表示IP地址的主机位。addrlen:存放接收到IP地址大小空间的首地址。

2024-03-06 23:32:24 967

原创 嵌入式Linux学习DAY28

* semaphore operation */ 具体对信号量的操作(申请:-1 释放:+1)/* semaphore number */ 操作信号量的下标。步骤:建立key值->由key值创立信号量->销毁信号量。sops:信号量操作的数组首地址。semid:信号灯的ID号。有名信号量(信号灯)-----用以控制共享资源。函数内自带一个结构体strutc sembuf。初始化:--------该共用体需要自己定义。semnum:具体操作信号量的编号。参数:a:创建的信号量个数。

2024-03-06 09:26:02 439

原创 嵌入式Linux学习DAY27

不为NULL shmflg 设定为SHM_RND 选择离给定地址最近的能够映射的地址进行映射。创建共享内存 -> 映射到共享内存中 -> 共享内存操作 -> 解除映射 -> 删除共享内存。/* m储存的消息 */ipcrm -M/-Q/-S key---删除消息队列、内存共享、信号灯。ipcrm -q/-m/-s 消息队列ID/共享内存ID/信号灯ID。msgz:发送消息内容的大小(不包含发送消息类型)msgsz:最多接收消息的空间的大小。功能:获取以msqid为id的类型为msgflg的消息。

2024-03-05 09:22:09 1027

原创 C语言拾遗

整形数组的传递本质上是传递数组首地址的值,所以一般要传递长度,用以定义数组作用范围,若传递数组加1,其含义为传递第二个地址的值。函数体内想修改函数体外部指针的值的时候,使用指针指针(二级指针),用以传递指针的地址。传递a即可,且a可以作为返回值使用。函数体内部想要修改函数体外部变量值的时候,使用地址传递。字符型数组不需要传长度---自带结束标志‘\0’

2024-03-04 18:14:30 175

原创 嵌入式Linux学习DAY26

管道的作用:进程间的通信。

2024-02-28 20:43:43 434

原创 嵌入式Linux学习day24

编译文件时,可用gcc 文件名 -o 执行文件名 将a.out更改。

2024-02-27 17:32:37 746

原创 Linux下minishell项目的编写

将目标二中的数组与预设的命令符号通过strncmp对比,若符合,通过strtok函数对数组中的字符串按空格进行切割,在分别用指针保存切割后的指令,一般第一个指令为命令,后面的指令为输入参数。在主函数中设置一个数组,将其传输到目标二的函数中,用fgets函数将界面上输入的值写入数组中(用stdin),并在数组的最后一项补充‘\0’-----作用为:在目标三中使匹配能够完成。cp:将传入的文件用r打开并存到数组中,用w打开传入的目标文件,用fgetc得到数组中的内容,用fputc写入目标文件即可。

2024-02-25 19:57:09 658

原创 嵌入式Linux学习DAY23—进程process

程序:储存在外存中的一段数据组成的文件进程:使一个程序动态执行的过程,包括进程的创建、进程的调度、进程的消亡。

2024-02-24 23:29:39 993

原创 嵌入式Linux学习day22

0100--目录文件。0010--字符设备。0001--管道文件。1000--普通文件。通过文件名链接,所有能看到的链接文件均为软链接文件。pathname:链接文件的路径。bufsiz:最大存放数据字节数。成功返回包含组信息的结构体。buf:存放数据空间首地址。功能:返回1970-1-1到现在的秒数。前四位为文件的类型:1100--套接字。头文件:#include<pwd.h>头文件:#include<time>文件名->inode->数据块。返回值:成功返回包含用户信息的结构体。通过组ID获得组信息。

2024-02-20 20:42:19 324

原创 嵌入式Linux学习DAY21--目录io

对主函数传参:./a.out +参数1(指针数组),参数2.......在代码中,要写成 int main(参数数量,const char *指针数组)

2024-02-19 16:29:12 758 1

原创 嵌入式Linux学习DAY20

文件描述符总为尚未使用的最小非负整数----一般从3开始:012为stdin.stdout.stderr占 用。权限:rwxrwxrwx(rw-rw-r),有则为1,无为0,将其转化为10进制,替代c。功能:打开文件,获得文件描述符(很小的非负正数),文件描述符可以代表文件,新生成的。功能:向文件描述符a对应的文件中写入b指向的文件中的c个字节的文件。功能:从文件描述符a对应的文件中读到b指向的地址,读c的大小。open(a,flags):对a进行只读只写等操作。

2024-02-18 17:33:59 365 1

原创 嵌入式Linux学习DAY19

函数接口fgetc(a):从流中读取一个字符----调用一次读取向后读取一次(因为被操作数为流)流被读完后会产生错误----用来作为读取结束的条件fgetc/fputc与getchar/putchar的区别-------没有区别fputs(a,b):将a打印到b内,若b为stdout,则打入终端使用示例:将1.txt内容写入2.txt中fputs(const *s,FILE *stream):fputs(a,b)将a中的值写入b中。

2024-02-06 22:17:17 545 1

原创 嵌入式Linux学习DAY18---IO编程

桥接模式:ubantu直接操作网卡。w 写 文件不存在则创建,文件存在将文件内容清空,只写打开。w+ 写读 文件不存在则创建,文件存在将文件内容清空,只写读打开。将虚拟机设置为NAT模式------NAT模式:通过操纵Windows上网使ubantu有网。a 追加只写 文件不存在创建,文件存在则追加只写打开。通配符:*:匹配任意长度任意字符的文件名 例如 txt.*---匹配以txt开头的文件。

2024-02-03 17:29:49 1624 1

原创 嵌入式Linux学习DAY17

define 宏名 宏值 表示定义了一个 宏,出现宏名的地方都会被宏值替换(打印的值和宏名相同时不会被替换) 宏名一般大写作用为:在代码中用到宏值的地方都可以用宏名替代预处理阶段:进行文本的原样替换结束宏定义:#undef 宏名宏的副作用:可能干扰计算顺序,如定义算式时,可能导致算式中的运算符号的优先级与预期的不同。

2024-02-02 21:37:47 849

原创 嵌入式Linux学习DAY16

结构体写法:2.struct stu.......3. struct //省略类型名--只用一次,可以这样写.......

2024-02-01 21:15:10 269 1

原创 嵌入式Linux学习DAY15

1.指向指针的指针 int* *a;2.包含指针的数组 int* a[10];3.指向数组的指针 int(*a)[10];4.指向函数的指针malloc()函数:在堆区开拓一块空间,malloc(开拓空间大小):使用方法:定义一个指针,用指针保存他:int *a=malloc(100);关于NULL:为零号空间,不能赋值赋予NULL后,更改赋予的值。

2024-01-31 20:23:27 806 1

原创 嵌入式Linux学习DAY14

strncpy(a,b,n):将b的前n项复制给a当n<strlen(b)时,只拷贝前n个字符,最终a中没有‘\0’当n==strlen(b)时,正常拷贝当n>strlen(b)时,拷贝完后再补零strncat(a,b,n):将b的前n项接到a的后面strncmp(a,b,n):将b的前n项与a的前n项对比。

2024-01-30 21:47:13 197 1

原创 嵌入式Linux学习DAY13

避免野指针----赋予NULL值。//a[0] ----->类型是char型。char *p=s;//s 数组名---代表数组首元素的地址。定义指针后不给值,则该指针成为野指针,野指针会被赋予随机值。const char *p的优点:可以用来保存字符的地址。step7:针对小的与大的部分,继续快速排序(递归)step6:此时将相遇的位置上的值与基准值交换。t+1的意义和*(a+1)一样。step2:从右边开始找,找比基准值小的值。step3:从左边开始找,找比基准值大的值。p=&a : p获得a的地址。

2024-01-29 22:37:57 238

原创 嵌入式Linux学习DAY12

静态变量:全局变量,在运行前同时存在不分先后,因此,在运行全局变量的时候,不能先 定义一个确切变量(int a=10),再将该变量赋予另一个变量(int b=a)。* -----表示此时定义的变量 是一个指针类型的变量,其为单目运算,运算数必须是指 针类型的值(地址)定义的标识符作用范围为上下两个花括号{}范围内,中间嵌套的花括号如果不另作定义,那么定义的值仍可以用。

2024-01-27 21:26:20 741

原创 嵌入式Linux学习DAY11

函数名(数组名,长度)作为函数形参,------传递两个东西一个是数组形式 a[ ],一个数组长度 l。数组与函数结合,作为函数实参,-----此时的函数的形参是一个与实参类型相同变量,直接用。-------字符数组不需写出数组长度,因为字符串自带结束标志。7.找出数组中的最大值。第n项 与 第n-1项之间的关系 ,并返回到函数本身。定义函数时是函数形参,使用函数时是函数实参。2.结束条件 ,如 if判断。今日知识点较少,更多的是实践。可通过编写 1.n的阶乘。1.递推关系 //重复的。

2024-01-27 00:00:27 205

原创 嵌入式Linux学习DAY10

1.不同函数储存在不同空间,程序执行时先查找main函数,先在保护现场(放入内存)保护主调函数的相关数据以及返回值地址据,然后跳到次级函数,执行完次级函数后,恢复现场。则是函数调用语句,成为语句的一部分(参数),声明时也加分号,函数一般放在主函数之前,放在后面则必须声明。main函数先存入栈底,然后次级再存入(栈的本质是块空间),用时先使用最后存的,后使main.递归循环:直接递归-----调用自己,陷入循环,直到栈区被压满。递归循环逻辑:如果结束,返回结束的值,如果没结束,返回函数。

2024-01-25 18:10:02 441

原创 嵌入式Linux学习DAY9

终端输入n, 将int a[9]={1,2,3,4,5,6,7,8,9}则打印出n=1 : 9 1 2 3 4 5 6 7 8思路:循环右移,step1:int t =a[8];step2: 从a[7]依次往后挪;昨日错误点:往左挪,会覆盖接下来的数。统计字符串长度-----strlen字符串拷贝-----------strcpy字符串拼接-----------strcat :将原字符串拼接到目标字符串,如:strcat(c1,c2)将c2拼接到c1后。

2024-01-24 17:38:14 350 1

原创 嵌入式Linux学习DAY7+DAY8

Linux代码对齐方式:单行对齐:命令模式下“==”自动对齐多行对齐:选中多行,按一下=全局对齐:gg=G按gg光标回起始行,按G到最后一行经验:一组数据比最大值最小值:用循环输入一次处理一次。

2024-01-22 21:46:44 678 1

空空如也

空空如也

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

TA关注的人

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