自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(56)
  • 资源 (7)
  • 收藏
  • 关注

原创 NFS、FTP、SSL、TFTP环境搭建

一、FTP服务1、安装FTP服务sudo apt-get install vsftpd2、配置sudo vi /etc/vsftpd.conf3、重启FTP服务sudo /etc/init.d/vsftpd restart二、SSH服务开启apt-get install openssh-server三、tftp服务器搭建一般情况下,tftp用于通过网络下载东西到DRAM中,,Ubuntu主机作为TFTP服务器,因此需要在Ubuntu上搭建TFTP服务器。1、安装 tftp-h

2021-05-17 19:49:53 9 1

原创 GIT项目A引用项目B中某个文件夹的详细操作流程

一、项目A分割-subtree1、进入需要被分割文件夹的上级目录2、使用subtree分割git subtree split -P <name-of-folder> -b <name-of-new-branch><name-of-folder>:从工程根目录开始算起,类似“project/folder1/folder2”的格式<name-of-new-branch>:创建的分支名称二、创建项目B1、退出当前目录,在其他位置创建个git仓库m

2021-05-12 15:26:39 11

原创 bat:令人绝望的文件夹切换

接触bat文件不多,现在写一个简单的bat脚本,发现win下的跨盘符切换文件夹时的两个奇怪现象,让我在测试的时候浪费了很多时间。因此好好的整理一下。奇怪现象1:使用cd f:/dir/dir 但是切换不成功奇怪现象2:使用cd c: 切换盘符的时候怎么不是根目录而是切换到了上次从c盘切换出来时候的目录。奇怪现象1:C:\Users\Administrator>cd F:/00C:\Users\Administrator>奇怪现象2:C:\Users\Administrator

2021-04-29 17:05:44 11

原创 bat语法

一、文件目录:当前盘符:%~d0当前路径:%cd%当前bat文件路径:%~dp0当前bat文件短路径:%~sdp0当前执行命令行:%0

2021-04-26 15:09:23 16

原创 Linux之GDB调试

一、代码编译需要使用gdb调试的代码编译时需要添加-g选项如:# gcc -g test.c -o test二、调试流程使用gdb运行编译出来的可执行文件如:#gdb test三、GDB调试语法命令功能(gdb) I查看文件(gdb) r运行代码(gdb) c恢复程序运行(gdb) b 6在第六行设置断点(gdb) info b查看断点信息(gdb) p n查看变量n的值(gdb) n单步执行–不进入函数内部(gdb)

2021-04-22 20:03:04 5

原创 Linux串口通信

#include "stdio.h"#include "stdlib.h"#include "unistd.h"#include "sys/types.h"#include "sys/stat.h"#include "fcntl.h"#include "termios.h"#include "errno.h"#include "string.h"int main(){ int tty_fd; struct termios opt; int n; char

2021-04-21 11:30:18 7

原创 Linux线程同步(线程信号量互斥量)

有两组接口函数用于表示信号量,一组取自POSIX的实时扩展,用于线程。另一组取自系统V信号量,常用于进程同步。本文章是针对第一种信号量的知识点。信号量是一种特俗的变量,可以增加减少,但对其的访问被保证是原子操作,这样的特殊性保证了一个程序中有两个或者更多的线程试图改变一个信号量的值时,系统将保证所有的操作都将依次执行,如果是普通变量,来自同一个程序中的不同线程的冲突操作所导致的结果是不确定的。以下所有函数返回值都遵循成功返回0。一、信号量创建#include "semaphone.h"yi/*

2021-04-20 10:54:26 26

原创 Linux线程及线程属性

一、线程创建#include "pthread.h"/** *thread:句柄(线程ID) * attr:设置线程数性,如果没有特俗需求,设置未NULL * start_routine:入口函数 * arg:入口函数的参数 * return:线程创建成功返回0,失败返回错误码**/int pthread_create(pthread_t *restrict thread, const pthread_attr_t *restrict attr, void *(*start_routi

2021-04-19 15:44:42 21

转载 关于DMA,TCM(ITCM和DTCM)和Cache的理解!

