- 博客(85)
- 资源 (1)
- 收藏
- 关注
原创 从星际穿越的观影谈未来的思考
一、智能机器人谈未来学一般都比较空洞,但是科技总是在不断进步,下面是在第四次工业革命大背景下,结合星际穿越的应用场景,这些看似遥不可及的技术,也算是实现了吧,至少在电影中。1.1影景分析影片中的Robot非常智能(姑且算一个聪明的人),控制着整个宇宙飞船,当然还是需要人为发出指令,人类还是拥有最高指挥权,相当于现在低智版的语音导航系统,小度小度。。。。。。。1.2技术背景整个系统可以...
2020-04-12 16:16:32 538
转载 gdb调试命令
总览本文为GDB调试指南,参考GDB调试手册,但加入了很多实例,目前已有的篇目:启动调试断点设置变量查看单步调试源码查看每个篇目都加入了示例,可操作性强。启动调试前言GDB(GNU Debugger)是UNIX及UNIX-like下的强大调试工具,可以调试ada, c, c++, asm, minimal, d, fortran, objective-c, go, java,pascal等语言。本文以C程序为例,介绍GDB启动调试的多种方式。哪类程序可被调试对于C程序来说,需要在编译
2021-05-20 13:59:22 1234
原创 关于c++ boost::bind的一些理解
1 介绍一般来说boost::bind有两种方式的调用,一种是对自由方法,也取非类方法, 一种是对类方法。方式一:直接boost::bind(函数名, 参数1,参数2,…)方式二:对类方法来说,直接boost::bind(&类名::方法名,类实例指针,参数1,参数2)而boost::function也是一种函数对象。需要注意的一点是,boost::bind里的参数个数一定要与被bind的函数相同。2 用法【bind】一般用法:bind用于一般普通函数( 以非类、结构的成员函数 )
2021-04-27 14:32:09 6188
原创 编码规范学习笔记(九)
1、 三思而后行(需求分析迭代、技术难点、编程语言选择、设计)2、 伪代码编程(注释规范)3、 防御性编程4、 变量定义初始化与命名
2021-04-08 17:58:14 152
原创 Uboot学习笔记(八)
Linux启动时进入倒计时 可以通过空格键 进入uboot 通过help、?查看哪些command通过 <?command>查看具体命令的详细解释在u-boot中从bootcmd中设置从flash读取内核的地址分区代码里规定好的,关键是起始地址,然后大小设置好这些参数之后,内核从地址0x3000d开始读取参数...
2021-04-08 17:55:09 119
原创 Linux驱动学习笔记(七)
驱动完成结构体注册,可以想象内核中是一个数组,存放设备号,驱动程序通过入口函数注册设备号并携带结构体与name驱动程序的三种方式:1、传统驱动模型2、总线设备驱动模型3、总线设备驱动+设备树模型内核运行时会去解析Dts设备树文件传统的驱动程序由于硬件的配置信息的改变,针对同一芯片或者不同芯片,会有大量基本重复的驱动程序(只是硬件配置信息不一样),为了避免内核的臃肿,采用了设备树模型设备树指定硬件资源 完全取决于写驱动程序的人设备树compatible为了找驱动程序,如果和驱动程序不一样.
2021-04-08 17:52:30 103
原创 Linux开机自启动脚本设置
方式一:此方法比较通用在/etc/init.d目录下找到rc.local文件,在此文件中添加开机要启动脚本的路径例如 设置PATH环境变量直接开机时就设定好了方式二:此方法可区分启动优先级在/etc/init.d目录下可以看到如下文件夹例如进入到rcS.d下可以看到很多脚本的软链接文件以及其特殊的前缀命名。关于优先级具体含义及设置请查看添加链接描述...
2021-04-08 17:41:54 678
原创 单片机学习笔记(六)
单片机内存资源比较小用途主要是一些专用的功能应用处理器在MCU的基础上,扩展了一些模块由于芯片内部ram flash比较小可外接DDR 和flash,芯片内部可扩展lcd GPU dsp等模块功能。可以装各种操作系统linux ios windows等,有了操作系统可以开发各种应用。发展路线:对于复杂的外设cpu内部有相应的控制器板子上电后,cpu会执行第一条指令,如果是sd卡启动,cpu是不能直接访问sd,需通过芯片内部的rom(only read),Pc主板不是so...
2021-03-03 11:35:29 232
原创 C语言时间超时设置
关于C语言超时时间的设置问题,废话不多说,直接上代码#include <stdio.h>#include <sys/time.h> void main(){ int time_use=0; struct timeval start; struct timeval end;//struct timezone tz; gettimeofday(&start,NULL); //gettimeofday(&start,&tz); wh
2021-01-28 10:54:15 4286
转载 C++ Template模板
https://wenku.baidu.com/view/c93d6551a55177232f60ddccda38376baf1fe01e.html
2020-12-24 20:24:13 238 1
转载 进制之间的转换
本文以二进制与十进制的互转为核心,八进制与二进制、十六进制与二进制的互转为基础,作为其他进制相互转换的桥梁,只要你会以上三种进制的互转,那么二、八、十、十六任意进制之间的互转都没问题。基本约定B(Binary)表示二进制,O(Octal)表示八进制,D(Decimal)或不加表示十进制,H(Hexadecimal)表示十六进制。例如:(1111)B = (17)O = 15 = (F)H二进制与十进制的相互转换( Binary <<==>> Decimal )**基础量表:*
2020-12-10 15:09:34 3304
原创 Linux解压tar、gz、zip、rar等文件
1、tar格式(tar是打包,不是压缩):【打包】:tar cvf 目录文件名.tar 目录文件名【解包】:tar xvf 目录文件名.tar2、tar.gz格式:【压缩】:tar -zcvf 目录文件名.tar.gz 目录文件名【解压】:tar -zxvf 目录文件名.tar.gz3、zip格式:【压缩】:zip -r 目录文件名.zip 目录文件名【解压】:unzip 目录文件名.zip4、rar格式:【压缩】:rar a 目录文件名.rar 目录文件名【解压】:unrar x 目
2020-12-02 16:05:42 204
转载 PCIe设备枚举
枚举是什么?枚举就是从设备读取一些信息,知道设备是什么样的设备,如何进行通信,这样主机就可以根据这些信息来加载合适的驱动程序。硬盘是大家都很熟悉的设备,一路走来,从HDD到SSD,从SATA到NVMe,作为NVMe SSD的前端接口,PCIe再次进入我们的视野。作为x86体系关键的一环,PCIe标准历经PCI,PCI-X和PCIe,走过近30年时光。其中Host发现与查找设备的方式却一脉沿袭,今天我们先来聊一聊PCIe设备在一个系统中是如何发现与访问的。首先我们来看一下在x86系统中,PCIe是什么样
2020-12-02 15:07:21 1484
原创 学习笔记(三)(c++)
程序运行之后才会有栈区、堆区。函数体内的变量都为局部变量,只要没写进函数体内的变量都为全局变量。常量除了const修饰,只要“”双引号都是字符串常量构造函数与析构函数(程序初始化和清理)...
2020-11-23 13:53:55 95
转载 王牌飞行员带你彻底搞懂C++的虚函数和纯虚函数
首先,我们要搞清楚女神的所作所为,即语法规范。然后再去探究她背后的逻辑道理。她的语法说来也不复杂,概括起来就这么几条:1.在类成员方法的声明(不是定义)语句前面加个单词:virtual,她就会摇身一变成为虚函数; 2.在虚函数的声明语句末尾中加个 =0 ,她就会摇身一变成为纯虚函数; 3.子类可以重新定义基类的虚函数,我们把这个行为称之为复写(override); 4.不管是虚函数还是纯虚函数,基类都可以为他们提供实现(implementation),如果有的话子类可以调用基类的这些实现;
2020-11-23 13:48:29 386
原创 编译指定库路径与程序运行指定库路径的异同
关于编译指定库路径与程序运行指定库路径很多初学者理解有误,现通过下面的例子来更直观的说明问题主程序#include <stdio.h>#include "add.h"int main(){ int a = 10; int b = 10; printf("%d\n",add(a,b));}libadd.so的内容#include "add.h"int add(int m,int n){ int s = m + n; return s;}
2020-11-13 17:19:17 550
原创 Linux下QT程序打包
一、准备两个脚本ldd.sh脚本#!/bin/bashLibDir=$PWD"/lib"Target=$1lib_array=($(ldd $Target | grep -o "/.*" | grep -o "/.*/[^[:space:]]*"))$(mkdir $LibDir)for Variable in ${lib_array[@]}do cp "$Variable" $LibDirdonexxxx.sh脚本注意该脚本的名称必须和程序名一致。#!/bin/sha
2020-11-13 15:25:23 2367
转载 Qt打开文件对话框同时选中多个文件或单个文件
打开多个文件QString strs;QStringList file_list, output_name;QStringList str_path_list = QFileDialog::getOpenFileNames(this, tr("选择转码文件"), tr("/home"), tr("视频文件(*.mp4 *.m3u8);;所有文件(*.*);;")); for (int i = 0; i < str_path_list.size(); i++){ QString str_pa
2020-11-13 15:03:14 1003
转载 linux connect 设置连接超时
原来我们实现connect()超时基本上都使用unix网络编程一书的非阻塞方式(connect_nonb),今天在网上看到一篇文章,觉得很有意思,转载如下:读Linux内核源码的时候偶然发现其connect的超时参数竟然和用SO_SNDTIMO操作的参数一致: timeo = sock_sndtimeo(sk, flags & O_NONBLOCK); if ((1 << sk->sk_state) & (TCPF_SYN_SENT | TCPF_SYN_R
2020-10-23 16:08:52 790
原创 什么是片上系统“SOC”?
一个能够实现一定功能的电路系统由多个模块构成, 如处理器、接口、存储器、模数转换器等等。 这些功能模块可以由分立的器件来实现,然后在印刷电路板(PCB)上组合起来, 最终形成板上系统(System-on-a-Board)。 板上系统的示意图如下所示:在上图所示的板上系统中, 绿色的矩形代表印刷电路板(PCB),上面各种颜色的小矩形代表了系统中各个功能模块, 如存储器等。 这些模块的功能都由一个个独立的硅芯片分别实现的,它们之间通过 PCB 上的金属走线连接, 最终构成一个完整的系统。而片上系统(Sys
2020-10-22 11:06:19 8546
原创 变长结构体之结构体指针申请内存
什么叫变长结构体?typedef struct { int a; char b[0];}Student;那结构体是怎么实现可变长的呢?如上所示,请注意看结构体中的最后一个元素,一个没有元素的数组。我们可以通过动态开辟一个比结构体大的空间,然后让buffer去指向那些额外的空间,这样就可以实现可变长的结构体了。下面我们来探讨动态开辟一个比结构体大的空间的问题,一般的实现思路都是开辟一个比结构体大的空间,如下:#include <stdio.h>#include
2020-10-20 10:41:27 633
原创 source与./执行脚本文件的区别
source命令用法: source FileName 作用:在当前bash环境下读取并执行FileName中的命令。该filename文件可以无"执行权限"注:该命令通常用命令“.”来替代。如:source .bash_profile. .bash_profile两者等效。source(或点)命令通常用于重新执行刚修改的初始化文档。source命令(从 C Shell 而来)是bash shell的内置命令。点命令,就是个点符号,(从Bourne Shell而来)。./的命令用法:
2020-10-19 15:26:31 1822
转载 C++中std是什么意思?(转)
std::是个名称空间标识符,C++标准库中的函数或者对象都是在命名空间std中定义的,所以我们要使用标准库中的函数或者对象都要用std来限定。至于为什么将cout放到名字空间std中,是因为象cout这样的对象在实际操作中或许会有好多个,比如说你自己也可能会不小心定义一个对象叫cout,那么这两个cout对象就会产生冲突。那么std都是在什么时候使用?一般来说,std都是要调用C++标准库时使用。比如:使用标准库文件iostream时,要写上std;使用非标准库文件iostream.h,不用写。如图
2020-10-19 09:58:06 10354
原创 一种特殊的指针
char *str = “hello C language”; str是个指针, 为什么后面是个字符串 不是字符串的地址呢?这一句话表示,定义了一直指针变量str,这个指针变量里面存放了字符串"hello C language"的首地址。所以等价于 char str[]=" hello C language "因为,在c语言里面,字符串的底层实现实际上是字符数组,也就是说字符串的等价定义形式是,char str[6]=" hello C language ";有一个字符\0,str代表的也是字符数组的
2020-10-12 09:30:07 163
原创 学习笔记(二)(gcc -i -l、环境变量、编码 字符集、linux文件属性、点阵显示)
GCC总体选项(Overall Option)(1)-c预处理、编译和汇编源文件,但是不作链接,编译器根据源文件生成OBJ文件。缺省情况下,GCC通过用.o'替换源文件名的后缀.c’,.i',.s’等,产生OBJ文件名。可以使用-o选项选择其他名字。GCC忽略-c选项后面任何无法识别的输入文件。(2)-S编译后即停止,不进行汇编。对于每个输入的非汇编语言文件,输出结果是汇编语言文件。缺省情况下,GCC通过用.s'替换源文件名后缀.c’,.i'等等,产生汇编文件名。可以使用-o选项选择其他名字。GCC
2020-10-12 09:26:00 387
原创 学习笔记(一)(编译原理、Makefile、网络编程、多线程)
$@目标文件 ; $<依赖文件数据传输三要素:源文件、目的、长度服务端与客户端是主从关系:一般主动的是客户端、被动的是服务器端。写网络小程序,没必要太关注网络7层协议之类的东西。服务端与客户端本质是一种应用程序,可以在同一电脑或者不同电脑运行。一般tcp传的比UDP要慢:UDP:像视频传送过程用udp不可靠连接,只管传送,中间有几帧视频传送失败,会花屏;Tcp:像一些文件传送,需要用到可靠连接,中间丢失文件会造成文件打不开;传送慢的原因是每次传送一次数据都会等...
2020-10-09 09:13:52 279
原创 GCC编译过程(预处理->编译->汇编->链接)
GCC编译过程(预处理->编译->汇编->链接)这里gcc编译器 是指在linux类操作系统下,windows编译器 MinGW(相当于windows版GCC)生成可执行程序过程为成四个步骤:1、 由.c文件到.i文件,这个过程叫预处理。以“#”号开头的预处理指令如包含#include,宏定义制定#define等。在源程序中这些指令都放在函数之外,而且一般放在源文件的前面。2、由.i文件到.s文件,这个过程叫编译。这里的编译不是指程序从源文件到二进制程序的全部过程,而是指将经过
2020-09-30 23:48:25 1284
原创 Goto语句的用法
goto语句也称为无条件转移语句.goto是C语言的任意跳转语句关键词,后接跳转的标签,调用形式为:goto label,其中label为目标跳转位置的标签,应满足C语言标识符的命名规则。它的语法如下goto label;//其它代码label:其中,label为我们自己定义的一个标签,定义的规则与变量的命名相同,它的位置是不固定的,它可以写在goto语句的后面,也可以写在它的前面,然而goto语句只能在一个函数内部跳转,它并不允许跳转出一个函数外部。从结构化设计的角度来看,它可能不利于程序
2020-08-28 20:17:11 5909
原创 脚本语言与非脚本语言
脚本语言(Script languages)是为了缩短传统的编写-编译-链接-运行(edit-compile-link-run)过程而创建的计算机编程语言,脚本语言是编程语言的子集。一个脚本通常是解释执行而非编译。脚本语言通常都有简单、易学、易用的特性,目的就是希望能让程序员快速完成程序的编写工作。脚本语言不需要编译,一句句解释执行就可以,脚本语言是读一行执行一行,而无需关注下一行的语言,非脚本语言则是必须读取整个源程序内容、建立完执行环境后执行的语言。非脚本语言比如java、C这些,如果代码有错误,
2020-08-23 17:50:56 3210 1
原创 关于结构体对齐的详谈
结构体对齐几种代表性格式格式一: //进行整体对齐,最大类型为4=对齐系数4,所以按4整体对齐 1<4(对齐4) 4=4 2<4(对齐4) 所以4+4+4=1201.struct tagPhone02.{03. char A;04. int B;05. short C;06.}Phone; 格式二:01.struct tagPhone02.{03. char A;04. short C;05. int
2020-08-05 10:47:47 429
原创 关于多线程与多进程的优劣
进程:一个正在执行的程序,它是资源分配的最小单位进程中的事情需要按照一定的顺序逐个进行,那么如何让一个进程中的一些事情同时执行资源分配 内存多少 CPU多少线程:有时又称轻量级进程,程序执行的最小单位,系统独立调度和分派CPU的基本单位,他是进程中的一个实体。一个进程中可以有多个线程,这些线程共享进程的所有资源,线程本身只包含一点必不可少的资源。CPU相当于转盘 分配给每个线程一定相同的时间 时间到了之后就会转到下个线程单线程:如果事件1 阻塞之后 CPU转一圈下来之后就会只执行事
2020-07-24 23:04:51 430
原创 关于线程的一些术语
并发:同一时刻只能有一条指令执行,但多个进程指令被快速轮换执行,使得在宏观上具有多个进程同时执行的效果。总结一句:看起来同时发生,单核假设CPU转一圈1ms 因为人的反应时间 看起来每个程序同时执行一样,实际的在1ms内每个应用程序只执行了0.2ms的时间。并行:同一时刻,有多条指令在多个处理器上同时执行。总结一句:真正的同时发生 多核同步:彼此有依赖关系的调用不应该“同时发生”,而同步就是要阻止那些“同时发生”的事情。总结一句:阻止事件同时发生,就是一种机制。Record记录变量的变化
2020-07-24 23:01:54 237
原创 数组指针与指针数组
数组指针(指向指针的数组) 又称行指针定义为 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 144
原创 网络编程之TCP协议
应用层 会话层 表示层 由于更关注 通信细节,所以把这三层合并为一层客户端编写通信的框架服务器端编写通信的框架后续补充例程代码:
2020-07-24 22:50:27 112
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人