- 博客(77)
- 收藏
- 关注
原创 开源项目-嵌入式领域一千个经典问题计划
一千个问题计划文章目录一千个问题计划一、项目背景二、核心模块三、项目维护1.项目地址一、项目背景本项目主要用于讨论技术人的职业发展路线,搭建嵌入式领域的知识体系,梳理技术路线。通过问答的形式展现出来,欢迎贡献问题和答案,问题要经典和核心,答案要通俗易懂,体现底层原理。二、核心模块职业发展路线操作系统计算机网络编程语言【C】编程语言【Python】数据结构设计模式计算机体系结构软件工程WiFi协议蓝牙技术编译原理三、项目维护1.项目地址一千个问题计划...
2021-05-15 01:16:27
798
7
原创 MQTT协议入门
一、前言 MQTT协议可以说是目前应用最广的物联网应用层协议,MQTT解决了物联网中的一个最基础问题,即设备和设备、设备和云端服务之间的通信。主要应用场景是可以为大量低功耗、网络环境不可靠的物联网设备提供通信保障。二、MQTT协议基本特点: 实现简单 提供数据传输的QoS 轻量级、占用带宽低 可传输任意类型的数据 可保持的回话(Session) 三、MQTT协议特性 基于TCP长连接的应用层协议,; 基于Client/S...
2021-02-25 01:55:17
7467
15
原创 嵌入式定时器专栏
文章目录前言一、定时器的作用?二、定时器几个概念1.硬件定时器2.软件定时器3.系统定时器4.SysTick定时器5.实时时钟(RTC)三、总结前言在嵌入式系统中,定时器。一、定时器的作用?示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。二、定时器几个概念1.硬件定时器一般指定时器时基是由硬件中断产生的,2.软件定时器可以通过循环方式或者OS中实现3.系统定时器4.SysTick定时器5.实时时钟(RTC)三、总结提示:这里对文章进行总
2021-02-14 23:24:39
3934
原创 LwIP协议栈浅析
一、LwIP简介 LwIP(Light weight IP)是一种轻量级的TCP/IP协议栈,其设计初衷是用少量的资源消耗实现一个较为完整的TCP/IP协议栈,有无操作系统均可运行。LwIP 具有主要特性: 1. 支持 ARP 协议(以太网地址解析协议)。 2. 支持 ICMP 协议(控制报文协议),用于网络的调试与维护。 3. 支持 IGMP 协议(互联网组管理协议),可以实现多播数据的接收。 4. 支持 UDP 协议(用户数据报协议)。 5. 支持 ...
2020-12-13 23:43:31
15509
原创 RT-Thread内核移植初探
文章目录前言一、什么是内核移植?二、怎样进行内核移植?2.1 CPU架构移植2.1.1 实现全局中断开关2.1.2 实现线程初始化2.1.3 实现上下文切换2.1.3.1 实现PendSV中断2.1.4 实现时钟节拍2.2 BSP移植2.2.1 为什么要进行BSP移植2.2.2 BSP移植的主要工作三、移植RT-Thread3.1 移植前准备3.1.1 准备裸机代码&RT-Thread源码3.1.2 将rt-thread源码整合到STM32的裸机工程3.2 硬件适配3.2.1 修改平台相关的文件3.
2020-11-13 01:42:09
1406
原创 RT-Thread内核浅析
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录前言一、RTOS概述二、RTOS介绍1.RTOS内核&实时操作系统三、RTOS内核3.1 对象管理3.2 线程管理3.2.1 线程3.2.2 调度器3.2.3 线程栈3.2.3 线程调度3.3 时钟管理3.3.1 概念介绍3.4 内存管理3.4.1 概念介绍3.5 中断管理3.5.1 PendSV系统调用3.5.2 中断向量表3.6线程间同步&通信3.6.1 线程间同步3.6.2 线程间通信四、问题答疑4.1 什么
2020-11-11 00:49:11
4580
1
原创 用omnipeek抓取配网组包
用omnipeek工具抓取配网组播包一、背景介绍二、环境准备2.1 工具准备2.2 omnipeek 和wireshark 有什么区别?2.3 omnipeek使用注意事项三、分析过程3.1 抓包工具使用3.2 如何查找源设备3.3 数据过滤写在最后一、背景介绍IOT行业的各位都知道,业内有两种常见的配网方式,smartconfig配网和ap配网,这两种配网方式各个厂家的具体实现各不相同,但是原理大同小异。具体原理网上有很多详细说明,可自行搜索,这里不再具体的讲述。最近办公室经常有同事反馈,手里的wi
2020-05-29 02:51:22
2489
2
原创 无法远程连接阿里云mysql数据库的解决办法
背景:使用阿里云服务器 ubuntu 16.04,mysql5.7问题:远程连接mysql数据库报错:ERROR 2003 (HY000): Can't connect to MySQL server on '120.78.150.110' (110)分析:1. 默认情况下,安装在阿里云服务器上的mysql 不支持远程连接,需要到 /etc/mysql/mysql.conf.d/ 目录下将
2017-11-30 00:33:39
12308
转载 阿里云服务器ubuntu 16.04 安装mysql
1.更新系统sudo apt-get update 2、安装mysql-serversudo apt-get install mysql-serversudo apt-get isntall mysql-clientsudo apt-get install libmysqlclient-dev3、使用如下命令查询是否安装成功:sudo netstat -
2017-11-29 00:38:06
3084
原创 C语言中,如何通过函数来改变一个变量的值
最近看面试题,遇到一些关于通过函数改变一个变量的值得问题,现在终结一下:先看下面一段代码:#include #include void GetMemory(char *p){ p=(char*)malloc(100);}void Test(void){ char *str=NULL; GetMemory(str); strcpy(str,"he
2016-12-21 10:02:21
12883
原创 关于全局变量的初始化问题与野指针
今天遇到一个小问题,声明一个全局的指针变量p1,并且通过malloc动态分配内存的方法,将一个1000Byte内存的首地址赋给p1,代码:char* p1=malloc(1000);如下图:但是使用 gcc 命令编译后报出如下错误(使用C99标准)看了别人的博客后才知道是如下原因:c99标准中规定:全局变量和static变量的初始化需要指定一个常量,不能是一个非常量的表
2016-12-20 15:45:34
5419
原创 关于STM32的几种输入模式以及外部中断的配置
最近做毕业设计,需要用按键来触发外部中断。实验的时候是正常的,但是换了个核心板以及用上自己做的PCB电路板后,出现了一些问题。问题如下:要求:将连接按键的IO口配置为上拉输入,按键一端接IO口,一端接地,即当按键按下后,该IO口会产生一个下降沿,触发下降沿中断。问题:将相应的IO口配置好后,测了引脚的的电压,并不是3.3V左右,而是0.1V左右。于是猜想:1. 外围电路对IO口产生了影
2016-12-17 21:07:56
12033
转载 KEIL MDK编译代码,产生的几个关键信息:Code RO-data RW-data ZI-data
KEIL RVMDK编译后的信息 Program Size: Code=86496 RO-data=9064 RW-data=1452 ZI-data=16116 Code是代码占用的空间,RO-data是 Read Only 只读常量的大小,如const型,RW-data是(Read Write) 初始化了的可读写变量的大小,ZI-data是(Zero Initialize)
2016-12-15 20:45:01
950
转载 字节对齐详解
引言 考虑下面的结构体定义:1 typedef struct{2 char c1;3 short s; 4 char c2; 5 int i;6 }T_FOO; 假设这个结构体的成员在内存中是紧凑排列的,且c1的起始地址是0,则s的地址就是1,c2的地址是3,i的地址是4。 现在,我们编写
2016-11-12 11:25:43
1101
转载 Qt资源
Qt官网Qt英文官网:http://qt.nokia.com/Qt中文官网:http://qt.nokia.com/title-cn?set_language=zh&cl=zhQt开源项目官网:http://qt-project.org/Qt Quick官网:http://qt.nokia.com/qtquick-cn/诺基亚开发者社区中文:http:/
2016-11-12 09:21:09
462
转载 嵌入式系统基础知识及常用接口终结
转载自:http://m.21ic.com/embed/2016-08-24/65063.htm本文主要介绍嵌入式系统的一些基础知识,从嵌入式系统基础,包括嵌入式系统的定义、嵌入式系统的组成、实时系统、逻辑电路基础以及接口技术两方面介绍,希望对各位有帮助。嵌入式系统基础1、嵌入式系统的定义(1)定义:以应用为中心,以计算机技术为基础,软硬件可裁剪,适应应用系统对
2016-11-07 20:24:45
3636
转载 一个程序在内存中的分析
博客转载自:http://www.voidcn.com/blog/yusiguyuan/article/p-4628357.html内存管理是操作系统的核心;它对于程序员和系统管理员都很关键。在接下来的几篇文章里面我将对内存的关键技术做谈论,但是不会远离其本质。然而概念很普通,例子多半来自32位X86系统的LINUX和Window操作系统。这第一篇文章谈论程序在内存中如何存放。
2016-11-07 19:52:14
684
原创 解决Qt中 GDB调试器已停止工作的问
在用GDB调试Qt 中的应用程序时,弹出了“GDB已停止工作”这样的对话框,始终无法解决。开始以为是路径不对,查看包含路径后发现是对的。于是在网上看到了网友的方法,在网上重新下载GDB文件,然后把路径改为新文件,最后成功。链接如下:点击打开链接 http://qt-project.org/wiki/QtCreatorBuildGdb下载Downloads中的GDB
2016-11-07 17:05:42
8189
2
原创 C++中如何动态分配二维数组
一直对二维数组 动态分配问题比较模糊,今天来终结一下。我们一般使用二维数组可以直接定义如下:#includeusing namespace std;int main(){ int array[5][5];}但是有时候我们不知道数组的维数,C++不允许直接用变量作为维数,所以就要用到动态分配。我们先看看如何动态申请一个一维数组。int num;int* arr
2016-11-06 20:42:16
12463
4
转载 C++ 中new和delete浅析
在 C++ 中,你也许经常使用 new 和 delete 来动态申请和释放内存,但你可曾想过以下问题呢?new 和 delete 是函数吗?new [] 和 delete [] 又是什么?什么时候用它们?你知道 operator new 和 operator delete 吗?为什么 new [] 出来的数组有时可以用 delete 释放有时又不行?…如果你对这些问题都有疑问的话,不妨
2016-11-06 19:48:25
345
转载 c语言中的条件编译指令
预处理程序提供了条件编译的功能。 可以按不同的条件去编译不同的程序部分,因而产生不同的目标代码文件。这对于程序的移植和调试是很有用的。条件编译有三种形式,下面分别介绍:1. 第一种形式:#ifdef 标识符程序段1#else程序段2#endif它的功能是,如果标识符已被#define命令定义过则对程序段1进行编译;否则对程序段2进行编译。如果没有程序段2(它为空),本格
2016-11-06 10:37:17
785
转载 关于单片机程序运行的一些理解
关于程序的执行,以前想的不多,没有意识到一个程序在运行时,从哪里读指令,数据又写在哪里。最近在看CSAPP时这个念头经常在脑袋中晃荡。从单片机上知道,在上电的那一刻,MCU的程序指针PC会被初始化为上电复位时的地址,从哪个地址处读取将要执行的指令,由此程序在MCU上开始执行(当然在调用程序的 main之前,还有一系列其他的的初始化要做,如堆栈的初始化,不过这些我们很少回去修改)。PC在上电
2016-11-05 15:54:41
3370
原创 ubuntu主机无法远程登录
今天使用Xsheel登录另一台主机时,一直弹出下面信息,无法连接,后来想到会不会是IP冲突了,于是将主机的IP改了,顺利登录,更改命令:ifconfig eth0 IP地址
2016-11-03 21:10:39
597
转载 ubuntu通过minicom实现串口通信
minicom是linux下串口通信的软件,它的使用完全依靠键盘的操作,虽然没有“超级终端”那么易用,但是使用习惯之后读者将会体会到它的高效与便利,下面将讲解minicom的安装和配置。一、安装minicom:使用以下命令:# sudo apt-get install minicom以下为安装的详细信息:# sudo apt-get install mini
2016-11-03 20:52:01
1380
原创 SPI、I2C、UART的一点理解
个人理解:关于UART、IIC、SPI这些常用通信协议讲一下理解。一个通信接口可以分为两部分,物理层(硬件)和协议层。如UART,PC和单片机通信,PC机的串口是232电平而单片机的串口是TTL电平,电平的概念大家应该都知道,两个设备之间通信如果电平不一致就相当于语言不通,造成逻辑混乱。因此一般的单片机系统板上都会有一个串口模块电路(串口控制器)用来进行电平转换,将PC机的232电平转化成单片
2016-11-03 10:51:00
5522
1
原创 使用STM32的串口进行大量数据传输
最近的一个项目需要用单片机和上位机进行大量数据的传输,每次传输的内容为一个1000*7的矩阵,矩阵中的每个元素都是一个4位有效数字,通过字符的形式保存,(如:1.000占5个字节)简单计算一下,1000*7*5=35000Byte,也就是30几K,而单片机型号为:STM32F103ZET6, SRAM有64K 。如果直接申请一个数组来保存,占用空间太大,但是又不适合用C标准库中的malloc 进行
2016-11-02 21:51:58
28223
12
转载 STM32 大小端模式 与 堆栈及其增长方向分析
栈增长和大端/小端问题是和CPU相关的两个问题.1,首先来看:栈(STACK)的问题.函数的局部变量,都是存放在"栈"里面,栈的英文是:STACK.STACK的大小,我们可以在stm32的启动文件里面设置,以战舰stm32开发板为例,在startup_stm32f10x_hd.s里面,开头就有:Stack_Size EQU 0x00000800表示
2016-11-02 10:10:45
875
转载 STM32实现动态内存分配
原文:http://www.openedv.com/posts/list/17718.htm#ifndef __MALLOC_H#define __MALLOC_H#include "sys.h"////////////////////////////////////////////////////////////////////////////////// //本程序只供
2016-11-02 09:46:13
5529
转载 STM32内存管理以及堆和栈的理解
今天仔细读了一下内存管理的代码,然后还有看了堆栈的相关知识,把以前不太明白的一些东西想通了,写下来,方便以后查看,也想大家看了能指出哪里不对,然后修改。 首先,先看一下stm32的存储器结构。Flash,SRAM寄存器和输入输出端口被组织在同一个4GB的线性地址空间内。可访问的存储器空间被分成8个主要块,每个块为512MB。FLASH存储
2016-11-02 09:38:59
26884
2
转载 内存分配
内存分配方式 内存分配方式有三种: (1)从静态存储区域分配。内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。例如全局变量,static变量。 (2)在栈上创建。在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限。 (3)
2016-11-02 09:28:47
317
原创 关于STM32能否使用malloc申请动态内存的问题
首先,malloc( )属于标准C语言函数,当然可以在单片机上使用,如STM32可以先在启动文件中设置heap的大小,再使用动态内存分配: Heap_Size EQU 0x00000200 \\也就是 512字节;但是一般单片机的内存都比较小,而且没有MMU,malloc 与free的使用容易造成内存碎片。因此应该慎用,或者自己实现内存管理。以下
2016-11-02 09:10:52
35981
1
转载 STM32串口通信校验问题
这里以串口作为传输媒介,介绍下怎样来发送接收一个完整的数据包。过程涉及到封包与解包。设计一个良好的包传输机制很有利于数据传输的稳定性以及正确性。串口只是一种传输媒介,这种包机制同时也可以用于SPI,I2C的总线下的数据传输。在单片机通信系统(多机通信以及PC与单片机通信)中,是很常见的问题。一、根据帧头帧尾或者帧长检测一个数据帧1、帧头+数据+校验+帧尾这是一个典型的方案,但是对帧头与
2016-11-01 16:29:38
6429
转载 关于堆和栈
问题描述编程语言书籍中经常解释值类型被创建在栈上,引用类型被创建在堆上,但是并没有本质上解释这堆和栈是什么。我仅有高级语言编程经验,没有看过对此更清晰的解释。我的意思是我理解什么是栈,但是它们到底是什么,在哪儿呢(站在实际的计算机物理内存的角度上看)?在通常情况下由操作系统(OS)和语言的运行时(runtime)控制吗?它们的作用范围是什么?它们的大小由什么决定?哪个更快?答案一
2016-10-30 16:44:13
312
转载 STM32时钟小结
众所周知STM32有5个时钟源HSI、HSE、LSI、LSE、PLL,其实他只有四个,因为从上图中可以看到PLL都是由HSI或HSE提供的。其中,高速时钟(HSE和HSI)提供给芯片主体的主时钟.低速时钟(LSE和LSI)只是提供给芯片中的RTC(实时时钟)及独立看门狗使用,图中可以看出高速时钟也可以提供给RTC。内部时钟是在芯片内部RC振荡器产生的,起振较快,所以时钟在芯片刚上电的时候,默认
2016-10-30 16:38:14
550
原创 C++中静态成员函数的作用
静态成员函数主要为了调用方便,不需要生成对象就能调用。比如class X{public: void MethodA(); static void MethodB();}此时MethodB可以直接调用,X::MethodB();MethodA必须先生成类对象才能调用,X x; x.MethodA();
2016-10-26 16:11:34
1035
转载 QTL与STL对比
作者:诸葛不亮链接:https://www.zhihu.com/question/50156390/answer/119663575来源:知乎著作权归作者所有,转载请联系作者获得授权。Qt的容器类具体分析可见官方文档:http://doc.qt.io/qt-5.7/containers.html里面有关于时间复杂度、迭代器等各方面的概述和表格对比各个容器的具体实现,可以
2016-10-25 17:34:23
2921
转载 STM32 ADC 转换时间
本文转载自 http://www.cnblogs.com/LJWJL/p/4593246.htmlADC时钟:这个ADC时钟是从哪来的呢。我们看下面这个STM32的时钟结构图: 我们大多使用STM32的最快PCLK2系统时钟72MHz。ADCCLK的时钟由72MHz的6分频能瞒住14MHz以下的要求 为12MHz。RCC_ADCCLKConfig(RCC_PCLK
2016-10-25 11:04:56
5091
原创 STM32通过DMA方式采集多路AD
一个项目需求:使用STM32采集多路AD信号。一般采集多路信号需要使用DMA方式,步骤如下:1.使能相应ADC通道,这里使用ADC1的4个通道,分别是ADC123_IN0 ~ ADC123_IN3,注:ADC123_IN0 表示ADC1, 2, 3 都可以使用该通道。2.配置ADC,将ADC设为多通道循环扫描模式,设置各通道扫描顺序(人为设定)3.配置DMA通道关键
2016-10-25 10:46:43
15029
5
转载 继承 -----C++三大特性之一
本文转载自 http://blog.youkuaiyun.com/snow_5288/article/details/52910155?ref=myread一,为什么要引入继承? 继承是一个非常自然的概念,现实世界中的许多事物也都是具有继承性的。例如,爸爸继承爷爷的特性,儿子又继承爸爸的特性等都属于继承的范畴。下面是一个简单的汽车分类图:在这个分类图中建立了一种层次
2016-10-25 10:14:28
398
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人