关于DMA,TCM(ITCM和DTCM)和CacheDMADMA=Direct Memory Access。这是一种通过硬件实现的数据传输机制。简单的说,就是不在CPU的参与下完成数据的传输。DMA是一种硬件设备。这种设备的工作原理是这样的:——首先CPU告诉DMA设备,要有一堆数据需要传输,为了效率而请它出马。(DMA请求)——DMA收到CPU的消息,开始准备。此时CPU把数据源地址、数据目标地址、传输数据量、传输模式等等参数告诉它。(DMA初始化)——DMA初始化完,向CPU发送消息“借你的

2021-04-14 16:20:49 36

原创 Linux进程

一、进程和线程得关系

2021-04-12 19:49:26 20

原创 GIT创建分支及分支合并的操作流程

一 创建分支流程:创建分支:git branch develop_branch切换到该分支: git checkout develop_branch在远端建立一个分支与该本地branch分支相对应起来:git push --set-upstream origin develop_branch二 分支合并:切换到需要合并到的分支: git checkout master将目标分支合并到目前所在分支:git merge develop_branch使用git status查看冲突文件,并解决

2021-04-12 18:44:41 30

原创 GIT常用指令集合

一、名词:工作区(workspace) :平时些的代码都在工作区暂存区(index/Stage) :工作区代码执行add命令后将代码提交到暂存区本地仓库(Repository) :暂存区代码执行commit命令将代码提交到本地版本库远程仓库(Remote) :本地仓库代码执行push命令将代码提交到远程仓库二、本地git服务器搭建三、常用命令命令功能常用指令git add将文件从工作区添加到暂存区【git add file1 file2】将文件file1,f

2021-04-01 17:52:28 36

原创 嵌入式格式化输出(LOG、自己实现printf、可变参数、LOG颜色)

今天在项目上遇到一个问题,需要将目前代码中的全部LOG增加文件等定位标识,方便在定位代码。在网上折腾了一下,整理一下“printf”中用到的一些接口及一个相对使用较方便的LOG输出格式。...

2021-03-23 17:23:23 65

原创 python修饰符 ‘@‘ 详解

今天在琢磨一个python脚本中遇到了一个陌生得python写法,觉得很奇怪,如下图:这个一堆’@'是什么东西?一、定义:函数修饰符在python中,这个@被称为函数修饰符,其基本功能及特点如下:可以在模块或者类的定义层内对函数进行修饰出现在函数定义的前一行,不允许和函数定义在同一行一个修饰符就是一个函数,它将被修饰的函数作为参数,并返回修饰后的同名函数或其他可调用的东西二、作用简单理解,修饰符就是一个函数,并且是一个入参为函数的函数。举个没有意义的例子,比如我们需要将一个函数(这里应该

2021-03-12 16:19:03 35

原创 NMEA0183格式GPS数据详解

NMEA0183格式以’$'开始,主要语句有GPGGA,GPRMC,GPGSA,GPGSV,GPVTG,GPZDA等NMEA格式数据如下:$GPGGA,121252.000,3937.3032,N,11611.6046,E,1,05,2.0,45.9,M,-5.7,M,,0000*77$GPRMC,121252.000,A,3958.3032,N,11629.6046,E,15.15,359.95,070306,,,A*54$GPVTG,359.95,T,,M,15.15,N,28.0,K,A*04

2021-02-23 16:55:47 131

原创 linux文件系统结构

linux文件系统结构目录存放内容/bin存放二进制可执行文件,这些命令在单用户模式下也能够使用,可以被root和一般账号使用/bootUbuntu内核和启动文件,比如vmlinuz-xxx。gurb引导装载程序/dev设备驱动文件etc存放一些系统配置文件,比如用户账号和密码文件,各种服务的起始地址home系统默认的用户主文件夹,一般创建用户账户的时候,默认的用户主文件夹都会放在此目录下lib存放库文件media次目录下放置可插拔设备

2020-12-10 21:09:14 23

原创 linux开发板直连电脑

