自定义博客皮肤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)
  • 收藏
  • 关注

原创 Git & Github Guide

git config --global user.name '<name>'git config --global user.email '<email>'//step1. 在工作目录work directory中插入文件touch <file name>//查看状态 [-s] shortgit status -s //step2. 将...

2019-07-11 12:23:58 1044 1

原创 Homebrew常用的命令 | retree 完美删除软件及其所有依赖

Homebrew常用的命令安装:brew install mysql卸载:brew uninstall mysql已安装软件列表: brew list搜索:brew search mysql查询:brew info mysql主要看具体的信息,比如目前的版本,依赖,安装后注意事项等更新:brew update 这会更新 Homebrew 自己,并且使得接下来的下载,安装有意义...

2019-06-23 17:52:11 15714

原创 Homebrew更换清华源或中科大源及重置默认源 & pip 换源

Homebrew作为MacOS系统的管理器方便了软件安装及更新,但是使用过程中会遇到下载特别慢,brew update无反应等问题,这是因为资源在外网上,需通过更改源来改为国内的镜像地址,提高下载速度。目前国内流行的镜像源有两个:清华源 和 中科大源,更改的方法是相同的,以下为详细步骤: 更换源需重置三个地方:brew.githomebrew-core.githomebrew-bo...

2019-06-23 17:20:31 4120

原创 VirtualBox 中 Ubuntu 无法打开terminal

【代码】VirtualBox 中 Ubuntu 无法打开terminal。

2023-09-12 12:52:27 2619

原创 C 封装与抽象 面向对象编程

封装与抽象封装性是面向对象编程的三大特性(封装性、继承性、多态性)之一,但也是最重要的特性。封装+抽象相结合就可以对外提供一个低耦合的模块。数据封装是一种把数据和操作数据的函数捆绑在一起的机制,数据抽象是一种仅向用户暴露接口而把具体的实现细节隐藏起来的机制。在C语言中,数据封装可以从结构体入手,结构体里可以放数据成员和操作数据的函数指针成员。当然,结构体里也可以只包含着要操作的数据。下面以一个简单的实例作为演示。设计一个软件模块,模块中要操作的对象是长方形,需要对外提供的接口有:1、创建长方形

2022-01-07 22:49:17 673

原创 android代码控制安装apk

android代码控制安装apk平时我们在使用商城的时候,下载完apk就可以自动的弹出安装的画面并且有的手机还会帮你检测apk的来源是否安全。由于项目上有个需求是远程升级apk,所以需要在自己做的程序中代码控制安装apk。网上查询了一番后有人给出了下述方法,用PackageInstaller帮助安装apk,这个其实是一个系统预安装的apk,就是我们平时用商城安装程序吊起的界面。一番查询后网上给出了如下的解决方案: File apk = new File(path);

2020-08-17 11:05:19 994

原创 函数调用过程(栈帧的创建和销毁)

函数的调用过程1. 调用 main() 函数:2. Add() 函数的调用在C语言中调用某一函数时,它会跳转过去执行这个函数直到执行完毕后接着执行下一条指令。在执行调用函数的过程中,通过形成一个栈帧来完成。栈帧是编译器用来实现函数调用过程的一种数据结构。以Add() 函数为例来分析调用过程:#include<stdio.h>#include<stdlib.h>...

2020-04-12 15:12:05 472

原创 通俗易懂的CRC校验

