- 博客(28)
- 资源 (1)
- 收藏
- 关注
原创 关于多线程与多进程的优劣
进程:一个正在执行的程序,它是资源分配的最小单位进程中的事情需要按照一定的顺序逐个进行,那么如何让一个进程中的一些事情同时执行资源分配 内存多少 CPU多少线程:有时又称轻量级进程,程序执行的最小单位,系统独立调度和分派CPU的基本单位,他是进程中的一个实体。一个进程中可以有多个线程,这些线程共享进程的所有资源,线程本身只包含一点必不可少的资源。CPU相当于转盘 分配给每个线程一定相同的时间 时间到了之后就会转到下个线程单线程:如果事件1 阻塞之后 CPU转一圈下来之后就会只执行事
2020-07-24 23:04:51 416
原创 关于线程的一些术语
并发:同一时刻只能有一条指令执行,但多个进程指令被快速轮换执行,使得在宏观上具有多个进程同时执行的效果。总结一句:看起来同时发生,单核假设CPU转一圈1ms 因为人的反应时间 看起来每个程序同时执行一样,实际的在1ms内每个应用程序只执行了0.2ms的时间。并行:同一时刻,有多条指令在多个处理器上同时执行。总结一句:真正的同时发生 多核同步:彼此有依赖关系的调用不应该“同时发生”,而同步就是要阻止那些“同时发生”的事情。总结一句:阻止事件同时发生,就是一种机制。Record记录变量的变化
2020-07-24 23:01:54 229
原创 数组指针与指针数组
数组指针(指向指针的数组) 又称行指针定义为 int (*p)[2] 从形式来看 是一个指针变量,指向包含了两个元素的数组,每次指针加一时,都要横跨整个步长。似乎数组指针是C语言里专门用来指向二维数组的,它占有内存中一个指针的存储空间。如要将二维数组赋给一指针,应这样赋值:int a[3][4];int (*p)[4]; //该语句是定义一个数组指针,指向包含4个元素的一维数组。p=a; //将该二维数组的首地址赋给p,也就是a[0]或&a[0][0]p++;
2020-07-24 22:55:57 137
原创 网络编程之TCP协议
应用层 会话层 表示层 由于更关注 通信细节,所以把这三层合并为一层客户端编写通信的框架服务器端编写通信的框架后续补充例程代码:
2020-07-24 22:50:27 104
原创 QT之Connect信号与槽的连接函数
一、不用写connect:Qt信号和槽函数的命名是有规则的,组成为on_对象名_信号,以按钮为例,如果对象名为pushButton,在你在写槽函数的时候按照这种规则,则在头文件中添加:private slots:void on_pushButton_clicked();在.cpp文件下面的构造函数中就不用写connect了,直接写槽函数的实现就能实现信号和槽的连接。二、自定义:以按钮为例,使用connect在头文件中添加:private slots:void on_button1_clic
2020-07-23 21:50:22 3399
原创 面向对象与面向过程区别与联系
面向过程:强调的是每一个功能的步骤 C语言面向对象:强调的是对象,然后由对象去调用功能 Java面向对象特征:封装、继承、多态。封装性封装性是面向对象思想的三大特征之一,封装就是隐藏实现细节,仅对外提供访问接口。实现细节部份包装、隐藏起来的方法。封装有属性的封装、方法的封装、类的封装、组件的封装、模块化封装、系统级封装…封装的好处:模块化、信息隐藏、代码重用、插件化易于调试、具有安全性封装的缺点:会影响执行效率封装之前:属性
2020-07-22 22:08:37 569
原创 静态全局变量、全局变量、普通局部变量、静态局部变量四者之间的区别
按存储区域分:全局变量、静态全局变量和静态局部变量都存放在内存的全局数据区,局部变量存放在内存的栈区按作用域分:1、全局变量在整个工程文件内都有效;2、静态全局变量只在定义它的文件内有效;3、静态局部变量只在定义它的函数内有效,且程序仅分配一次内存,函数返回后,该变量不会消失;局部变量在定义它的函数内有效,但是函数返回后失效。4、全局变量和静态变量如果没有手工初始化,则由编译器初始化为0。局部变量的值不可知。5、静态局部变量与全局变量共享全局数据区,但静态局部变量只在定义它的函数中可见。静态局部
2020-07-22 20:46:00 2526
原创 内存管理问题
一、程序运行需要内存所有的程序都是为了得到一定的结果而被运行的,计算机程序其实都是计算数据,所以数据是计算机程序的重要部分。程序为什么需要内存呢?内存是用来存储可变数据的,数据在程序中表现为全局变量,局部变量和常量(也存储在内存中)对我们写程序非常重要,也对程序运行跟是本质相关。所以内存对于写程序来说几乎是本质需求。越简单的程序需要越少的内存,而越庞大越复杂的程序需要更多的内存。内存管理是我们写程序时很重要的话题。我们以前学过的和了解过的很多变成的关键都是为了内存,譬如数据结构(数据结构是研究数据如
2020-07-21 22:38:32 275
原创 自动控制之PID原理
自动控制原理从控制的方式看,自动控制系统有闭环和开环两种。闭环控制:闭环控制也就是(负)反馈控制,原理与人和动物的目的性行为相似,系统组成包括传感器(相当于感官),控制装置(相当于脑和神经),执行机构(相当于手腿和肌肉)。传感器检测被控对象的状态信息(输出量),并将其转变成物理(电)信号传给控制装置。控制装置比较被控对象当前状态(输出量)对希望状态(给定量)的偏差,产生一个控制信号,通过执行机构驱动被控对象运动,使其运动状态接近希望状态。在实际中,闭环(反馈)控制的方法多种多样,应用于不同领域和各个方
2020-07-17 16:29:31 10934
原创 GPIO及寄存器释义
寄存器是具有记忆功能的物理器件,本质是有触发器组成,寄存器存储的位数也是由触发器决定,一个触发器存储一个Bit位模拟分析时钟上升沿经过,相应的寄存器就移一位,1011 最后如图灯亮状况。寄存器与内存相似之处,例如断电后寄存器与内存储存数据就都不存在了。宏观上CPU访问寄存器的速度比内存快,因为到内存读取数据要走很长的路(由MMU内存管理器通过内核指定的虚拟地址转换为物理地址访问到内存条,然后发送到缓存)...
2020-07-17 11:59:05 2160
原创 Linux常用命令之Sudo
我们都知道很多的文件都只有root有权限来修改,那么在我们平时的开发过程中都建议使用一般账号来登录进行开发sudo是linux下常用的允许普通用户使用超级用户权限的工具,允许系统管理员让普通用户执行一些或者全部的root命令。执行sudo su 命令切换到root权限(注意当执行sudo时,访问的是root权限下的路径,切记路径的添加)退出权限:执行命令 exit或ctrl+d...
2020-07-14 12:39:43 338
原创 开发板启动自动设置
关于开发板开机自动启动的设置问题常见的问题如: 每次重启后IP都变了,每次都要重新挂载NFS,手动启动Qt 桌面程序。我有个简单的方法,就是修改开发板的/etc/init.d/rcS这个启动文件。在开发板的终端中输入 : vi /etc/init.d/rcS例如添加命令如下:ifconfig eth0 10.254.1.108 netmask 255.255.255.0 up //设置ipmount -n -o nolock 10.254.1.104:/ho
2020-07-14 12:06:01 414
转载 带编码器的直流减速电机
首先,什么是编码器?编码器是将信号或数据进行编制、转换为可用以通讯、传输和存储的信号形式的设备。在这里,编码器就是能够将电机的转动信息(比如转速、转动角度等)转换为脉冲信号的设备。按照原理可分为(常见的)光电编码器(光学式)和霍尔编码器(磁式)。接着,编码器的作用以及为什么要用编码器?如上所述,编码器能够将电机的机械几何位移转化为脉冲信号或数字量。也就是说,有了编码器,我们通过检测编码器输出的脉冲信号,就能获取电机转动角度、转速等相关信息。这样我们不但能定性的控制电机的转向、转速,还能定量的测量。那
2020-07-14 11:13:32 22418 12
原创 嵌入式Linux烧写原理——MfgTool工具
MfgTool烧写的原理,MfgTool其实是先通过USB OTG先将uboot、kernel和.dtb(设备树)这是三个文件下载到开发板的DDR中,注意不需要下载rootfs。就相当于直接在开发板的DDR上启动Linux系统,等Linux系统启动以后再向EMMC中烧写完整的系统,包括uboot、linuxkernel、.dtb(设备树)和rootfs。因此MfgTool工作过程主要分两个阶段:①、将firmware目录中的uboot、linuxkernel和.dtb(设备树),然后通过USB OTG将
2020-07-13 20:52:32 958
原创 PWM 原理及应用
由定时器产生PWM波,定时器本质就是计数器(向上或向下计数)例如向上计数 从0开始到ARR-1 周而复始 ,又从0开始到ARR-1 并且ARR决定PWM波的周期。在计数过程中 计数值小于CCR(设定值可变)的是为低电平 大于CCR的为高电平 PWM波峰值由CCR决定。ARR 预分频数占空比:低电平或高电平占整个周期的比例...
2020-07-13 16:38:06 2959
原创 NFS(网络文件系统)的应用
nfs(Network File System)网络文件系统,通过 nfs 可以在计算机之间通过网络来分享资源,也就是网络调试,通过网络调试是 Linux 开发中最常用的调试方法。原因是嵌入式 linux开发不像单片机开发,可以直接通过 JLINK 或 STLink 等仿真器将代码直接烧写到单片机内部的 flash 中,嵌入式 Linux 通常是烧写到 EMMC、NAND Flash、SPI Flash 等外置 flash 中,但是嵌入式 Linux 开发也没有 MDK,IAR 这样的 IDE,更没有烧写算
2020-07-10 22:54:29 320
原创 定时器基本原理及在STM32CUBEMX中的应用
定时器原理:滴水满了之后溢出(古代计时)本质就是计数器确定了间隔时间、时钟频率就可根据定时器发生中断的计算方法计算出Prescaler:预分频数Counter Period:主计数器只要这两个比值满足公式就可以。当到达溢出时间就会触发中断NVIC图中红色圈内即是计算时钟频率...
2020-07-08 20:10:41 251
原创 直流电机工作原理释义
一般电机转速(几千到几万rmp)比较快,需要在电机后面引入减速器例如:电机输出10000r/min 但是我们需要500r/min的转速,那么就需要1:20传动比的减速器。减速器的作用(传动比)1.降低电机速度2.提高输出扭矩减速器的分类齿轮减速器:体积较小,传递扭矩大,但是有一定的回程间隙。蜗杆减速器:具有反向自锁功能,体积较大,传动效率不高,精度不高行星齿轮减速器(精密传动):结构比较紧凑,回程间隙小、精度较高,使用寿命很长,额定输出扭矩可以做的很大,但价格略贵。...
2020-07-08 14:04:10 485
原创 添加路径到PATH——在任意地方都可执行
在 Linux 下写完一个脚本,通常情况下我们需要到脚本所在的目录,才可以执行这个脚本。但是大家有没注意到,像 ls 、cd 、pwd 这样的命令,它们的程序是位于 /bin 目录下,但是我们却可以在系统的任意位置都可以执行这些程序。它们是怎么做到的?那是因为这些命令对应的程序所在路径被加到了 Path 环境变量里。所以我们如果把自己的脚本路径加到了这个变量里,我们也可以实现在任意地方执行自己脚本的效果。那么如何添加路径到PATH呢?普通模式:PATH 路径为/etc/profile
2020-07-06 16:15:34 1388
原创 头文件重复包含修改方法
方式一:在每个文件的头部定义:#pragmaonce(用于解释本文件中的内容只应用一次) 例: fiel1.h: #pragmaonce #include<stdio.h> #include<math.h> …… File2.h: #pragmaonce #include<stdio.h> #include<math.h> #include”file1.h” ……方式二:为了防止重复包含,头文件中都会有相
2020-07-06 15:14:39 279
原创 Windows格式文本转换成Linux格式
某些情况下,Windows系统下编写的代码文件传到Linux之后常会编译不通过,究其原因乃两操作系统默认的文件编码方式不用。用vim编辑器打开文件,用set:ff命令可查看当前fileformat,若是dos,则应改其为unix命令为:set ff=unix...
2020-07-06 12:34:15 1499
原创 字符设备驱动开发简要
Linux 驱动开发中我们需要按照其规定的框架来编写驱动,所以说学 Linux 驱动开发重点是学习其驱动框架。Linux 驱动有两种运行方式:第一种就是将驱动编译进 Linux 内核中,这样当 Linux 内核启 动的时候就会自动运行驱动程序。第二种就是将驱动编译成模块(Linux 下模块扩展名为.ko),在 Linux 内核启动以后使用“insmod”命令加载驱动模块。在调试驱动的时候一般都选择将其编译 为模块,这样我们修改驱动以后只需要编译一下驱动代码即可,不需要编译整个 Linux 代码。而且在
2020-07-06 12:24:42 139
原创 视频监控之V4L2(视频设备内核驱动)
V4L2是Video for linux2的简称,为linux中关于视频设备的内核驱动。在Linux中,视频设备是设备文件,可以像访问普通文件一样对其进行读写,摄像头在/dev/video0下。UVC,全称为:USB video class 或 USB video device class,是 Microsoft 与另外几家设备厂商联合推出的为 USB 视频捕获设备定义的协议标准。符合 UVC 规格的硬件设备在不需要安装任何的驱动程序下即可在主机中正常使用。在 Linux 中一切皆为文件,驱动加载成功以
2020-07-02 15:00:29 835
原创 视频监控之移植ffmpeg
有两种方法:下载源码,手工编译使用Buildroot,配置选择ffmpeg,直接编译生成映象文件我们使用Buildroot:设置交叉编译工具链在Buildroot根目录make menuconfig如图选择ffmpeg执行make这会在Buildroot的dl/ffmpeg目录下自动下载源码,并编译结果保存在output/images目录下,有rootfs根文件可以直接烧写到板能的EMMC或SD卡上。buildroot 还集成了各种常见的第三方库和软件,需要什么就选择什么,就跟我们去吃
2020-07-02 14:55:01 451
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人