1、设置windows网络,设置IP地址、子网掩码、默认网关、DNS服务器处于同一个网段的意思:几个设备的子网掩码和默认网关是一样,只有IP地址不一样IP:192.168.1.22子网掩码:255.255.255.0默认网关:192.168.1.1DNS服务器:192.168.1.12、设置ubuntu:IP:192.168.1.23子网掩码:255.255.255.0默认网关:192.168.1.1DNS服务器:192.168.1.13、双向ping,确认是否通4、开发板设置

2020-12-10 20:41:06 114

原创 python UI:PyQT5安装及使用

  初学python,目前需要设置一款带UI的上位机软件,查了很多资料,UI的设计可选择的也是多得很,但是最终选择了PyQT5,不要问为什么,因为控件都是可拖拽的,设计完成之后可以直接生成代码。方便~。UI设计界面如图:网上相关安装资料很多,但是我在实际安装的时候按着网上的操作失败,找了半天才安装成功,在这里也算是给自己写一个安装笔记,供读者及自己排坑。一、安装pip install PyQt5pip install pyqt5-tools二、在pycharm中配置扩展程序1、添加ext

2020-10-26 18:14:24 158

原创 python学习:面向对象:类、对象、继承

一、类 ① 约定成俗的类的命名方式:  1)首字母大写  2)为了与其他进行区分尽量避免使用 ‘_’,建议采用StudentHomework小驼峰的格式 ②类的常见格式:

2020-10-15 19:06:29 40

原创 Python学习:项目的组织结构:包、模块、类、函数

一、几个重要的概念包:可以简单的理解为文件夹的概念;二者的区别在于包下存在__init__.py文件。也就是说:文件夹 + __init__.py = 包模块:简单的理解为文件类:class函数、变量:属于类的特性二、命名空间导入模块:import①import 包.文件:eg:import folder.file,表示的是导入folder文件夹中的file文件;使用该方法导入时,在后面变量的使用时也需要使用"folder.file.var"这样的格式。...

2020-10-13 19:38:52 83

原创 Python学习:运算符和循环分支

一、运算符1、值类型和引用类型  ①值类型:int、str、tuple  ②引用类型:list、set、dict2、字符串赋值运算  b=‘hello’  b=b+‘python’  以上两个表达式实际运算之后得到的是一个新字符串,可以使用id获取字符串地址查看3、==和is的区别   ==是比较两个值是否相等   is是比较身份(地址:id() )是否相等?4、值、身份、类型 为对象的三个特征   值:==   身份:is   类型:isinstance二、循环分支

2020-10-13 19:38:39 37

原创 Python 学习:列表,元组,集合,字典

一、列表:list1、简介你可以创建包含字母表中所有字母、 数字0~9或所有家庭成员姓名的列表; 也可以将任何东西加入列表中, 其中的元素之间可以没有任何关系。在Python中, 用方括号([] ) 来表示列表, 并用逗号来分隔其中的元素。eg:2、列表的访问列表是有序集合, 因此要访问列表的任何元素, 只需将该元素的位置或索引告诉Python即可3、修改、 添加和删除元素3.1 修改3.2 增加1、在末尾增加:方法append() 将元素’ducati’ 添加到了列表末尾常见使

2020-09-14 17:25:39 46

原创 Python 学习:基本数据类型数字和字符串

一、数字1、数据类型:整形:int浮点型:float2、获取数据类型:typeeg:type(1)3、进制二进制:0b开头八进制:0o开头十六进制:0x开头4、进制转换转为二进制:bin() ;eg:bin(0x11)转为八进制:oct();eg:oct(0b11)转为十进制:int();eg:int(0x10)转为十六进制:hex();eg:hex(10)5、布尔类型True:非0或非空False:6、复数复数的表现形式:36j二、字符串1、字

2020-09-08 10:56:01 126

原创 通信基础RB、RE以及NBIOT的传输速率

