- 博客(16)
- 收藏
- 关注
原创 linux应用开发基础知识(八)——内存共享(mmap和system V)
内存映射,简而言之就是将用户空间的一段内存区域映射到内核空间,映射成功后,用户对这段内存区域的修改可以直接反映到内核空间,同样,内核空间对这段区域的修改也直接反映用户空间。那么对于内核空间<---->用户空间两者之间需要大量数据传输等操作的话效率是非常高的。
2024-07-03 21:30:42
723
1
原创 linux应用开发基础知识(七)——管道和消息队列进程通信
pfd[0]用于读管道,而pdf[1]用于写管道。注意:匿名管道只能用于亲缘关系的进程之间通信。管道通道是单向的,一边读,另一边写。管道可以用于大于两个进程共享。例如设计父进程读,两个子进程写的代码如下:有名管道有名管道也叫命名管道。1、管道文件仅仅是文件系统中的标示,并不在磁盘上占据空间。在使用时,在内存上开辟空间,作为两个进程数据交互的通道。也就是提供一个路径名与之关联,这样,即使与创建有名管道的进程不存在亲缘关系的进程,只要可以访问该路径,就能够通过这个有名管道进行相互通信。2、并且顾名思
2024-06-26 20:50:44
815
原创 linux应用开发基础知识(六)——互斥锁和条件变量
互斥量可以防止多个线程同时访问临界资源,而条件变量允许一个线程将某个临界资源的状态变化通知其他线程,在共享资源设定一个条件变量,如果共享资源条件不满足,则让线程到该条件变量下阻塞等待,当条件满足时,其他线程可以唤醒条件变量阻塞等待的线程。在线程之间有一种情况:线程A需要某个条件才能继续往下执行,如果该条件不成立,此时线程A进行阻塞等待,当线程B运行后使该条件成立后,则唤醒该线程A继续往下执行。在pthread库中,可以通过条件变量中,可以设定一个阻塞等待的条件,或者唤醒等待条件的线程。
2024-04-29 10:38:59
689
原创 linux应用开发基础知识(五)——线程
1、进程是资源分配最小单位,线程是程序执行的最小单位;2、线程间的切换效率相比进程间的切换要高3、进程有自己独立的地址空间,每启动一个进程,系统都会为其分配地址空间,建立数据表来维护代码段、堆栈段和数据段,线程没有独立的地址空间,它使用相同的地址空间共享数据;4、创建一个线程比进程开销小;5、线程占用的资源要⽐进程少很多。6、线程之间通信更方便,同一个进程下,线程共享全局变量,静态变量等数据,进程之间的通信需要以通信的方式(IPC)进行;(但多线程程序处理好同步与互斥是个难点)
2024-04-24 15:12:01
927
原创 linux应用开发基础知识(三)——标准IO和文件IO、进程
文件I/O:文件I/O称之为不带缓存的IO(unbuffered I/O)。不带缓存指的是每个read,write都调用内核中的一个系统调用。也就是一般所说的低级I/O——操作系统提供的基本IO服务,与os绑定,特定于linix或unix平台。标准I/O:标准I/O是ANSI C建立的一个标准I/O模型,是一个标准函数包和stdio.h头文件中的定义,具有一定的可移植性。标准I/O库处理很多细节。例如缓存分配,以优化长度执行I/O等。标准的I/O提供了三种类型的缓存。
2024-04-08 15:08:40
978
原创 STM32F407控制OLED 屏
1、阅读OLED的数据手册,了解它的通讯方式,以及使用方法。2、确定好单片机要使用的IO口,SPI等,并在CubeMx上进行完整的配置,并生成工程文件。3、在工程文件目录下inc中放置新添加的头文件,在src中放置新添加的.c文件。头文件一般放函数的声明、对一些复杂函数的重定义、以及包含的其他的头文件,c文件中一般进行函数的编写。4、在主函数中添加相应的头文件,调用相应的函数即可。
2024-04-03 10:50:44
919
原创 linux应用开发基础知识(二)
如果有3个头文件和8个c文件,则按照规则来写makefile,则如下图所示在这个 makefile 中,目标文件(target)包含:执行文件 edit 和中间目标文件(*.o ),依赖文件(prerequisites)就是冒号后面的那些 .c 文件和 .h 文件。每一个 .o 文件都有一组依赖文件,而这些 .o文件又是执行文件 edit 的依赖文件。依赖关系的实质就是说明了目标文件是由哪些文件生成的,换言之,目标文件是哪些文件更新的。
2024-04-03 10:47:36
582
原创 STM32F407 ADC——电压采集和温度测量
精度为±1.5℃左右。规则通道可以有16个这么多,可规则数据寄存器只有一个,如果使用多通道转换,那转换的数据就全部都挤在了DR里面,前一个时间点转换的通道数据,就会被下一个时间点的另外一个通道转换的数据覆盖掉,所以当通道转换完成后就应该把数据取走,或者开启DMA模式,把数据传输到内存里面,不然就会造成数据的覆盖。ADC转换可以由ADC控制寄存器2: ADC_CR2的ADON这个位来控制,写1的时候开始转换,写0的时候停止转换,这个是最简单也是最好理解的开启ADC转换的控制方式,理解起来没啥技术含量。
2024-01-25 11:27:50
3955
2
原创 STM32F407 定时器输入捕获
之前学串口部分的时候,偷懒没学用,今天要打印高电平持续时间的时候,直接重写了fputc函数。结果一直困在printf的死循环里出不来。找了半天发现居然是!!勾选完这个选项之后,我们发现串口可以用printf()语句顺利的输出啦。
2024-01-25 09:51:18
641
原创 STM32F407定时器中断
SMT32F1系列共有8个定时器:高级定时器(TIM1、TIM8);通用定时器(TIM2、TIM3、TIM4、TIM5);基本定时器(TIM6、TIM7)。SMT32F4系列共有15个定时器:高级定时器(TIM1、TIM8);通用定时器(TIM2、TIM3、TIM4、TIM5、TIM9~TIM14);基本定时器(TIM6、TIM7)。
2024-01-23 10:07:19
1901
原创 STM32F407 串口和看门狗
我们知道窗口看门狗必须在计数器的值在一个范围内才可以喂狗,其中下窗口的值是固定的0X40,上窗口的值可以改变,具体的由配置寄存器CFR的位6:0 W[6:0]设置。窗口看门狗的计数器是一个递减计数器,共有7位,其值存在控制寄存器CR的位6:0,即T[6:0],当7个位全部为1时是0X7F,这个是最大值,当递减到T6位变成0时,即从0X40变为0X3F时候,会产生看门狗复位。这个值0X40是看门狗能够递减到的最小值,所以计数器的值只能是:0X40~0X7F之间,实际上用来计数的是T[5:0]。
2024-01-22 18:47:56
850
1
原创 数学建模
文章目录数学建模笔记---图和网络(一)图的基本存储结构例题解析**1.求一个城市到其他地区的最短路径**合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入数学建模笔记—图和网络(一)图的基本存储结构图的一些概念无向图/有向图/;出度
2021-04-11 16:59:50
1628
原创 python基本数据类型计算
python基本数据类型计算1.值,类型,对象数据类型数据类型规定了这种类型的值的内容是什么、能进行什么样的操作(运算)、占用多大的内存空间,取值范围是多少。比如int类型的值可以是任意值任意大的整数。而None 表示一个没有值的对象。主要数据类型包括数值(number)、字符串(str)、列表(list)、元组(tuple)、集合(set)、字典(dict)。数值类型不是一个单独的类型,而可分为int(整型)、float(浮点型)、complex(复数类型)、bool(布尔类型)。bool型用
2020-10-03 20:25:16
695
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人