- 博客(44)
- 收藏
- 关注
原创 串口通信、IIC时序整理
并行通信是指多个比特同时通过并行线进行传输,这种方式的传输速率较高,但会占用大量的芯片资源;串行通信是指将数据拆分成一个个比特,按照先后次序在一根总线上进行发送,串行通信有着系统占用资源少,结构简单等优点,是主机间通信的常用方式。串口通信(Serial Port)是串行通信的一种,属于串行通信中的异步通信。串口通信是串行通信的一种具体实现,指的是使用串行通信接口(如RS-232、RS-485、USB串行接口等)进行的数据传输。
2024-07-03 20:09:39
562
原创 进程、线程
•资源和独立性:进程是资源分配的基本单位,拥有独立的内存空间和系统资源;线程共享所属进程的资源,轻量级。•并发与并行:线程提供了更细粒度的并行执行,使得程序能更高效利用多核CPU。•通信与同步:线程间通信更直接但需处理数据同步问题,进程间通信相对复杂。•创建与切换开销:线程创建、切换、销毁和上下文切换比进程快,更适合需要频繁切换的场景。2、多进程(Multi-Process)、多线程(Multi-Thread)的优缺点?多进程和多线程是用于实现并发的两种常见方式,它们各自有一些优点和缺点。
2024-05-23 15:43:38
622
原创 2024/5/23 学习杂记
2. 结构混乱:goto破坏了程序的结构化编程原则,如顺序、分支(if-else、switch)、循环(for、while、do-while)等,这些结构提供了清晰的逻辑控制流控制方式。此时y和z的二进制表示分别为100和010,因此y|z的结果为110。此时y和z 的值都不是0,因此y && z 的结果为1。此时y和z的值都不是0,因此y||z的结果为1。3. 维护困难:goto使得修改和维护代码变得复杂,因为修改一处可能需要考虑对跳跃目标的影响,这可能导致连锁反应式的修改,增加了出错风险。
2024-05-23 11:55:03
1076
原创 2024/5/22 学习杂记
(A) int i;什么是定义?所谓的定义就是(编译器)创建一个对象,为这个对象分配一块 内存并给它取上一个名字,这个名字就是我们经常所说的变扯名或对象名。什么是声明::告诉编译器,这个名字巳经匹配到一块内存上了。声明可以出现多次。告诉编译器,这个名字已被预定了,别的地方再也不能用它来 作为变量名或对象名。上述举例中:(A) 是定义;(B) 是声明定义和声明最重要的区别:定义创建了对象并为这个对象分配了内存,而声明没有分配内存。
2024-05-23 08:42:31
1089
原创 UDP实现聊天直播间 chatroom
1.memcmp() 函数memcmp() 函数用于比较两个内存区域前 n 个字节的内容。它接受三个参数:•const void *s1:指向第一个内存区域的指针。•const void *s2:指向第二个内存区域的指针。•size_t n:要比较的字节数。返回值: memcmp() 函数返回一个整数值,表示两个内存区域内容的比较结果:•如果 s1 和 s2 相同,返回0。•如果 s1 小于 s2(按字典序),返回一个小于0的值。•如果 s1 大于 s2(按字典序),返回一个大于0的值。
2024-04-02 10:24:29
1864
原创 网络、UDP编程
网络层 数据的路由(如何从一个局域网到达另一个局域网) IP地址。domain:使用的协议族 AF_INET (IPv4协议族)dest_addr:目的地址信息存放的空间首地址。子网掩码是1的部分表示IP地址的网络位。子网掩码是0的部分表示IP地址的主机位。表示层 发送的数据是否加密。addrlen:存放接收到IP地址大小空间的首地址。src_addr:存放IP地址信息的空间首地址。应用层 传输的数据。
2024-03-07 15:12:01
1042
原创 消息队列、共享内存、信号灯
常用的 IPC 对象包括管道(pipe)、消息队列(message queue)、信号量(semaphore)和共享内存(shared memory)等。
2024-03-05 22:38:52
689
原创 IO接口 2月5日学习笔记
从流中读取nmemb个对象,每个对象size个字节,存放到ptr指向的空间中。向流中写入nmemb个对象,每个对象size字节大小,在ptr指向的空间中。函数每次调用将会返回当前文件指针所指向的字符,并将文件指针指向下一个字符。fgets会保留从终端接收的\n字符,并在其末尾加入\0。fgets需要给定最多读取的字符个数,没有越界风险。2.gets会去掉从终端接收的\n字符,换成\0字符。1.gets没有给定最多读取字符的个数,有越界风险。1.puts会在字符串末尾多打印一个\n字符。
2024-03-04 22:44:15
720
原创 线程分离、线程互斥
线程分离属性是指线程执行完后会自动回收资源,无需其他线程等待或回收。线程分离属性的主要作用是告诉操作系统,在线程结束时自动释放相关资源,而不需要其他线程来等待其结束并回收资源。这样可以避免资源泄漏和提高系统的性能。通常情况下,线程默认是处于非分离状态的,需要显式地设置为分离属性。
2024-02-28 23:30:57
1042
原创 进程替换 ——exec族函数、线程
功能:使得进程能够在运行时动态地加载和执行不同的程序.l:参数以列表形式传递v:参数以指针数组形式传递e:更新环境变量p:在系统指定目录下查找文件getenv功能:获得环境变量名对应的值setenv功能:设置环境变量的值。
2024-02-27 00:01:12
620
原创 MiniShell 项目总结 2月21~22日总结
1.Terminal多窗口的使用可以更快捷方便的进行代码的调试以及vim 编辑器 的 vsp功能 分屏打开文件 利于 复制y 粘贴p2.之前所学IO的多有不熟悉 ,需要翻阅笔记才能对照着打出来。一是不熟练,其次就是理解也不够深刻3.对 man手册的使用更为熟练了 ,主要是对各个函数的参数进一步了解4.对char *tmpbuf 与 char tmpbuf[4096] ={0};以及加强char **p 和 char *p[]的理解。
2024-02-22 20:14:52
992
原创 目录IO 2月19日学习笔记
功能:重新设定文件描述符的偏移量参数:fd:文件描述符offset:偏移量whence:SEEK_SET 文件开头SEEK_CUR 文件当前位置SEEK_END 文件末尾返回值:成功返回当前偏移量失败返回-1。
2024-02-19 20:42:39
1852
原创 文件 IO 2月18日学习笔记
1.标准IO是库函数,是对系统调用的封装2.文件IO是系统调用,是Linux内核中的函数接口3.标准IO是有缓存的4.文件IO是没有缓存的文件IO:1.操作步骤:2.打开文件:open 接口有两种形式功能:打开文件并且获得文件描述符参数:pathname:要打开的文件名flags:标志位O_RDONLY 只读O_WRONLY 只写O_RDWR 读写O_APPEND 追加。
2024-02-19 11:02:13
743
原创 标准IO 2月4日学习笔记
w 只写 文件不存在创建,文件存在将文件内容清空,只写打开。w+ 写读 文件不存在创建,文件存在将文件内容清空,写读打开。a 追加只写 文件不存在创建,文件存在追加只写打开。a+ 追加写读 文件不存在创建,文件存在追加写读打开。putchar、printf、puts通过stdout来向终端输出数据。getchar、scanf、gets 通过stdin来读取终端数据。按字符扫描设备信息的文件。
2024-02-18 20:12:08
639
原创 shell——2月3日总结
head命令用于查看文件开头的内容,tail命令则用于查看文件末尾的内容。它分配和调度处理器时间,确保每个进程都能得到执行,并控制进程之间的通信和同步,以保证系统的稳定和安全。文件管理:操作系统管理计算机上的文件和目录,包括创建、删除、复制、移动、打开文件等操作。总的来说,操作系统起着承上启下的作用,它使计算机硬件能够运行起来并提供给用户一个友好的界面,使用户能够方便地使用计算机资源和运行应用程序。操作系统是计算机系统中的核心软件,负责管理和协调计算机的硬件和软件资源,提供用户界面,并执行用户程序。
2024-02-05 08:58:30
1057
原创 malloc()函数、结构体、共用体、枚举 2月1日学习笔记
/通常在函数外部声明结构类型,这样就可以被多个函数所使用了结构体类型可以定义在函数内部,但这样结构体的作用域就只有这个函数内部了。
2024-02-01 19:50:01
1018
原创 指针2 1月31日学习笔记
strncpy函数用于将一个字符串的一部分拷贝到另一个字符串中。正常拷贝多了 一个n只拷贝前n个字符,最终dest中不会有'\0'正常拷贝if (n) 拷贝够了次数剩余拷贝 统统补0思路:// 结束条件 *src == '\0'// n次 拷贝完成没有strncmp函数用于比较两个字符串的前n个字符。函数用于将一个字符串的一部分追加到另一个字符串的末尾。
2024-02-01 16:28:39
1166
原创 指针1月29~1月30日学习笔记(最有含金量的一集!)
是一个变量,其值为另一个变量的地址,即,内存位置的直接地址。不同语境下的指针:1.定义一个指针,是指定义一个变量,数据类型是指针类型,这个变量里面存放地址,也就是内存单元的编号。2.打印某个变量的指针,此时指针指的是地址变量的指针就是变量的存储地址,指针变量就是存储指针的变量。基类型 --- 数据类型//基本数据类型//数组类型//基类型 表示 指针变量 指向的目标的 数据类型。
2024-01-30 21:56:25
471
1
原创 打印日历1月26日总结
要求是输入年份和月份,把那个月的日期按照 cal 年份 那种格式打印出来。但目前来看这是个死胡同!明天再看看按天数是怎么推的吧。让完成一个日历的打印。
2024-01-26 22:01:15
750
1
原创 函数在内存中是以何种形式存在的? 1月25日学习心得
一、函数补充一、函数补充。main 函数是主函数,它可以调用其它函数,而不允许被其它函数调用。C程序的执行总是从 main 函数开始,完成对其它函数的调用后再返回到 main 函数,最后由 main 函数结束整个程序。一个C源程序必须有,也只能有一个主函数 main。当程序调用函数时,程序控制权会转移给被调用的函数。被调用的函数执行已定义的任务,当函数的返回语句被执行时,或到达函数的结束括号时,会把程序控制权交还给主程序。return 返回值类型返回值 如果没有,返回值类型 一般写成void。
2024-01-25 20:58:29
619
1
原创 字符串函数、二维数组、1~n²数独
是C语言中的一种无符号整数类型. size_t 类型表示C中任何对象所能达到的最大长度计算字符串的长度,直到空结束字符,但不包括空结束字符输出结果为11。
2024-01-24 20:08:43
322
1
原创 一维数组、逆序、选择排序、冒泡排序1月22日笔记
数组是一种用于存储相同类型数据的集合可以存储一个固定大小的相同类型元素的顺序集合。数组进行初始化:例如注意!!!int a[10];以及a= {1,2,3,4,5,6,7,8,9,10};这样会报sss.c:12:13: error: expected expression before ‘{’ token这样的error , 因为数组不能整体赋值。对一个已经声明的数组进行初始化时,不能再使用数组索引。
2024-01-22 21:01:33
366
原创 c语言while 、do while、for循环以及continue和break学习笔记1月21日
学习是给自己学呢,不是学给别人看的,学了多少只有自己知道。之前已经把几个循环的语法学的差不多了,现在主要是对这些循环的流程图,还有跳出循环的细节做一些补充。
2024-01-21 14:13:49
525
原创 顺序、分支1月19日学习笔记
关系运算符:>=<===!关系运算的结果有两种: 真(非0) 和 假 (0);c语言中不存在布尔类型。关系运算符的结果可以赋值给一个整型变量 ,值为0或者1运算符优先级算术>关系运算>逻辑运算> 赋值>逗号。
2024-01-19 19:37:23
330
1
原创 隐式类型转换,%取余运算符等1月17日心得体会
lvalue(左值):lvalue 是指在赋值操作中出现在等号左侧的表达式,它通常代表一个可被赋值的内存位置。换句话说,lvalue 是一个可以出现在赋值号的左边的表达式,它通常具有持久性,可以被取地址。rvalue(右值):rvalue 是指在赋值操作中出现在等号右侧的表达式,它通常代表一个临时的计算结果或者一个常量。rvalue 表示一个临时的值,而不是一个可修改的内存位置。这种未定义的行为会导致程序的行为不确定,可能会产生错误的结果。格式指示符对应的参数依赖于它们在参数列表中的位置。
2024-01-17 19:13:30
2386
原创 大小端存储、浮点数的存储、浮点数的大小比较,1月16日学习心得
大端存储(Big-Endian):最高有效字节(Most Significant Byte,MSB)被存储在最低的内存地址中,而最低有效字节(Least Significant Byte,LSB)被存储在最高的内存地址中。小端存储(Little-Endian):最低有效字节(LSB)被存储在最低的内存地址中,而最高有效字节(MSB)被存储在最高的内存地址中。对于double型,它由32位二进制数表示,分为三个部分:符号位、指数位和尾数位。符号位(1位):用来表示数的正负,0表示正数,1表示负数。
2024-01-16 19:41:17
1046
1
原创 嵌入式学习心得体会 1月15日
而文本txt.txt相对于,假设当前工作目录是/home/john,在这个工作目录下,456/txt.txt和test/456/txt.txt都是相对路径。举个例子:在西安市内打车,你直接给出租车司机说去莲湖公园,他肯定直接把你载到西安市的莲湖公园,而不会把你拉到商洛市的莲湖公园。今天在普特上第一次上线下课,令我印象最深刻的是曹老师讲的一句话:“人的改变是非常不容易的,想要改变学习状态,需要付出巨大的努力。而在网购填写地址时,就要非常详细的填写地址,如:陕西省西安市莲湖区莲湖公园,此时就用到了绝对路径。
2024-01-15 20:15:36
379
1
原创 嵌入式驱动开发学习之路 Day6 语句与表达式 2023/10/30
变量: 有空间 有值 有类型。关于a++和++a。a++,在运算时,先用a的值代进表达式运算,再进行 +1 操作。如果两个操作数中有任意一个非零,则条件为真。常量: 有空间(不能访问) 有值 有类型。++a在运算时,先进行 +1 操作,再对变量取值。表达式: 有空间(临时性空间)有值 有类型。既要.....也要......是.......或者.....算术运算符,假设变量。三目运算符的嵌套: (一些比较特殊的运算符。
2023-10-31 10:41:46
42
1
原创 嵌入式驱动开发学习之路 Day5 c语言显式转换与隐式转换 2023/10/29
进行类型转换的目的主要有以下几个原因:数据类型不匹配:当表达式中的操作数具有不同的数据类型时,需要进行类型转换以使它们的类型匹配。例如,将一个整数和一个浮点数相加,由于它们的数据类型不同,需要先将其中一个数转换为与另一个数相同的类型,以便进行相加运算。提升表达式精度:有时候,使用较低精度的数据类型可能无法满足特定计算的要求。在这种情况下,可以将数据类型转换为具有更高精度的类型,以提高计算的准确性和精度。数据的表示范围:不同的数据类型具有不同的表示范围。
2023-10-30 16:18:16
33
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人