帧说的是数据链路层面的事情,时隙是时分系统中物理信道层面的事情RB:频率上连续的12个子载波,时域上的一个slot(时隙),称为一个RB。RE:频率上一个子载波和时域上symbol称为一个REslot和symbol什么关系?Normal CP(Cyclic Prefix)情况下,每个子载波一个slot有7个symbol;Extend CP情况下,每个子载波一个slot有6个symbol比如NBIOT网络中,一个无线帧(10ms)共有10个子帧,一个子帧(1ms)有两个时隙(slot),每个时隙有7

2020-09-07 16:44:34 1695

原创 非常详细的MQTT+TLS(四)----阿里SDK的使用

非常详细的MQTT+TLS----阿里SDK的使用一、demo的下载1、登录阿里云的控制台,找到文档与工具2、定制自己的SDK,按着我的选择方式,我创建MQTT+SSL的线程一共使用了4K的堆栈(剩下100多Byte)PS:没有计算接受发送等Buf在内哈。二、demo的使用前面分别说明了MQTT和TLS的移植。当然,我们还可以选择给直接的办法,直接使用阿里云提供的SDK,阿里云上面提供的SDK模块化做的非常好,我们只需要修改一些与平台相关的文件就可以完美运行。如果你的系统是linux或者fre

2020-08-27 19:09:30 1223

原创 非常详细的MQTT+TLS(三)----TLS篇

非常详细的MQTT+TLS----TLS篇多的不说少的不唠,这篇文章没有理论只有经验!1、移植有了前面MQTT的移植,相信大家也都了解了这种软件包的套路我下载的是【mbedtls-mbedtls-2.23.0】,文件夹目录如上图所示,其中大部分文件都是示例及说明等。TLS移植时最麻烦的应该就是config文件的配置,内容很多,在这里给出一个对接成功的config文件供参考。【超链接】与MQTT类似SSL也需要我们配置net_sockets.c,该文件内部用于创建TCP以及读写的底层函数,如果你使

2020-08-27 18:56:10 1817 4

原创 非常详细的MQTT+TLS(二)----TLS铺垫篇

非常详细的MQTT+TLS----TLS铺垫篇在移植TLS之前先熟悉一下TLS、TCP/IP、MQTT三者的关系,这很重要!!“TCP/IP、MQTT、SSL之间是什么关系呢?”通过MQTT章节的说明已经明确了TCP/IP和MQTT之间的关系,那SSL在MQTTs处于什么位置嘞。那就要从TLS的定义说起TLS称为安全传输层协议,用于在两个应用程序之间提供保密性和数据完整性。说白了TLS就在TCP之上建立了一个通道,将我们TCP传输的明文进行加密,从而保证通信的私密性。如图为MQTT与MQTTs的区

2020-08-27 18:53:38 742

原创 非常详细的MQTT+TLS(一)----MQTT篇

非常详细的MQTT+TLS----MQTT篇首先要说明的是,MQTT是一个构建在TCP/IP之上的轻量消息协议,也就是说我们要创建MQTT协议之前需要创建TCP连接。在TCP连接之上再创建MQTT通信。1、MQTT移植:如图是我们从github下载到的MQTT包。第一次接触的人一定和我一样一脸懵逼,现在我很负责任的告诉你,你只需要关注如下两个文件夹。在移植时我们需要将【MQTTPacket】→【src】下面的文件移植到我们的自己平台上,这些文件可以理解成是对接MQTT的公共文件包,不管你是什么平台

2020-08-27 18:32:06 2012

原创 man手册汉化

汉化前汉化后:正题一、下载汉化包1、linux直接获取:sudo mkdir /usr/local/zhmancd /usr/local/zhmanwget https://src.fedoraproject.org/repo/pkgs/man-pages-zh-CN/manpages-zh-1.5.2.tar.bz2/cab232c7bb49b214c2f7ee44f7f35900/manpages-zh-1.5.2.tar.bz22、手动下载移植到linuxhttps://down

2020-07-27 16:32:27 198

原创 TCP连包问题解决:Nagle算法

