自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(40)
  • 收藏
  • 关注

原创 C/C++字符串学习

最近做项目时,碰到一些字符串的问题,还是不是很熟悉。说明基础薄弱,要对字符串的使用进行总结。1.字符串初始化常用的字符串的初始化三种#include <iostream>using namespace std;int main() { string s1 = "hello world"; string s2 = s1; string s3(s1); cout<<"s1 value is "<<s1<<endl; .

2021-03-04 21:24:40 241 1

原创 合宙Air724UG Cat1(4G)CSDK 二次开发总结 cmake使用

在自己做项目过程中,因为不能使用他的demo,所以都要从头进行开发,要进行.c文件编写,但是因为文件很多,vscode不能自动编译。所以要使用cmake进行链接。

2021-01-09 10:31:59 2085

原创 合宙Air724UG Cat1(4G)CSDK 二次开发总结(DNS TCP)

最近项目要用到cat1模块,之前使用过这个模块,但是是有MCU的,所以只需要知道如何发送正确的AT指令即可。现在是需要对这个cat1模块进行二次开发,在这个过程中学到了什么进行总结。这次使用的合宙的Air724UG开发板。这个模块只有4G功能。在学习过程中,参考了这位大佬的教程,非常好,合宙开发。1.环境搭建...

2020-12-25 12:02:49 6015 4

原创 GD32103系列 电机驱动项目总结

这次使用的GD系列的芯片来做电机的驱动。然后对使用GD芯片做个总结。

2020-11-10 19:52:09 3783 1

原创 MMU工作原理

1.进程和程序 程序:编译好的二进制文件,在磁盘中,不占用系统资源(CPU,内存,打开的文件,设备,锁.....) 进程:是一个抽象概念。进程是活跃的程序,占用系统资源,在内存中执行,程序运行起来,产生一个进程。 同一个程序也可以加载为不同的进程(相互不影响)。2.CPU简易架构 右侧是存储介质的分类:寄存器速度是最快的。 ...

2020-09-28 20:50:19 420

原创 C++ STL学习记录(String类)

size_type find (value_type _Chr, size_type _Off = 0) const;//find()函数的第1个参数是被搜索的字符、第2个参数是在源串中开始搜索的下标位置size_type find (const value_type* _Ptr , size_type _Off = 0) const;//find()函数的第1个参数是被搜索的字符串,第2个参数是在源串中开始搜索的下标位置size_type find (const value_type* _Ptr,

2020-09-19 13:06:11 116

原创 Linux基础学习(解压缩和服务器配置)

1.文件的压缩 基础版: 1>gzip ------------.gz格式压缩包 2>bzip2-----------.bz2格式压缩包 gzip *.txt --------将所有的txt文件压缩,不保留源文件,不能压缩目录 gunzip.*gz -----------解压缩txt文件 bzip2和gzip类似,但还可以保留源文件。 1.1 ...

2020-08-07 11:23:50 129

原创 Linux基础学习(基本命令和文件操作)

