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

原创 ESP32 内网穿透

ESP32内网穿透

2024-05-22 01:28:43 166

原创 Linux系统面试

消息队列是消息的链表,存放在内核中并由消息队列标识符标识.消息队列克服了信号传递信息少,管道只能承载无格式字节流以及缓冲区大小受限等特点.消息队列是UNIX下不同进程之间可实现共享资源的一种机制,UNIX允许不同进程将格式化的数据流以消息队列形式发送给任意进程.对消息队列具有操作权限的进程都可以使用msget完成对消息队列的操作控制.通过使用消息类型,进程可以按任何顺序读信息,或为消息安排优先级顺序.优点:可以实现任意进程间的通信,并通过系统调用函数来实现消息发送和接收之间的同步,无需考虑同步问题,方便;

2024-05-15 23:59:15 457

原创 C语言面试题常见问题

而str3 和str4并非字符数组而是字符指针,并不分配存储区,其后的“abc”以常量形式存于常量区,str3 和 str4 是指它们指向的地址的首地址,而它们自己仅是指向该区首地址的指针,所以相等。2.在模块内的static函数只可以被这一模块内其他函数调用,这个函数的适用范围被限制在他的模块内。3.在类中,static成员变量属于整个类拥有,对类的的所有对象只有一份拷贝。4.修饰类的成员函数,不改变类中的数据成员.指向常量的指针,指向的常量值不可以改。指针,它们指向相同的常量区域。

2024-05-14 00:29:43 858

原创 Union内存分布

Union是中文名是联合体,类似于struct,但是跟struct有很多区别,里面参数公用内存。

2024-05-10 13:09:29 350

原创 文档自动生成 Doxygen+Sphinx

Doxygen介绍Doxygen是一种开源跨平台的,以类似JavaDoc风格描述的文档系统,完全支持C、C++、Java、Objective-C和IDL语言,部分支持PHP、C#。注释的语法与Qt-Doc、KDoc和JavaDoc兼容。Doxygen可以从一套归档源文件开始,生成HTML格式的在线类浏览器,或离线的LATEX、RTF参考手册。为什么要用Doxygen作为一名合格的程序员,我认为会写文档是很重要的,但是又不想花很多时间整理文档,那么doxygen是一个很好的工具。其...

2022-02-22 17:33:59 1431

原创 TCP UDP 特性与区别(上篇)

TCP UDP 特性与区别(上篇)

2022-01-29 21:49:03 2727

原创 H264 编码过程

1.网络抽象层单元类型(NALU)NALU头由一个字节组成,它的语法如下 +---------------+ |0|1|2|3|4|5|6|7| +-+-+-+-+-+-+-+-+ |F|NRI| Type | +---------------+F: 1 个比特. forbidden_zero_bit. 在 H.264 规范中规定了这一位必须为 0.NRI: 2 个比特. nal_ref_idc. 取 00 ~ 11, ...

2021-12-16 15:48:53 3492 1

原创 beaglebone 移植debian问题

总共和问题1: Timed out waiting for device /dev/ttyGS0.答案:直接屏蔽ttyGS0服务sudo systemctl mask [email protected]问题2 wpa timeout[ TIME ] Timed out waiting for device ▒▒system/net/devices/multi/user.[DEPEND] Dependency failed for WPA …ired driver..

2021-10-13 18:30:56 624

原创 蓝牙协议栈 hci分析初始化

最近研究蓝牙协议栈,以下笔记从hci层说明蓝牙协议栈初始化过程,以下截图是通过wireshark截取证明的实验电脑:x86 ubuntu-20蓝牙模块:ESP32 hci硬件连接 :h4(串口流控)1.初始化硬件host主机(linux系统)初始化h4硬件,系统(host主机)加载驱动2.发送ESP32 reset命令(host->control)3.读取 Local Supported Features(host->control)该命令可以查询hci支持.

2021-09-27 14:41:27 1614

原创 beaglebone black openssh移植

下载源码包,地址如下:openssh(openssh-8.3p1.tar.gz) http://www.openssh.com/portable.htmlopenssl(openssl-1.0.2u.tar.gz) http://www.openssl.org/sourcezlib(zlib-1.2.11.tar.gz) http://www.zlib.net/zlib-1.2.11 编译解压压缩包,进入 zlib目录,对其进行编译前的配置:prefix=$PWD/bui...