在使用LWIP创建TCP时,发送比较快时发现出现连包现象,同样的发送速度UDP却没有出现。这是为什么呢?最终定位的Nagle算法:TCP/IP协议中,Nagle算法是默认开启的。那么什么是Nagle算法呢?Nagle算法通过减少需要传输的数据包,来优化网络。在内核实现中,数据包的发送和接受会先做缓存。启动TCP_NODELAY,就意味着禁用了Nagle算法。当我们不设置TCP_NODELAY时,就默认打开了Nagle算法。这个时候,我们发送的数据将会在写缓存中保存,直到保存到一定量之后,数据才会被发送。

2020-07-17 19:36:49 222

原创 NTC温度计算(附程序)

首先第一部分需要先弄明白它的名字中的各个部分都是什么意思,觉得不需要的可以直接跳过。一、NTC命名在淘宝上随便搜了一个NTC电阻,命名如下:1、MF代表含义:**电阻命名含义MF51单端玻璃封装NTC热敏电阻器MF52小黑头测温型NTC热敏电阻MF58玻壳测温型NTC热敏电阻器MF72功率型NTC热敏电阻器MF73大功率NTC热敏电阻器2、10K、5K ··· 代表含义:这里的10K代表的是在25℃下的标准阻值。同理5K代表在25℃下的

2020-07-17 19:36:35 3963 12

原创 STM32利用UID和OTP进行固件加密

资料准备:对应模块的参考手册(RM)一、OTP介绍OTP:one-time programmable,只允许一次编程,也就是只能从1写0,不能从0写1。这里可能有人要问,这不是flash的特性么?需要注意的是,flash是允许擦除的,是允许从0写1的。二OTP不允许擦除。而且,如果只有一位是0,整个双字(64位)都不能再写了,甚至也不能写0x0000 0000 0000 0000。这里的双字节根据不同的单片机有差距,由于我所使用的每次只能写双字节,因此,这里便是双字节。“The OTP area ca

2020-06-23 11:10:00 1793 2

原创 DL645通信协议97/07规约(附上下行例子)

DL/T645规约是针对电表通信而制定的通信协议,目前分两个版本,一个为1997年制定的成为97规约,还有就是07年指定的07规约。目前二者并存于市场中,要弄清楚二者的差异一、数据帧格式这里需要注意的点有:1、地址域长度不足时有用00H补齐的,也有用AA补齐的,这里可以自己测试一下。2、数据域中的数据接受和发送的时候都是需要处理的,主站加0x33,从站减0x33。3、所有的数据项(地址域、数据域)都需要按着低字节在前,高字节在后的远程传输。4、一般需要在每一帧数据前加上前导字节:FE FE F

2020-06-16 18:32:10 2964

原创 PADS两个常用使用技巧

虽然不是画板子得硬件工程师,但是很多时候也需要从PCB和原理图上面查看引脚。本篇文章描述在使用PADS时两个比较常用的操作:1、将PCB和原理图连接,同步显示2、学会如何屏蔽多余的线,可以清晰的看到引脚或者走线等一、连接PCB和原理图如图点击工具栏PADS图标,弹出的串口可关闭,下方显示已连接,下面点击原理图或PCB试一下,OK,二者可以同步了。二、屏蔽多余部分(Ctrl+Alt+C)将鼠标点击在PCB图上,使用Ctrl+Alt+C,在弹出的对话框中选择需要屏蔽的部分,将 √ 去掉,点击应用-

2020-06-16 13:05:15 263

原创 NB-IOT的数据传输流程和双工模式

NBIOT作为一种物联网技术,有很多的技术特点,因此百度起来比较乱,在学习之余,自己整理了一篇文章,给自己留个笔记。本文章主要整理了一下NB-IOT的数据传输以及双工模式其实开始的时候主要目的是想了解一下在NB进入PSM之后云端下发的数据暂时存在了什么地方?没有找到确切的答案。目前个人认为是存在核心网或者基站中,那么最多能存多少呢?。欢迎有知道的大神欢迎评论区指教一下。一、NB-IOT的总体网络架构NB-IOT从终端到应用服务器共经过了三个部分六个过程,分别指从NB终端发送数据,依次经过了基站、核心网

2020-06-13 16:38:29 2669

原创 Linux信号通信

