- 博客(31)
- 收藏
- 关注
原创 记:又一次离谱的内存溢出
问题描述先描述一下整个过程吧:最近在做的一个项目,用的华大的单片机,一款国产的MCU,主要做的是低功耗方面的,外加NB-IoT;当时修改过代码之后下载到设备上面,发现设备休眠之后就再也无法唤醒了,直到看门狗复位,而且设备不进入休眠的话就不会有问题。于是我拿上一个版本的代码跟当前的代码进行比较,对比之后发现只是修改了CRC校验的长度,如下图(只是把 uint8_t 的 DataLen,改成 uint16_t),当时实在想不到把 uint8_t 的数据类型改成 uint16_t 能发生什么错误,一度以为是.
2020-07-26 19:55:44
373
原创 openWrt编译第一个“Hello_world”应用程序IPK安装包
安装openWrt固件我用的是ubuntu,首先需要在ubuntu上安装openWrt的固件,至于安装固件的步骤这里就不多说了。hello_world程序准备我上一篇博客中有关于共享文件夹的设置,在windows中新建一个目录,可以和ubuntu共享一个文件夹,不需要用winscp把windows上的文件再传输到ubuntu上,这中方法还是比较麻烦的;使用notepad++编写一个简单的 hello_world.c 程序,然后将hello_world.c 文件保存在 @/hello_wor.
2020-07-19 21:05:26
3797
1
原创 VMware Tools的安装和使用
之前在用虚拟机安装ubuntu进行学习的时候,有一些文件需要在windows和linux之间进行传输的。一开始我用WinSCP进行文件传输的,但觉得还是不太方便。偶然听说了共享文件夹,然后我就在网上搜了一些这方面的资料,并根据网上的方式自己去尝试一下,以下就是我成功之后的总结:首先打开VMware,选中你安装的Linux系统,我装了一个CentOS和ubuntu,以下选中ubuntu:选择上方的虚拟机->安装VMware Tools,下方图示中我显示的重新安装,如果没装过,显示的应该是安装
2020-07-12 19:33:47
3421
原创 物联网协议----MQTT整理
MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议),是一种基于发布/订阅(publish/subscribe)模式的“轻量级”通讯协议,该协议构建于TCP/IP协议上,由IBM在1999年发布。MQTT最大优点在于,可以以极少的代码和有限的带宽,为连接远程设备提供实时可靠的消息服务。做为一种低开销、低带宽占用的即时通讯协议,使其在物联网、小型设备、移动应用等方面有较广泛的应用。1.MQTT协议特点MQTT是一个基于客户端-服务器...
2020-07-12 17:04:58
404
原创 复杂链表的复制
以下这个题目是我在剑指offer上面看到的,当时刚看题目我也没做出来。实在想不出来,看了题解后才做出来,为了加深印象,在博客中我再仔细做一遍,用c++ 代码实现。题目描述:输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个指向链表中任意一个节点或NULL),返回结果为复制后复杂链表的head。节点结构:class Node{public: Node(int _val)//构造函数,初始化节点 { this->val = _val;
2020-07-03 11:34:21
711
转载 在浏览器中输入URL之后,都发生了什么我们不知道的事情
记录一下,当时我在刷抖音,突然刷到一条关于浏览器输入网址的内容,于是好奇心驱使我关掉了手机,偷偷打开电脑在浏览器输入www.xxxx.com(开个玩笑。。。)。以下是我转载的别人的文章,并不是我总结的。一个数据包在网络中的心路历程。每个阶段都有数据包的「心路历程」,我们一起看看它说了什么?正文接下来以下图较简单的网络拓扑模型作为例子,探究探究其间发生了什么?01 孤单小弟 —— HTTP浏览器做的第一步工作是解析 URL首先浏览器做的第一步工作就是要对URL...
2020-06-27 20:03:05
304
原创 记录一次给自己挖坑的经历:关于结构体内存溢出的问题
先描述一下问题吧,调试单片机程序,用的是华大的一款国产单片机:HDSCl130,专门用于做低功耗的单片机,只开启rtc定时唤醒的话,功耗在0.5uA左右,功耗已经算是很低了,这就不多说了,还是说重点吧。今天在调试设备的时候,用的NB模块联网,联网成功后我把设备断电了,然后重新上电。按理说应该会有一个重新联网的过程,但是我看jlink打印信息,竟然没有执行重新联网。正常情况下设备重新上电,单片机复位,将所有的变量重新恢复到初始值,只要恢复到初始值,NB模块就会重新联网,我debug调试之后发现在参数确实每
2020-06-17 00:24:04
1110
原创 野指针和悬空指针
提到C语言,大部分程序员可能很自然就会想到指针二字,是的,作为C语言的核心和灵魂,它的地位就不再赘述了。接下来说一下指针中的两个特有名词:“悬空指针”和“野指针”。悬空指针C语言中的指针可以指向一块内存,如果这块内存稍后被操作系统回收(被释放),但是指针仍然指向这块内存,那么,此时该指针就是“悬空指针”。下面这段C语言代码是一个例子,请看:void *p = malloc(size);assert(p);free(p); // 现在 p 是“悬空指针”C语言中的“悬空指针”会引发不
2020-06-15 23:51:58
263
原创 结构、位段、联合
很久之前在书上看过位段这个词,用在结构体中,我在实际编程中从来没用过。今天在做编程练习的时候定义结构体突然想到了位段,然后具体怎么用的实在是想不起来了,好奇心使我越来越坐不住了,然后我就翻开了之前看的书。废话不多说,本来写博客的目的就是为了让自己忘记的时候回来看一看。。。。。对于什么是结构体我就不多说了,直接写我要记住的内容:结构体的自引用如何在一个结构体内部包含一个类型为该结构体本身的成员呢?先举个例子看看:struct SELF_REF1{ int a; struct
2020-06-07 21:57:19
287
转载 Makefile文件
makefile 介绍make命令执行时,需要一个 makefile 文件,以告诉make命令如何去编译和链接程序。首先,用一个示例来说明makefile的书写规则。这个示例来源于gnu的make使用手册,在这个示例中,我们的工程有8个c文件,和3个头文件,现在要写一个makefile来告诉make命令如何编译和链接这几个文件。规则是:1)如果这个工程没有编译过,那么所有c文件都要编译并被链接。2)如果这个工程的某几个c文件被修改,那么只编译被修改的c文件,并链接目标程序。3)如果这个工
2020-06-06 22:22:00
157
原创 Shell 变量
shell变量定义变量时,变量名不加美元符号($,PHP语言中变量需要),如:my_name="iBGG"注意,变量名和等号之间不能有空格,这可能和你熟悉的所有编程语言都不一样。同时,变量名的命名须遵循如下规则:命名只能使用英文字母,数字和下划线,首个字符不能以数字开头。 中间不能有空格,可以使用下划线(_)。 不能使用标点符号。 不能使用bash里的关键字(可用help命令查看保留关键字)。有效的 Shell 变量名示例如下:iBGGLD_LIBRARY_PATH_va
2020-06-01 22:59:23
297
转载 记录:排序算法
心血来潮,想找几个排序算法看看,于是在网上找了这几个排序算法,前人总结过,后人乘凉,真好。在此记录一下,等以后想起来再看看,不至于再去网上一个一个找。 class Sort{public : //每个算法都已升序为例 //冒泡排序 //算法思想:比较相邻的两个元素,如果前一个数比后一个数大,两者交换,一轮过后最大的数位于数组末尾,经过n-1轮 //算法分析:O(n2)复杂度 void bubbleSort(int *array,int begin,in
2020-05-28 22:22:26
189
原创 c# 以管理员身份打开exe可执行文件
之前用c#写过一个上位机,其中有一个需求是能使用cmd命令提示符的ping指令对远程设备执行ping命令,对带有IP地址的远程设备进行ping,以此判断设备是否能在网络中建立通信通道。但是cmd命令提示符需要以管理员的身份才能执行成功,于是我就在网上查找资料,最后找到了方法。 在此记录一下,防止以后忘记了还要百度找。首先需要以管理员的身份运行c#工程,然后打开visual studio - 解决方案资源管理器 -右键项目名称 - 属性 ,弹出下面的窗口点击选择左侧的“安全性”,在“启用Click
2020-05-25 22:09:36
2533
原创 C++ new 和 malloc 内部的实现方式的区别
new 和 malloc 内部的实现方式有什么区别?new 的功能是在堆区新建一个对象,并返回该对象的指针。所谓的【新建对象】的意思就是,将调用该类的构造函数,因为如果不构造的话,就不能称之为一个对象。而 malloc 只是简单的分配一块内存,在内存中并没有对象的概念,如果用 mallco 在堆区创建一个对象的话,是不会调用构造函数的。严格说来用 malloc 不能算是新建了一个对象,只能说是分配了一块与该类对象匹配的内存而已,然后强行把它解释为【这是一个对象】,按这个逻辑来看,也不存在构造
2020-05-20 23:27:28
309
原创 C++ 总结各种容器的用法
容器的概念第一,我们需要知道什么是容器,官方给出的定义往往比较抽象,对于我来说看了也是不明白,不过这里还是给出官方定义。C++ 官方文档中容器被定义为:在数据存储上,有一种对象类型,它可以持有其它对象或指向其它对像的指针,这种对象类型就叫做容器。很简单,容器就是保存其它对象的内容,也即为数据;即为数据,自然而然也就包含了其对应处理数据的方法,因为这些方法在程序的设计上会经常被用到,所以容器也体现了一个好处, 就是“容器类是一种对特定代码重用问题的良好的解决方案”。容器还有另一个特点就是可以扩展。一般
2020-05-20 22:41:26
1085
原创 MODBUS通信协议
1. 主从模式RS-485上的软件层协议ModBus主要依赖于主从模式。主从模式是指在半双工通讯方式上,2个或者2个以上的设备组成的通讯系统中:(1) 至少且只有一个主机,其他的都是从机(2) 不管任何时候,从机都不能主动向主机发送数据(3) 主机具有访问从机的权限,从机不可以主动访问从机,任何一次数据交换,都要由主机发起(4)不管是主机还是从机,系统一旦上电,都要把自己置于...
2019-03-17 19:11:53
791
原创 stm32控制步进电机转动
驱动方式为A-AB-B-BC-C-CD-D-DA-A使用延时函数实现主函数#include "dj.h"#include "delay.h"#include "sys.h"#include "key_led.h" //ALIENTEK miniSTM32¿ª·¢°åʵÑé1//ÅÜÂíµÆʵÑé //¼¼ÊõÖ§³Ö£ºwww.openedv.com//¹ãÖÝÊ...
2019-01-18 11:33:10
3213
原创 堆栈
bss段: bss段(bss segment)通常是指用来存放程序中未初始化的全局变量的一块内存区域。 bss是英文Block Started by Symbol的简称。 bss段属于静态内存分配。 data段: 数据段(data segment)通常是指用来存放程序中已初始化的全局变量的一块内存区域。 数据段属于静态内存分配。 text...
2018-12-21 19:09:56
205
原创 STM32时钟系统
STM32 STM32的 时钟系统比较复杂,不像简单的 时钟系统比较复杂,不像简单的 时钟系统比较复杂,不像简单51 单片机一个系统时钟就可以解决切。于 单片机一个系统时钟就可以解决切。于 单片机一个系统时钟就可以解决切。于 是有人要问,采用一个系统时钟不很简单吗?为什么 是有人要问,采用一个系统时钟不很简单吗?为什么 STM32 要有多个时钟源呢? 要有多个时钟源呢? 因为首先 STM32 ST...
2018-12-16 17:46:46
441
原创 漏水节点中LoRa低功耗的设计
通常我们提到低功耗的话都会想到什么什么耗电比较少,省电什么的。事实确实是这样的,不过低功耗的设计思想在不同的项目中其用法也不一样。 最近我有在做一个漏水检测的项目,这是一个大项目中的子项目,顾名思义,就是用来检测是否漏水的。那既然用来检测是否漏水就要把该检测节点放在水管最容易发生漏水的地方。在这种环境下,设备节点首要条件就是防水,当然,这不是重点。重点是这种节点需要做...
2018-11-23 17:25:33
1130
原创 ch376文件管理芯片,关于枚举U盘内所有文件名
之前做过一个读取U盘内指定文件内数据的项目。读取方式有很多的限制,比如在程序中文件名是定死的,只有当程序中写的文件名跟U盘内的文件名一模一样时,才能从U盘内读取数据。这样,后期需要修改文件名的话还要在程序中修改成一模一样的名字,这样是很不方便的。 我在寻找解决办法的时候看了看ch376数据手册,在这上面查到了有关方面的资料,找到了下面一段话: 上面这段...
2018-11-14 19:57:18
2298
原创 stm32软件触发的按键长按与短按区分
/* ------------------------------------------------------------------------------------------------ * @fn KeyCoolPressTimeHandle * * @brief 按键的检测 * * @param none * * @retur...
2018-11-11 10:44:18
2967
原创 指针符号*和取址符号&
之前对*和&符号一直理解的比较浅显。只知道: *p好像表示的是一个指针; &p表示的是一个地址。 然而这次当遇到了下面这个情况的时候: int a = 10; int *b = &a;printf(“%d\n”, a); printf(“%d\n”, &a); printf(“%d\n”, b); printf(“%d\n”, *b);结果:...
2018-10-28 17:48:19
6357
4
原创 stm32内存管理分配
bss段: bss段(bss segment)通常是指用来存放程序中未初始化的全局变量的一块内存区域。 bss是英文Block Started by Symbol的简称。 bss段属于静态内存分配。 data段: 数据段(data segment)通常是指用来存放程序中已初始化的全局变量的一块内存区域。 数据段属于静态内存分配。 text...
2018-10-28 17:34:29
1051
原创 SIMPLICI 加密机制 XTEA 算法
一、帧结构为了支持加密,相比未加密数据帧,对帧格式进行两处更改。1、当帧被加密时,设置加密有效位。即网络层帧头第一个字F_ENCRYPT_OS_MSK置1.。2、在网络层帧头往后加3个字节。如下所示,分别为CTR、ICHK和MAC,CTR用于存储加密计数器初始值,ICHK用于存储FCS(帧校验序列),这里默认使用求和校验。MAC用于存储消息认证码。这将会使允许的有效最大应用程序有效负载减...
2018-10-21 18:43:40
937
原创 ch376读取数据流程
概述CH376 支持 USB 设备方式和 USB 主机方式,并且内置了 USB 通讯协议的基本固件,内置了处理Mass-Storage 海量存储设备的专用通讯协议的固件,内置了 SD 卡的通讯接口固件,内置了 FAT16 和FAT32 以及 FAT12 文件系统的管理固件,支持常用的 USB 存储设备(包括 U 盘/USB 硬盘/USB 闪存盘/USB 读卡器)和 SD 卡(包括标准容量 SD ...
2018-08-19 17:24:51
3302
2
原创 ch376文件管理芯片
CH376是文件管理控制芯片,用于单片机系统读写U 盘或者SD 卡中的文件。CH376支持USB设备方式和USB主机方式,并且内置了USB通讯协议的基本固件,内置了处理Mass-Storage海量存储设备的专用通讯协议的固件,内置了SD卡的通讯接口固件,内置了FAT16和FAT32以及FAT12文件系统的管理固件,支持常用的USB存储设备(包括U盘/USB硬盘/USB闪存盘/USB...
2018-08-05 16:54:30
1134
原创 stm32与ch376s芯片硬件连接用于读取U盘文件
我在csdn上也搜索过一些关于ch376芯片的用法,不过大多都非常笼统。最近我也在做关于用32单片机与ch376连接读取U盘文件项目的一部分。在某宝买了一块ch376模块,看过了给的数据手册,有一部分收获。不过给的例程都是用51写的,对于刚学32的我显然有些吃力,幸好有师兄帮我把部分51的c程序改成了32的。废话不多,我们就直接开始正文。 ch376数据传输支持...
2018-07-29 13:17:18
9894
7
原创 USB之ch376s数据手册
最近师兄交给我一个项目,虽说刚学嵌入式起步,但上手一个项目怎说都是最好的快速学习方式。因为刚了解ch376s管理U盘的数据,所以先是看了ch376s的数据手册。那我就把数据手册直接放上来吧。。。。 1、概述CH376 是文件管理控制芯片,用于单片机系统读写 U 盘或者 SD 卡中的文件。CH376 支持 USB 设备方式和 USB 主机方式,并且内置了 USB 通...
2018-07-25 22:01:47
5066
原创 C语言中的printf()函数用法
近段时间我在学习stm32的过程中,发现自己的C语言基础不够扎实,师兄也推荐我去重新温习本科时学的C语言知识以便更好得去探索stm32的知识。温故而知新,再复习了printf()函数用法我也收获不少,下面就介绍下printf()函数的一些用法和知识 printf()函数是最常用的格式化输出函数,其原型为: int printf( char * format, ...
2018-07-22 15:12:31
4097
原创 IIC通信
IIC通信也是一种通信方式,我上一篇写到关于串口通信的,和这个iic很类似,都是设备之间进行通信的桥梁。串口和iic两种通信的硬件连线都是用两根线,所不同的是串口的线一根用来接收数据,另一根用来发送数据。而iic通信的两根线,一根是时钟线,用来保持两个通信设备之间的时钟同步,另一根是数据线,包含接收和发送。什么时候收什么时候发则由时钟线来决定。 另外,iic也分...
2018-07-18 19:00:19
1053
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人