2021-09-01 17:07:08 115

原创 beaglebone sd卡启动系统

前面这篇详细介绍如何ramfs跑系统,但是ramfs不好的是,文件系统在ram上运行,这样子无法保存修改数据。下面会说明怎么把文件系统放到sd上,断电也能保存。1.把sd卡查到Ubuntu系统,输入查看/dev/sdX盘符,博主插上sd卡盘符是/dev/sdb,所以输入sudo fdisk /dev/sdb2.创建多一块ext4格式磁盘,大小自己确定。3.把该磁盘格式化成ext4格式sudo mkfs.ext4 /dev/sdb24.挂载ext4磁盘到电脑,注意电脑路径...

2021-08-06 17:38:14 419

原创 busybox 不能ping通域名

busybox 不能ping通域名原因是有以下原因1.采用静态编译2.缺少library库3.缺少/etc/resolv.conf文件要满足以下方案1采用动态编译在menuconfigCONFIG_STATIC为N2.把以下动态库放到lib文件夹下/lib/libnss_dns.so.2/lib/libnss_files.so.2/lib/libresolv.so.23.增加dns文件,输入以下命令echo 'nameserver 192.1..

2021-08-05 19:10:53 900

原创 Beaglebone Black 最小Linux从零系统编译

最近再研究beaglebone black,下面记录了从uboot,kernel,busybox编译过程。要板子上跑linux系统起来,必须需要以下3份源码uboot,kernel,busybox.Ubootuboot源码下载地址1.切换到 v2021.04-bbb.io-am335x-am57xx 分支2.输入以下指令,把bbb配置文件导入到 .configmake ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- am3...

2021-08-05 09:52:02 2042

原创 Beaglebone black 上手教程--uboot

本教程是教如何编译官方uboot到Beaglebon black 上面。1.格式化sd卡本人准备一张16g内存卡。1.把sd卡插入电脑。2.在命令行下输入以下指令sudo fdisk /dev/sdb注意:/请按照系统实际填入磁盘路径,本人电脑ubunut系统下插入sd卡路径为“/dev/sdb”3.我们查看输入m,则打印help命令Changes will remain in memory only, until you decide to write them

2021-07-21 20:11:40 1087 1

原创 Vue 源码分析5----DOM

Vue底层也是通过虚拟dom渲染页面。现在我们描述一下相关知识点1.虚拟dom是通过渲染函数(h函数)产生2.新虚拟DOM和老虚拟DOM进行diff(精细化比较),算出应该如何最小量更新,最后反映到真正的DOM上。 真实dom由以上图片可以知道,我们 html模板就是真实dom。虚拟dom用Javascript 对象描述DOM层次结构。DOM中的一切属性都在虚拟DOM中有相对应的属性。下面我们通过一个流程图说明数据渲染过程。这里渲染过程要用到sna..

2021-07-13 15:23:08 119

原创 VUE源码分析4 -- Mustache简介 和重写Scanner

下面我们说Vue Dom实现,vue dom 兼容mustache项目。这个链接是mustache官方工程mustache github地址下面我们

2021-06-18 19:21:57 195

原创 Vue源码分析4 ---- depend和watcher数据监听

前面Array数据帧检测说完,下面接着说Vue数据侦测具体实现过程。下面我们说depend和watcher数据监听Watcher和 DepWatcher类是用来实时检测数据变化,并且通知dom变化。Dep用来管理所有依赖依赖就是Wather。只有Watcher触发的getter才会收集依赖,哪个Watcher触发了getter,就把哪个watcher收集到Dep钟。Dep使用发布订阅模式,当数据发生变化时,会循环依赖列表,把所有的Watcher都通知一遍。Watcher 把自己设置到全局的一个指

2021-06-09 20:47:14 598 1

原创 Vue源码分析3--Array的变化侦测

​​前面描述Object的变化侦测 ,但是还有array没有处理。为什么 Object 和Array数据有两种不同的变化侦测方式?因为对于object 数据是用JS对象原型上 Object.defineProperty 。但是 Array没有该方法。因此我们要涉及另外一套Array的变化侦测机制。思路分析由以上流程图,我们先创建一个 Array 构造函数, 指向 Array.prototypeconst arrayProto =Array.prototype;const arrayMethod