最近系统的学习Linux知识,想在此做个记录。1.常用的快捷键 1.1 历史命令切换Ctrl + P 命令向上翻 Ctrl + N(Next) 命令向下翻 history 历史命令 1.2光标移动Ctrl + B(Back) 光标向前移动 Ctrl + F(Foward) 光标向后移动 Ctrl + A 光标移动到最前面 Ctrl + E(E...

2020-08-04 22:50:35 101

原创 LoRa学习总结(三)

之前总结是LoRa的基本知识,接下来是都是代码的结构或者细节方面的总结。

2020-07-31 15:01:41 3052 1

原创 LoRa学习总结(二)

之前文章写到LoRa一些特点和传输距离。根据自由空间传播距离公式,可以得出发射功率越大,传播距离越长。但是LoRa是低功耗,远距离传输,是如何解决这一对矛盾的?根本原因是LoRa提高了接收机的灵敏度,从而拥有超强的链路预算,也就不需要很高的发射功率了。1.扩频通信         LoRa接收端灵敏度要归功于扩频技术。       &nbs

2020-07-25 17:56:10 1873 1

原创 LoRa学习总结(一)

1.什么是LoRaLoRa是Semtech公司创建的低功耗局域网无线标准。LoRa(Long Range Radio)的名字就是远距离无线电,它最大特点就是在同样的功耗条件下比其他无线方式传播的距离更远,实现了低功耗和远距离的统一,它在同样的功耗下比传统的无线射频通信距离扩大3-5倍。2.LoRa特性传输距离:城镇可达2-5 Km , 郊区可达15 Km 。工作频率:ISM 频段 包括433、868、915 MH等。标准:IEEE 802.15.4g。调制方式:基于扩频技术,线性调制扩频(C

2020-07-25 14:10:46 1686

原创 NB的联网 数据上报和远程更新的功能整理

1.什么是NB_IOTNB-IOT是窄带物联网(Narrow BandInternetof Things)的简写,为了和现在的移动网络兼容,主要基于LTE技术( 3GPP Release 13)。NB-IoT主要面向大规模物联网连接应用,有如下的优点:覆盖广,相比传统GSM,一个基站可以提供10倍的面积覆盖 海量连接,200KHz的频率可以提供10万个联接 低功耗,使用AA电池(5号电池)便可以工作十年,无需充电1.1为什么NB_IOT实现低功耗DRX(Discontinuous R.

2020-07-12 09:47:05 1723

原创 C++对C的增强

C++在语法上大部分都兼容C,但是会在一些方面对C进行加强。有类型的加强,函数的加强等等。1.namespace命名空间标准C++引入了关键字namespace(命名空间/名字空间/名称空间/名域),可以更好地控制标识符的作用域。C中的命名空间C++中命名空间在C语言中只有一个全局作用域命名空间将全局作用域分成不同的部分所有的全局标识符共享同一个作用域全局作用域也叫默认命名空间标识符之间可能发生冲突不同命名空间中的标识符可以同名而不会发生冲突C++命名空间使

2020-06-01 11:03:52 156

原创 C语言指针总结提高(const用法 二级指针)

1.C中const用法const是用来修饰变量的,被它修饰的变量不能被直接修改,(其实还是能修改的)。可以这么理解,const是定义常量的,意味着只读。1.1修饰int时const int a = 10;int const a = 10;这两个写法都是一样的。如果直接对a赋值是会报错的。1.2修饰char时const char *a;char const *b;const char const *c;第一个申明是c是一个指向常整形数的指针(所指向的内存数据不能被修改,但是本身可以修

2020-05-22 11:06:05 838

原创 C语言指针总结提高(指针操作字符串)

字符串在C中是比较特殊的一类数据类型,学习时候总感觉和其他数据类型有区别。然后最近在看视频和查资料的时候总结一下。1.字符串定义之前对字符串初始化都是似懂非懂的,这里做个总结。1.1字符串初始化C中字符串 是以0结尾的字符串C中没有字符串类型,可以通过字符数组来模拟字符串。也就是说只有char,没有string。int main(void){ char p1[] = { 'c','u','o' }; char p2[] = { 'w','e','t','\0' }; char p3[

2020-05-20 17:19:17 205

原创 C语言指针总结提高(野指针,一级指针)

在做项目中我们经常用到一级指针,比如传参啊,调用,字符串什么的。大家最熟悉的应该是一级指针。1.野指针这个词之前也听过,但是不确实是什么意思。先搜了一下百度百科,定义是:野指针就是指针指向的位置是不可知的(随机的、不正确的、没有明确限制的)指针变量在定义时如果未初始化,其值是随机的,指针变量的值是别的变量的地址,意味着指针指向了一个地址是不确定的变量,此时去解引用就是去访问了一个不确定的地址,所以结果是不可知的。也没看大懂,找了一些例子和一些讲解,其实引起野指针有两种情况。初始化未被置NULL

2020-05-19 22:41:30 708 3

原创 C语言指针总结提高(内存位置)

学习C肯定会碰到指针,指针是C的灵魂。所以学好指针很关键,这里写一些指针方面的容易错的或者易混淆的知识点还有自己不会的盲点,以便之后复习时用。1.数组传参和数组形参1.1数组传参如果函数遇到数组传参的,不论是什么形式的形参,只要是数组,那么被调函数都将这个形参都当做指针来使用。#include "stdio.h"PrintArray(int *a, int num){ int i; for (i = 0; i < num; i++) { printf("%5d", a[i]);

2020-05-18 09:56:39 1344 1

原创 RTOS学习之旅(六)(ucosIII 时基列表)

时基列表是跟时间相关的,处于延时的任务和等待事件有超时限制的任务就会从就绪列表中移除,然后插入到时基列表。如果任务延时时间结束或超时,那么就让任务就绪,从时基列表中移除,插入的就绪列表中。目前,在OS中实现两个列表,一个是就绪列表,一个是时基列表。1.时基列表变量时基列表在代码层面上又全局数组OSCfg_TickWheel[]和全局变量OSTickCtr构成。#define OS_CFG_TICK_WHEEL_SIZE 17uOS_TICK_SPOKE OSCfg_TickW

2020-05-14 16:56:01 751

原创 RTOS学习之旅(五)(ucosIII 支持多优先级)

之前OS还没有优先级,只能任务切换。在这之后加入了优先级,数字优先级越小,逻辑优先级越高。其实,优先级这里部分就是对之前代码添加一些优先级有关的信息,其他不变。1.定义优先级相关全局变量在支持任务多优先级的时候,需要在 os.h 头文件添加两个优先级相关的全局变量。//当前优先级OS_EXT OS_PRIO OSPrioCur//最高优先级OS_EXT OS...

2020-05-13 09:47:46 305

原创 RTOS学习之旅(四)(ucosIII 优先级表 就绪列表)

在 uC/OS-III 中,任务被创建后,任务的 TCB 会被放入就绪列表中,表示任务在就绪,随时可能被运行。就绪列表包含一个表示任务优先级的优先级表,一个存储任务 TCB 的 TCB 双向链表。1.优先级表1.1优先级表介绍优先级表实质上是一个数组。在os_prio.c中定义。CPU_DATA OSPrioTbl[OS_PRIO_TBL_SIZE];数组类型为 CPU_DATA...

2020-05-03 17:23:23 866

原创 RTOS学习之旅(三)(ucosIII 任务时间片 阻塞延时与空闲任务 时间戳)

在之前的代码写的任务切换,虽然实现了任务切换,但是还是没做到双任务同时运行。如果在这个基础上加入Systick中断,就可以实现双任务时间片运行,即每个任务运行时间是一样的。1.Systick简介RTOS 需要一个时基来驱动,系统任务调度的频率等于该时基的频率。通常该时基由一个定时器来提供,也可以从其它周期性的信号源获得。刚好 Cortex-M 内核中有一个系统定时器SysTick,它内嵌在 N...

2020-05-01 18:17:25 976

原创 RTOS学习之旅(二)(ucosIII OS初始化 任务切换)

之前学习了任务的创建和TCB模块,在这之前还有就是系统是初始化。1.OS系统初始化OS 系统初始化一般是在硬件初始化完成之后来做的,主要做的工作就是初始化uC/OS-III 中定义的全局变量。OSInit()函数在文件 os_core.c。void OSInit(OS_ERR *p_err){ /*系统用一个全局变量 OSRunning 来指示系统的运行状态,刚开 始默认STOPPED...

2020-04-27 14:13:52 441

原创 RTOS学习之旅(一)(ucosIII 任务初始化创建及TCB)

最近有时间学习操作系统方面的知识,所以做些笔记加深印象。在这方面确实是小白了。学的是野火的资料。这个资料确实不错,但是有些地方还是要自己进行总结归纳进行学习。我总结这个有点多,慢慢看可以看懂的。1.前后台系统和多任务系统1.1 前后台系统之前接触的比较多的是前后台系统,就是外部事件的响应在中断里面完成,事件的处理还是回到轮询系统中完成,中断在这里我们称为后台,main 函数里面的无限循环...

2020-04-25 16:35:53 854

原创 详解二叉树非递归三种遍历

二叉树遍历有递归,也有非递归。其实他们之前本质是一样的,非递归只是将递归的步骤一步步写出来,所以看了非递归代码之后回想递归代码也更好理解。一.前序遍历现在有一棵二叉树,如图(画的不是很好,好像有点歪)如果是递归代码:就是输出,然后左递归,右递归就结束了。其实递归就是栈的应用,在这里要引入栈。假如根结点地址为T,思路就是遍历左孩子入栈,并输出。当左孩子输出完,取栈顶,找右孩子。再遍历右孩...

2020-03-31 15:55:00 274

原创 二叉树和二叉树递归遍历实现

之前的数据结构都是线性的,都是一对一的线性结构。其实还有一对多的结构,那就是树。一.树树:树是n(n>=0)个结点的有限集注:n>0时根结点是唯一的,不会有很多根结点。子树个数没有限制,但是是互不相交的。一些概念结点的度:结点拥有的子树数称为结点的度,树的度是树内各结点的度最大值。  比如刚刚这个图,D结点的度为3,B结点的度为1。树的度为3深度:树中结...

2020-03-30 16:22:34 1238

原创 结构体指针的一些问题(包括二级指针)

结构体指针在平时工程中用的还是很多的,但是有时候如果有类似与二级的指针,可能就会有点乱。结构体指针一般来说我们先从定义结构体开始比如:struct stduent{ int num; char *name; char sex; float score;}student1;或者我们可以用typedef来重命名一下typedef struct stdue...

2020-03-27 21:07:11 1005

原创 Dev C++中string和char的一些问题及deprecated conversion from string constant to ‘char*’

最近在dev c++上写字符串程序。遇到一些问题,string和char都是字符类型的。但是在dev里面使用还有点差异。关于string首先,我先写了这个代码#include<stdio.h>#include<string.h>int main(void){ string s = "hello"; printf("%s",s); return 0;} ...

2020-03-19 17:36:56 2572

原创 队列的链式存储结构及代码实现

之前使用的顺序存储的队列,但是就是哪怕是循环队列,也可能会遇到数组溢出的问题。这时,使用链式存储会是一个更好的选择。一.链队列队列的链式存储结构,其实就是线性表的单链表,只不过只能尾进头出,简称为链队列。将头指针指向链队列的头结点并不是front指针直接指向第一个元素。二.链队列实现链队列的存储结构,这里申明两个结构体,一个是链表的,一个是队列的。typedef int QElem...

2020-03-19 15:24:19 1030

原创 队列及循环队列和代码实现

之前我们提到了栈。栈是一种线性表,它是先进后出的,是FILO。同时我们也存在一种线性表,是先进先出的。那就是队列。一.队列队列在平时我们生活中还是比较常用的。比如在操作系统中,就是这样的。哪些操作先进入的,哪些操作就先实现。队列是只允许一端进行插入操作,另一端进行删除操作的线性表。允许插入的一端称为队尾,允许删除称为队头。如果是普通队列...

2020-03-19 14:31:53 330

原创 链栈及代码实现

之前提到了顺序栈,我们可以方便的存取元素,不过栈的顺序存储结构要求我们事先申请好固定大小的内存空间用于存储数据,在使用的过程中无法再动态地对栈的空间进行扩容。这样使得在增加元素时不能很随意,还得判断空间是否够用。一.栈的链式存储对链栈来说,基本不存在栈满的情况,除非内存没有可以申请的空间了。链栈的结构和链表非常相似。只是相当于在链表前面的上面有个会移动的结构体指针。链栈存储:type...

2020-03-17 15:56:15 972

原创 栈的顺序存储及代码实现

栈是在数据结构中经常能遇到的,在我们平时也能遇到。比如当我们在打断点调试时,经常能遇到堆栈,先调用的后出来。或者网页的后退键也是栈的应用。一.栈及其初始化栈是限定仅在表尾进行插入和删除操作的线性表。我们把允许插入的一端称为栈顶,另一端称为栈底。栈称为先进后出,简称FOLI栈也是线性表,也有前驱后继关系。线性表的表尾是栈顶栈插入操作叫进栈,入栈栈删除操作叫出栈栈的结构栈的顺序...

2020-03-15 18:17:23 912

原创 静态链表及代码实现(包括一些操作)

线性链表对于后续结点是通过指针来指向的。有些人容易在指针那里搞混。那么其实用数组来代替指针。之前也是听说过,但是具体也没用过。一.静态链表及初始化静态链表里面每个元素都有两个数据域,其中cur是用来存储下个元素的位置。静态链表的存储结构typedef int Status;typedef int Elemtype;typedef struct{ Elemtype data; int...

2020-03-15 15:20:36 417

原创 指针和Linklist * L与Linklist L

在C中我们经常会遇到指针,通常大家看代码时也能看到很多指针,这里就总结一下有些指针用法和区别。指针数据对象存储在内存中的一个指定数据类型的数值或字符串,它们都有一个自己的地址,而指针便是保存这个地址的变量。也就是说:指针是一种保存变量地址的变量。指针声明 //法一:直接声明 int x = 1; int *p = &x;   //方法2:动态分配内存给指针 int...

2020-03-05 22:10:21 1355

原创 线性表链式存储的一些操作(创建,添加,删除)

之前总结了顺序存储,现在总结一下链式存储。其实就是链表,链表在实际中用的比较多。一.链式存储之前的顺序存储,在插入和删除时需要移动大量元素。主要原因是因为这些元素是连续存储的,但同时在查找时也是他优点。如果相邻之间不是连续的,只要知道下一个元素位置,这样插入删除就方便多了。这就是链表。在链式存储中,除了要存储元素信息外,还要存储后继元素存储地址。一般链表结构就像上面这样,然后我们可以定...

2020-03-05 17:29:23 2397

原创 线性表顺序存储的一些操作(初始化,添加,删除)

最近有时间学一些自己想学的,就找来看看数据结构。看的是大话数据结构。之前学数据结构是大一时候,现在看这个还可以,没那时候学的累。但是还是需要进行一些总结,以免自己会忘记。虽然大部分和书上差不多,但是不自己动手敲,还是会有问题。或者有些地方自己这样写会好理解一些。一.线性表顺序存储线性表的顺序存储结构,指的是用一段地址连续的存储单元依次存储线性表的数据元素。接下来我们对线性表结构进行了解...

2020-03-03 17:46:08 842

原创 MQTT的连接和心跳

最近学习MQTT协议和与Onenet平台的数据交互。MQTT中有几个方法,想借此机会将每个方法的流程梳理一下一.MQTT数据包结构在MQTT协议中,一个MQTT数据包由:固定头(Fixed header)、可变头(Variable header)、消息体(payload)三部分构成。MQTT数据包结构如下: (1)固定头(Fixed header)...

2020-02-22 12:23:06 1945

原创 网关监控点轮询流程

最近在学习监控点的轮询。因为网关不能一直在处理各个设备的数据,所以需要监控点上报数据,这时网关就需要隔一段时间对监控点进行轮询。(因为刚开始学,所以有错误希望能够批评指出)1.监控点轮询:1.1监控点开始轮询和一些初始判断程序进行到send_broad_time_sync(),这是关于时钟控制的函数,用于定时判断的。在这个函数里面当达到500ms时就report...

2020-02-19 13:07:43 1298

原创 LoRa 学习之网络层(一) JOIN和LINK

当之前的射频初始化之后,还需要网络层初始化。还是在SMPL_Init()中初始化。 下面是一些比较重要的函数 同样在SMPL_Init()中还初始化了网络层的一些参数 在nwk_nwkInit()中,对地址,队列,帧进行初始化以及一些...

2020-02-13 19:38:22 741

原创 函数指针和回调函数

最近做项目遇到一个问题。对继电器进行控制,有三个通道,每个通道都表示一个状态,那么总共有8种状态。我们需要8个if-else进行判断或者要用switch结构。后想到一个函数指针数组方法进行判断。 函数指针 在程序中定义了一个函数,在编译时系统就会为这个函数代码分配一段存储空间,这段存储空间的首地址称为这个函数的地址。而且函数名表示的就是这个地址。既然是地...

2019-11-24 12:35:32 114

原创 LoRa学习之射频层(节点)

最近学习lora模块知识。对此进行总结 lora部分主要分为四层:底层(外设),射频层,网络层,应用层 APP NWK MRFI BSP BSP:...

2019-11-03 13:59:52 689

空空如也

空空如也

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

TA关注的人

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