1. CRC校验原理 CRC校验原理看起来比较复杂,好难懂,因为大多数书上基本上是以二进制的多项式形式来说明的。其实很简单的问题,其根本思想就是先在要发送的帧后面附加一个数(这个就是用来校验的校验码,但要注意,这里的数也是二进制序列的,下同),生成一个新帧发送给接收端。当然,这个附加的数不是随意的,它要使所生成的新帧能与发送端和接收端共同选定的某个特定数整除(注意,这里不是直接采用二进制除法,...

2020-02-22 15:13:27 347

原创 pushd、popd和dirs

文章目录dirspushdpushd 目录pushd 不带任何参数pushd +npopdpopd 不带任何参数popd +npushd和popd是对一个目录栈进行操作,而dirs是显示目录栈的内容。而目录栈就是一个保存目录的栈结构,该栈结构的顶端永远都存放着当前目录dirs显示地对目录栈dirs常用的有两个参数:-p 每行显示一条记录-v 每行显示一条记录,同时展示该记录在栈...

2020-01-10 14:49:33 479

原创 ROM 、RAM和FLASH 的区别

文章目录RAM 和 FLASH 区别RAM 和 ROMFLASH区别RAM 和 FLASH 区别都是随机存储器,断电数据消失,但Flash有点不一样,它在消失数据之前,添加了一个“”性质“,这个性质能上电后再识别,且把这个信号返回到ram中,这样近似的把flash当成了eeprom来使用,就是这样,RAM芯片断电后数据会丢失,Flash芯片断电后数据不会丢失,但是RAM的读取数据速度远远快于F...

2020-01-09 16:11:01 1214

原创 lseek() 函数

每一个已打开的文件都有一个读写位置, 当打开文件时通常其读写位置是指向文件开头, 若是以附加的方式打开文件(如O_APPEND), 则读写位置会指向文件尾.当read()或write()时, 读写位置会随之增加,lseek()便是用来控制该文件的读写位置.头文件#include <sys/types.h> #include <unistd.h>函数原型...

2020-01-08 15:40:48 280

原创 内存管理系统 Memory Management System

文章目录key words:分段机制分页机制启用分页机制实现线性地址到物理地址转换的过程key words:分段机制分页机制用户空间内核空间逻辑地址线性地址物理地址虚拟地址分段机制把逻辑地址转换为线性地址分页机制把线性地址转换为逻辑地址, 处理器分页机制会把线性地址空间划分成页面,然后这些线性地址空间页面被映射到物理地址空间的页面上启用通过设置控制寄存器 CR0 的 ...

2020-01-02 01:06:29 1445 1

原创 Dbus

文章目录DBus三层架构:底层接口层总线层应用封装层DBus (Desktop Bus) 是一种 IPC 机制, 由 freedesktop.org 项目提供, 用于进程间通信或进程与内核的通信tips: IPC机制还有 fifo管道, share memory, semaphore, message queue, socket …DBus三层架构:底层接口层 主要通过 libdbus...

2019-12-26 14:09:03 1470 1

原创 sema shm常用函数

int sem_init(sem_t *sem, int pshared, unsigned int value);sem :指向信号量对象pshared : 指明信号量的类型。不为0时此信号量在进程间共享,否则只能为当前进程的所有线程共享。value : 指定信号量值的大小sem_init() 成功时返回 0;错误时,返回 -1,并把 errno 设置为合适的值...

2019-12-05 16:11:10 436

原创 GPIO, IIC, SPI, URAT

目录1. GPIO - General-purpose input/output操作2. IIC - Inter-Integrated Circuit数据传输1. 数据帧格式2. 应答响应3. I2C发送与接收数据时序图3. SPI - Serial Peripheral Interface起始-停止信号数据有效性CPOL CPHA4. URAT - Universal Asynch...

2019-12-04 14:52:13 1403

原创 IPC的七种方式

文章目录pipeFIFOmessage queuesemaphoreshared memeory共享内存+信号量+消息队列 例子signalsocket实例概念:同步: 一个进程将数据写入, 然后就去睡眠等待, 直到读取进程将数据取走, 在去唤醒; 读进程与之类似互斥: 一个进程对pipe进行I/O操作时,其他进程必须等待pipefeature: 容量有限,只用于父子进程通信...

2019-11-29 11:33:19 1289

原创 QNX 基础认知

文章目录QNX微内核介绍Threads run code, Processes own resources1. 进程PID进程API2. 线程TID线程API3. SynchronizationKernelKernel 提供的进程间的通信方式Process ManagerScheduling 调度Resoure ManagerIPC 进程间通信QNX微内核介绍QNX采用微内核结构,也就是说,内...

2019-11-25 15:54:45 1521

原创 QNX IPC机制

文章目录QNX微内核介绍Synchronous message passingMessage copyingChannels and connectionsPulses优先级继承与消息Message-passing APIRobust implementations with Send/Receive/ReplyEventsSignalsPOSIX message queuesShared Mem...

2019-11-25 14:04:14 3481 1

原创 C/C++中 getopt() 函数

getopt()用来分析命令行参数。参数argc和argv分别代表参数个数和内容,跟main()函数的命令行参数是一样的argc: argument countargv: argument vector//头文件#include <unistd.h>extern char *optarg; //选项的参数指针extern int optind, //再调用get...

2019-11-19 16:53:08 329

原创 OSAL中task,event,message区别

OSAL(Operating System Abstraction Layer 操作系统抽象层)(以上为个人见解)在OSAL中,提出了任务,事件,消息三个概念。它们之间的关系如下:event: 事件是当前系统中被触发的动作,例如有按键按下,接收到其他节点发送过来的消息等等。message: 消息是收到的事件和事件内容的一个封装,比如发生了一个事件(收到别的节点发的消息),这时就会把这个事件所...

2019-11-19 15:51:19 1488

原创 C++类与对象

概念描述类成员函数类的成员函数是指那些把定义和原型写在类定义内部的函数,就像类定义中的其他变量一样类访问修饰符类成员可以被定义为 public、private 或 protected。默认情况下是定义为 private构造函数类的构造函数是类的一种特殊的成员函数,它会在每次创建类的新对象时执行, 构造函数的名称与类的名称是完全相同,并且不会返回任何类型, ...

2019-11-17 12:23:02 188

原创 C/C++宏定义

# - 编译预处理#ifdef ... #endif#define MAX 3#define FUNCTION(X,Y) (X)*(Y)## - 标识符//##在宏定义中将两个字符连接起来,构成一个新的标识符#define SETTEST(N) test_ ## Nint SETTEST(1) = 2;//即用SETTEST(1)代替test_1, 相当于int ...

2019-11-17 01:13:23 188

原创 Linux的shm共享内存

实现进程间通信最简单也是最直接的方法就是共享内存——为参与通信的多个进程在内存中开辟一个共享区。由于进程可以直接对共享内存进行读写操作,因此这种通信方式效率特别高,但弱点是没有互斥机制,需要信号量之类的手段来配合Linux的共享内存共享内存原理Linux共享内存结构共享内存的使用共享内存原理共享内存,顾名思义,就是两个或多个进程都可以访问的同一块内存空间,一个进程对这块空间内容...

2019-11-16 15:13:09 1087

原创 Linux中压缩和解压

tar.gztar.gz这种格式是Linux下使用得最多的压缩格式。它在压缩时不会占用太多CPU的,而且可以得到一个非常理想的压缩率。tar -zcvf archive_name.tar.gz directory_to_compress -->压缩一个目录tar -zxvf archive_name.tar.gz -->解压缩到当前目录下tar -zxvf archive_n...

2019-11-12 22:02:40 162

原创 ssh, ssh-keygen, ssh-copy-id

ssh user@ip 远程登陆ssh-keygen 生成公钥与私钥对ssh-keygen -t [rsa|dsa] -C “any comment can be here”-t = The type of the key to generate 密钥的类型-C = comment to identify the key 用于识别这个密钥的注释ssh-copy-idssh-co...

2019-11-08 22:22:00 177

原创 Linux下静态库_库的基本概念

库windows平台和linux平台下都存在着大量的库本质上说库是一种可执行的二进制代码(但不可以独立执行),可以呗操作系统载入内存执行但是由于windows和linux的平台不同(编译器,汇编器,链接器不同),所以两者库的二进制是不同的linuxlinux下库有两种:静态库和共享库(动态库) 区别: 静态库:的代码在编译过程中已经被载入可执行程序,因此生成的可执行程序体积较大。...

2019-11-05 21:43:18 738

原创 Linux 命令英文全称

su:Swith user 切换用户,切换到root用户cat: Concatenate 串联uname: Unix name 系统名称df: Disk free 空余硬盘du: Disk usage 硬盘使用率chown: Change owner 改变所有者chgrp: Change group 改变用户组ps:Process Status 进程状态tar:Tape ...

2019-11-05 11:26:50 354

原创 gcov测试代码覆盖率

gcov:GCC Coverage,是一个测试代码覆盖率工具,是命令行方式,伴随GCC发布,配合GCC共同实现对C/C++文件的语句覆盖和分支覆盖测试与程序概要分析工具(profiling tool,例如gprof)一起工作,可以估计程序中哪一段代码最耗时gcov可以统计每一行代码的执行频率,实际上哪些代码确实被执行了,每一段代码(section code)的耗时(执行时间),因此,gco...

2019-11-03 12:38:45 1306

原创 C/C++程序存储区

C/C++编译的程序占用的内存分为以下几个部分:.stack .heap .data. .bss .text栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵。全局区(...

2019-10-26 18:37:58 1739

原创 Makefile

makefile提供了系统默认的自动化变量$^:代表所有依赖文件$@:代表目标$<:代表第一个依赖文件所以我们可以用gcc $^ -o $@代替刚刚makefile中的gcc a.o b.o main.o -o mainmain : a.o b.o main.o gcc a.o b.o main.o -o main main.o : main.c gcc -c ma...

2019-10-26 18:05:20 518

原创 互斥锁

1、互斥锁基本原理:互斥锁是一个二元变量,其状态为开锁(允许0)和上锁(禁止1),将某个共享资源与某个特定互斥锁在逻辑上绑定(要申请该资源必须先获取锁)。(1)访问公共资源前,必须申请该互斥锁,若处于开锁状态,则申请到锁对象,并立即占有该锁,以防止其他线程访问该资源;如果该互斥锁处于锁定状态,则阻塞当前线程。(2)只有锁定该互斥锁的进程才能释放该互斥锁,其他线程试图释放无效。2、初始化互斥...

2019-10-23 20:11:41 1595

原创 C语言编译过程 || 4 stages of compiling a C program

C语言作为编译语言,用来向计算机发出指令,代码会经过4个环节,形成最终的文件预处理编译汇编链接file.cfile.ifile.sfile.oa.out预处理展开头文件/宏替换/去掉注释/条件编译 >> test.i main.i编译检查语法,生成汇编 >> test.s main.s汇编汇编代码转换成机器码 &......

2019-10-18 23:35:57 237

原创 ML 入门:归一化、标准化和正则化

ML 入门:归一化、标准化和正则化

2019-09-26 10:05:15 204

原创 Python 多线程multiprocess 与多进程threading

一、Process参数介绍:1 group参数未使用,值始终为None2 target表示调用对象,即子进程要执行的任务3 args表示调用对象的位置参数元组,args=(1,2,‘a’,)4 kwargs表示调用对象的字典,kwargs={‘name’:‘a’,‘age’:18}5 name为子进程的名称方法介绍:1 p.start():启动进程,并调用该子进程中的p.run()...

2019-09-23 18:40:34 610

原创 python多线程中线程阻塞.join() 与线程守护.setDeamon(True)

join() 阻塞线程mainThread A 中创建了subThread B, 并在A中调用了B.join(),那么主线程会在调用B的地方等待线程B完成操作之后(阻塞状态),才能继续往下执行join([timeout]), 等待至线程中止。这阻塞调用线程直至线程的join() 方法被调用中止-正常退出或者抛出未处理的异常-或者是可选的超时发生参考1参考RUNOOB - Python3...

2019-09-23 01:56:00 472

原创 各个模块dumps和loads以及encode和decode的转换区别

json模块与pickle模块dumps和loads以及encode和decode的转换区别python中json文件处理涉及的四个函数json.dumps()和json.loads()、json.dump()和json.load()的区分

2019-09-07 02:31:54 286

原创 SSH 命令解释

名称ssh-keygen - 生成、管理和转换认证密钥语法ssh-keygen [-q] [-b bits] -t type [-N new_passphrase] [-C comment] [-f output_keyfile]ssh-keygen -p [-P old_passphrase] [-N new_passphrase] [-f keyfile]ssh-keygen -i...

2019-08-29 23:07:43 882

原创 Install opencv 4.1.1 on Raspberry pi3

在Python2上安装opencvsudo apt-get install libopencv-devsudo apt-get install python-opencv进入python,进行测试import cv2 在Python3上安装opencv目前没有pip3 install opencv-python 或者apt install opencv 这样直接简单的方法直接安装,...

2019-08-26 23:54:24 695 2

原创 virtualenv+virtualenvwrapper 与 anaconda 区别

https://www.cnblogs.com/pyyu/p/9015317.html

2019-08-26 00:26:51 659

原创 MySQL安装(WIN10)

下载并解压mysql-5.7.26-winx64到本地在解压的mysql-5.7.26-winx64目录下创建my.int 文件复制下列代码来配置默认设定(注意修改文件对应的路径)[mysql]# 设置mysql客户端默认字符集default-character-set=utf8[mysqld]#设置3306端口port = 3306# 设置mysql的安装目录basedir=...

2019-08-26 00:10:01 85

空空如也

空空如也

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

TA关注的人

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