2021-06-04 18:05:39 650 8

原创 Vue源码分析2--Ojbect的变化侦测

首先Vue的最大特点是数据驱动视图。什么是数据驱动试图呢?我可以用一条公式来描述UI= reader(state)在这条公式中,UI是页面输出,state是状态/数据,render就是vue,vue当检测到数据变化,就会触发改变UI。那么问题来了,Vue怎么根据数据变化而更改视图呢?下面我们总结一下变化侦测。并且从零基础开始手写Vue的变化侦测什么是变化侦测变化侦测是数据变化了,就要更新视图。目前的前端三大框架中均有涉及。在Angular中是通过脏值检查流程来实现变化侦测;在React是通过对比

2021-06-04 11:34:38 219 1

原创 RTL8188fu wifi驱动 移植到海思hi3518ev300

前期准备:Hi3518EV300 SDK(版本Hi3516EV200_SDK_V1.0.1.2)8188fu驱动wpa_supplicant移植kenerl1.在kernel输入以下命令,进入menuconfig配置make ARCH=arm CROSS_COMPILE=arm-himix100-linux- menuconfig2.打开cfg80211 - wireless configuration API和Generic IEEE 802.11 Networking Stack (ma

2021-05-28 19:49:33 808 2

原创 Javascript----原型与原型链

最近在看javascript,下面总结一下原型与原型链。一、定义1.原型prototype:函数中的一个属性,指向构造函数的原型对象。2.__proto__:对象中的一个属性,指向构造函数的原型对象。3.constructor:原型对象中的一个属性,指向该原型对象的构造函数。二、prototype请看下面一个例子:function Person(){ }Person.prototype.name="Janny"var person1 = new Perso..

2021-05-20 15:13:30 139 3

原创 TAILQ 详解

最近在看乐鑫ESP-ADF框架,发现该框架用到TAILQ 双向链表,于是我网上找了大量资料,总结这一篇东西。定义:TAILQ 是链表结构,使用大量宏定义去代表链表结构处理,源码在#include <sys/queue.h>常用APITAILQ_HEAD 定义队列头 TAILQ_ENTRY 队列实体定义 TAILQ_INIT 初始化队列 TAILQ_FOREACH 对队列进行遍历操作 TAILQ_INSERT_BEFORE ..

2021-05-17 13:44:38 2943 3

原创 Linux系统编程---消息队列

定义:消息队列是不同进程间通讯的一种方法。每个数据块都函数一个数据类型。接收进程可以独立接收不同类型的数据结构。常用函数int msgget(key_t key,int msgflg); 功能 创建和访问一个消息队列 参数 输入参数 key 进程间通信键值 msgflg 消息队列访问权限 跟文件权限一样。 可以与IPC_CREART做或操作。 返回值 int 返回一个消息队列标识符..

2021-05-12 21:31:29 181 1

原创 Linux进程间通讯 --信号

1.概念1.信号是软件终端机制一种模拟,只是一种异步通讯的方式。2.信号时可以直接用户空间进程跟内核进程进行交互,内核进程可以通过信号通知用户空间发生那些系统事件。3.如果该进程当前并未处于执行态,则该信号就由内核保存起来,直到该进程恢复执行再传递给它;如果一个信号被进程设置为阻塞,则该信号的传递被延迟,直到其阻塞被 取消时才被传递给进程。2.用户进程对信号的相应方式1)忽略信号:对信号不做任何处理,但是有两个信号不能忽略(SIGKILL 9和SIGSTOP 17)...

2021-05-11 15:25:37 132

原创 Linux系统编程--共享内存

常用函数key_t ftok( const char * fname, int id )功能:系统IPC键值的格式转换函数 名字 备注 输入参数 fname 指定的文件名 id 子序号,虽然是int类型,但是只使用8bit(1-255) 返回值 key_t 进程间通信键值 int shmget(key_t key, size_t size,int shmflg);功能:创建或打开一块共享...

2021-05-11 11:35:10 205 1

原创 Linux系统编程--命名管道