信号是在软件测上对中断机制的一种模拟是一种异步通信方式,信号可以直接进行用户空闲进程和内核进程之间的交互,内核进程也可以利用他来通知用户控件进程发生了哪些系统事件。如果该进程当前未处于执行态,则该信号由内核保存起来,直到该进程恢复执行再传递给它;如果一个信号被进程设置为阻塞,则该信号的传递被延时,直到其阻塞被取消时才被传递给进程信号的生存周期:由内核产生,将信号发送给用户进程,用户进程进行信号注册(signal将信号和执行方式关联起来)->信号处理->信号注销信号的处理方式忽略信号:对信

2020-06-11 15:37:15 164

原创 Linux管道通信

无名管道和有名管道先说一下有名管道和无名管道用的函数:无名管道使用的是 pipe()有名管道使用的是fifo()无名管道主要用于有血缘关系的两个进程间通信,是内核使用环形队列机制实现,借助内核缓冲区实现的。有名管道主要用于两个不相干的进程间通信,我认为之所以叫有名管道是因为他们借助mkfifo()函数创建的伪文件利用内核缓冲区进行通信,因为创建文件可以指定文件名所以操作和使用文件几乎一样。首先关于无名管道 pipe()函数 需要指定两个文件描述符,通过pipe()函数创建一个管道使其一端读文件一端

2020-06-11 15:33:40 114

原创 SI中设置快捷键

一、修改快捷键二、常用快捷键快捷键作用快捷键command条件编译IfdefNever高亮Highlight Word

2020-06-10 12:20:02 244

原创 DOS批处理读取文件内容赋值给变量

一、将要读取的文件内容,可以任意改变[Database]SQLUserName=SQLUserNameSQLPassword=SQLPasswordSQLSource=SQLSourceOracleUserName=OracleUserNameOraclePassword=OraclePasswordOracleSource=OracleSource二、读取的格式@echo offset SQLUserName=ABCset SQLPassword=DEFset SQLSource

2020-06-09 15:32:48 1138

原创 简单2步实现STM32中重定向printf函数

在STM32中使用printf,需要将fputc函数重定向fputc原型:int fputc(int ch, FILE* stream);重定义如下:(例子中是重定向为串口1)int fputc(int ch, FILE* stream){ Uart1_SendCh((uint8_t)ch); return ch;}在Keil软件中,要使用printf输出函数的话,注意需要先把use MicrolLIB选项选上OVER:实测OK...

2020-06-02 12:15:20 193

GB2312字库.rar

其中GB2312.c对应的字库文件为“GB2312字库”压缩包中的bin文件 GBK.c对应的为GBK_20000+.bin文件 GBK_20000+.bin 文件包含了GBK所有汉字共20000余

2020-12-21

position.rar

定位数据解析代码

2021-03-04

MQTT+SSL资料整理.rar

整理了项目中使用到的 MQTT包、TLS包、阿里云平台根据三元组生成用户名密码的插件、MQTT调试工具以及一篇SSL描述以及证书的生产

2020-08-31

一个经过验证的config.h

一个经过验证的TLS的config配置文件,详细的查看:https://blog.csdn.net/qq_43448742/article/details/108266716 该链接,详细描述了TSL的移植过程

2020-08-27

edaHelper.rar

一款插件,支持protel99se,DXP(AD),PADS,OrCAD的capture、Cam350、Saber、PC Schematic、Allegro、CircuitCAM,并且对每个软件的功能都可设置。如:PADS可以实现AD的功能,包括鼠标拉动界面等等

2020-07-24

VSPD虚拟串口.rar

该软件可以实现电脑虚拟一个通路出来也就是两个端口。可以用于测试需要在电脑上手动发送数据到另一个串口软件时使用。

2020-07-17

DLT645-2007.zip

包含DT645-2007国网多功能电能表通信协议,和测试软件:其中包含了读正向有功总等包含DT645-2007国网多功能电能表通信协议,和测试软件:其中包含了读正向有功总等包含DT645-2007国网多功能电能表通信协议,和测试软件:其中包含了读正向有功总等

2020-06-24

空空如也

空空如也

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

TA关注的人 TA的粉丝

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