上一节我谈到匿名管道,适合在有亲缘的进程上使用,这节我们谈及一下命名管道(FIFO)。命名管道定义命名管道是一个设备文件,因此即使两个进程不存在亲缘关系, 可以访问该路径,就能通过FIFO相互通讯。FIFO先进先出,是半双工通讯。下面就聊聊命名管道相关函数函数名 作用 返回值 注意 mkfifo 创建管道 0:成功 -1:失败 open 打开管道 成功返回文件描述符,失败则返回-1 ...

2021-05-08 15:48:01 357

原创 Linux系统编程- 无名管道(匿名管道)

无名管道作为Linux进程间通讯,我们这里把理论和实际结合起来说明。1.什么是管道管道,英文位pipe,在学习linux系统编程一个重要概念.它的发明人是道格拉斯.麦克罗伊,这位也是UNIX上早期shell的发明人。他在发明了shell之后,发现系统操作执行命令的时候,经常有需求要将一个程序的输出交给另一个程序进行处理,这种操作可以使用输入输出重定向加文件搞定,比如:输入以下命令行:yates@yates-virtual-machine:~/test/code/FOLDER$ ls -l

2021-05-07 14:47:00 572

原创 结构体内存分布

最近在看c语言结构体内存优化,发现一个这个一个重要难点,写此文章记录下来。以下图表是在不同系统中基本类型数据内存大小和默认对齐模数:以下内存都是从0地址开始。首先请看下面题目:typedef struct BIT_T{ char buf[1]; } BIT;以上结构体内存占用情况怎么样?答案是1字节那么如果是以下结构体呢typedef struct BIT_T2{ char buf[1]; long ret; // short bit; } BIT2;

2021-04-29 17:08:14 1142 3

原创 c语言跳转地址,读写地址

跳转某个地址执行最近看指针,发现有个奇淫方法,直接跳转执行某个地址执行程序。例如:要跳转0x1000地址执行代码,代码是((void)(*)(void))0x1000)()注意:以下测试方法在esp32单片机上执行,在linux上,由于每个应用都是虚拟内存,所以无法通过地址跳转执行某段程序。为什么会这样子可以直接跳转到某个地址执行程序呢?首先先看一个demo。void print(void){ printf("this is a test\r\n");}void app_.

2021-04-24 00:19:16 2867 3

原创 指针长度

最近研究指针,发现这个是个坑,以下总结一些经验char str="1234567890";char str1[]="1234567890";char str2[100]="1234567890";int str3[100]={1,2,3,4,5,6,7,8,9,0}; strlen(str) sizeof(str) sizeof(*str) char *str = "2234567890"; char str[] = "22345...

2021-04-20 13:31:04 2030 2

原创 指针数组和数组指针区别

指针数组和数组指针区别指针数组(array of pointers):定义: 数组就是指针表现形式 : int *a[4] 指针数组,里面元素都是指向int型指针类型数组指针(a pointer to an array)定义: 指向数组的指针表现形式 int(*a)[4] 表示指向数组a的指针,给它赋值时要给一个起始地址。下面直接上demo演示:#include <stdio.h>int main(){ int a[4]={1,2,3,4}; int (

2021-04-13 15:16:34 79

原创 函数指针和指针函数区别

函数指针和指针函数区别发现每次面试,面试官都问这个问题,这次我把问题描述清楚,希望各位读者以后比面踩雷。首先,这两者区别是一个是指针变量,一个是函数。指针函数定义: 带指针的函数,本质就是函数,返回值:某一类型指针,就是一个地址值表现形式 : 类型标识符 *函数名(参数列表)示例代码#include <stdio.h>int *add(int a,int b){ static int c= 0; c= a+b; printf("add=%p\

2021-04-13 14:52:05 143

原创 8720D SDK 添加Library文件夹,GCC编译通过

本教程主要是提供修改8720 SDK (9351_00018082-sdk-amebad_v6.2C-RC)下添加自己library库到component下目录,并且使用GCC能够编译成功。1.首先先看文件目录,从截图中可以看到,common库包含我们常用Library库,我们把我们自己文件夹丢到该目录下。该demo就丢一个HET_HAL_WiFi.c,HET_HAL_WiFi.h和Error_Define.h文件到HET/HAL文件夹下。2.修改文件makefile,从下面截图可以看出,我们mak

2020-06-10 11:24:40 1252 2

原创 打开文件表、文件描述符、打开的文件句柄以及i-node之间的关系

概念:1.进程级的文件描述表,(open file description)就是我们常常在代码中使用的int fd变量,由open函数返回。2.系统级的打开文件表,这是内核对所有打开文件维护的一个描述表格,将表格中的每一项称为打开文件句柄。它存储了一个打开文件的所有相关信息,例如当前文件的偏移量,访问模式,状态等等。3.i-node信息,文件系统中的每个文件都有自己的i-node信息,它包含文件类型,访问权限,文件属性等等。下面用一个表格表示他们内容下面描述他们三者之间的关系在进程A中,文

2020-06-02 20:05:37 3784 1

原创 汇编调用到C语言mian函数--中间究竟发生了什么过程

最近面试,技术经理问我汇编到main函数步骤是什么,当时我是一脸疑惑,what?main函数就不是C语言调用第一个函数吗?后面我自己查了相关资料,才发现自己too young too navie.很多人只知道main函数是c语言的第一个调用函数,其实不是,下面用个例子说明在开始讲解之前,我先科普一下知识,平时我们编译.c文件是,一般分为三个步骤:第一步生成汇编代码第二部生成目标文件第三步生成可执行文件[test@localhost Assembler]$ gcc -S main.c [test

2020-05-30 20:09:36 1192

原创 CoAP学习--通讯流程

CoAP基础学习上一篇我们介绍CoAP的协议详解,下面我们介绍CoAP的通讯流程CoAP跟HTTP非常类似,主要是以下几点:1.coap的url和HTTP的有很相似的地方,开头是“coap”对应“http”或者“coaps”对应“https”。2.HTTP的默认端口是tcp 80,coap的默认端口是udp 5683(coaps是5684)。3.URL里面的“/”“&”“.”下面三个URL的地址是一样的。访问example.com这个域名,端口是udp 5683,访问的资源地址是~sen

2020-05-22 23:30:56 2132

原创 COAP学习--基础篇

最近面试的时候面试官问其来coap,当时第一次使用该协议。听说该协议跟Mqtt一样,应用在物联网协议,于是,由于资料比较杂散,我看了大量资料,希望出个教程给新手少踩一点坑。注意:在学习CoAP之前,我建议小伙伴先学习HTTP协议,再回头学习CoAP,会少很多弯路首先我们了解coap的历史CoAP的发展CoAP是受限制的应用协议(Constrained Application Protocol)的代名词。最近几年专家们预测会有更多的设备相互连接,而这些设备的数量将远超人类的数量。在这种大背景下,物联网

2020-05-22 22:07:32 1270

原创 BM1880入门----USB 模式

开发板官网:https://sophon.cn/product/introduce/edb.html官方教程:https://sophon-edge.gitbook.io/project/overview/edge-tpu-developer-board 。但是该教程有一些细节地方没有描述清楚,现在一步步手把手教程。笔者手里拿到一块最新BM1880边缘开发板。根据官网介绍,该开发板介绍...

2018-12-29 15:28:28 1563

转载 BM1880简介

前不久比特大陆推出其云端人工智能芯片--SOPHON(算丰)BM1682芯片,BM1682是比特大陆设计,并对图像、视频等处理给予额外辅助支持的人工智能硬件加速芯片,其峰值运算速度为3TFLOPs,可提供给用户强大的硬件加速支持。近日,比特大陆又将推出其边缘计算芯片BM1880,用于前端图像、视频、语音、自然语言等等深度学习硬件加速。从功能模块图上看,BM1880是一块对视频、图像进行人工智能...

2018-12-29 14:23:30 1876 2

原创 Read the docs 环境搭建

写文档一向是个苦差事,但只有写出好的文档,才能有资格霸气十足的对别人淡淡道出。为了这一崇高目标,经过一些比较和调查,最终锁定Sphinx + ReadTheDocs作为文档写作工具首先感谢以下两篇教程https://www.cnblogs.com/youxin/p/3594161.htmlhttps://avnpc.com/pages/writing-best-documentatio...

2018-10-22 17:09:12 4356

A20(8266与A6C拍照)

这个是A20拍照demo,其实内部是8266与A6C通信,A6C是带摄像头gprs模块,8266是乐鑫出产的wifi芯片

2016-08-31

空空如也

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

TA关注的人

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