自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(28)
  • 资源 (3)
  • 收藏
  • 关注

原创 EEPROM 和SPI flash的区别

eeprom的容量一般以kb为单位,比如我们经常用到的arduino电子积木模块DS3231时钟模块,上面同时集成了一片AT24C32芯片。AT24C32芯片就是eeprom芯片,容量32Kbit(4KB)接口为iic。外置eeprom芯片一般是作为MCU芯片内部eeprom的补充,用于存储设置参数。 SPI Flash的容量就大很多了,常见的32Mbit(4MB),我们已经在ESP8266等模块上使用过了。容量更高的甚至可以达到256Mbit(32MB)。SPI Flash可以同时存储单片机固件和..

2021-10-01 20:05:03 4565

原创 C语言积累整理---指针学习(1)

声明:本文是阅读周立功老师的程序设计与数据结构后所写,很多内容其实是书中的内容,所以如果您想了解更多这方面的知识,您可以阅读这本书。指针:我想对于程序员来说指针并不陌生,尤其是对于经常写驱动程序或者写操作系统的人。而对于我来说,指针是我看程序时经常会用到的。虽然写的不多,但是读的程序还是不少的。因为感觉周立功老师写的这本书真的非常的好。所以这几天打算从新阅读一下,而从新再读这本书,确实有不同的体会。 我们最常用到的指针是定义一个特定类型的指针变量,从而用这个指针指向特定类型变量的地址,而我们同

2021-09-13 17:02:53 252

原创 C语言积累整理---memset函数详解

memset是计算机中C/C++语言初始化函数。作用是将某一块内存中的内容全部设置为指定的值, 这个函数通常为新申请的内存做初始化工作。每种类型的变量都有各自的初始化方法,memset() 函数可以说是初始化内存的“万能函数”,通常为新申请的内存进行初始化工作。它是直接操作内存空间,mem即“内存”(memory)的意思。该函数的原型为:# include <string.h>void *memset(void *s, int c, unsigned long n);函.

2021-04-17 16:15:29 9372 1

原创 C语言积累整理---C语言中自己的bool类型

使用bool逻辑型变量的优点:1、提高程序的可读性 bool类型的变量只可能有两个值true或false,在没有统一的布尔类型在大型的工程项中特别是用到第三方程序库时, 可能使用不同的手段模拟布尔类型以提交代码的可读性,这样会使得代码有些混乱, C语言中引入了bool内置类型,解决了代码的一致性问题。2、提高程序的性能 bool在绝大多数编译器编译时都将其实现为1字节,即sizeof(bool)的值为1,加上其只有两个值的值域{true, f...

2021-04-16 16:42:41 527

原创 C语言积累整理---内存管理

一、几个基本概念 在C语言中,关于内存管理的知识点比较多,如函数、变量、作用域、指针等,在探究C语言内存管理机制时,先简单复习下这几个基本概念: 全局变量、局部变量、作用域、变量的存储方式和生命周期 注意:C语言中函数默认都是全局的,可以使用static关键字将函数声明为静态函数(只能被定义这个函数的文件访问的函数)。二、内存四区  计算机中的内存是分区来管理的,程序和程序之间的内存是独立的,不能互相访问,比如QQ和浏览器分别所占的内存区域是不能...

2021-04-15 23:00:55 160

原创 C语言积累整理---动态内存管理和动态内存分配

动态内存管理在编写程序时,通常并不知道需要处理的数据量,或者难以评估所需处理数据量的变动程度。在这种情况下,要达到有效的资源利用,必须在运行时动态地分配所需内存,并在使用完毕后尽早释放不需要的内存,这就是动态内存管理原理。动态内存管理同时还具有一个优点:当程序在具有更多内存的系统上需要处理更多数据时,不需要重写程序。标准库提供以下四个函数用于动态内存管理:(1) malloc()、calloc()分配新的内存区域。(2) realloc()调整已分配的内存区域。(3) free()释放已分

2021-04-15 23:00:28 157

原创 C语言积累整理---strlen的几种写法

C语言中strlen的几种写法Num1: //用指针int strlen(char *p){char *q = p;while(*q != '\0') q++;retrun q - p;}Num2: // 用指针int strlen(char *p){int num;for(num = 0; *p != '\0'; p++) num++;return num;}Num3: //用数组方法,效率相对偏低int strlen(char p[]){int i

2021-04-15 13:38:50 189

原创 RT-Thread学习笔记——移植RT-Thread到STM32(三)

RT-Thread启动过程这是主函数中的全部代码,主要是创建一个led线程并启动。那么问题来了,要点个灯,怎么也要进行led的硬件初始化吧?但是,在主函数中并没有发现有相关的初始化操作。那么其在哪进行初始化呢?按照我们以往的习惯,主函数就是用户程序的入口啊。难道还有其他入口?还真的有其他入口!这就涉及到RT-Thread的启动过程。我们可以借助jlink仿真器进行硬件单步调试就可以知道程序的执行流程了。首先,进入调试界面,并点击复位按钮光标就可以跳到程序开始运行的地方

2021-04-15 09:52:05 597

原创 RT-Thread学习笔记——移植RT-Thread到STM32(二)

一. 线程的定义与线程切换的实现 1.什么是线程 在裸机系统中, 系统的主体就是 main 函数里面顺序执行的无限循环,这个无限循环里面 CPU 按照顺序完成各种事情。 在多线程系统中,我们根据功能的不同,把整个系统分割成一个个独立的且无法返回的函数,这个函数我们称为线程。2. 创建线程 一个裸机系统中, 如果有全局变量,有子函数调用,有中断发生。那么系统在运行的时候,全局变量放在哪里,子函数调用时,局部变量放在哪里, 中断发生时,函...

2021-04-08 09:50:56 408

原创 RT-Thread学习笔记——移植RT-Thread到STM32(一)

开始学习RT-Thread操作系统,在这里记录自己的学习笔记,先从RT-Thead移植开始:裸机系统与多线程系统:裸机系统通常分成轮询系统和前后台系统**(1) 轮询系统**轮询系统即是在裸机编程的时候,先初始化好相关的硬件,然后让主程序在一个死循环里面不断循环,顺序地做各种事情**(2) 前后台系统** a. 相比轮询系统,前后台系统是在轮询系统的基础上加入了中断。 b. 外部事件的响应在中断里面完成,事件的处理还是回到轮询系统中完成 c. 中断在这里我们称为前台,...

2021-04-07 14:53:08 355

原创 linux环境下 C的多文件编译

1. 多个文件一起编译用法:gcc testfun.c test.c -o test作用:将testfun.c和test.c分别编译后链接成test可执行文件。2. 分别编译各个源文件,之后对编译后输出的目标文件链接。用法:gcc -c testfun.c //将testfun.c编译成testfun.ogcc -c test.c //将test.c编译成test.ogcc -o...

2021-03-26 11:03:00 1863

原创 C语言积累整理---getchar与putchar以及getch()与getchar()

1.从缓冲区读走一个字符,相当于清除缓冲区2.前面的scanf()在读取输入时会在缓冲区中留下一个字符’\n’(输入完s[i]的值后按回车键所致),所以如果不在此加一个getchar()把这个回车符取走的话,gets()就不会等待从键盘键入字符,而是会直接取走这个“无用的”回车符,从而导致读取有误3.getchar()是在输入缓冲区顺序读入一个字符(包括空格、回车和Tab)getchar()使用不方便,解决方法:(1)使用下面的语句清除回车:while(getchar()!=’\n’);(2)

2021-03-10 13:44:53 1562

原创 C语言积累整理---extern关键字

数据类型C语言包含5个基本数据类型: void, integer, float, double, 和 char.类型 描述 void 空类型 int 整型 float 浮点类型 double 双精度浮点类型 char 字符类型 C++ 定义了另外两个基本数据类型: bool 和 wchar_t.类型 描述 bool 布尔类型, 值为true 或 false wchar_t 宽字符类型 类型...

2021-02-21 10:32:48 386

原创 Keil 查找功能的使用

keil中如何查找和替换以及一个工程里所有文件所包含查找和替换的内容:1、点击 edit-find或者快捷键 ctrl+f;2、在look in中 选择current document就是查找或替换本文件的内容, 选择current project就是查找或替换整个工程的包含的内容 ...

2021-02-20 17:39:58 7875

原创 Visual Studio 2015 开发环境的搭建与配置

一.开发环境的搭建与配置:二.Visual Studio 2015 开发环境的下载与安装三.安装Visual Studio 2015系统的必备条件四.下载Visual Studio 2015五.安装Visual Studio 2015六.启动七.设置字体大小八.设置行号...

2021-02-03 15:13:32 1583

原创 C语言积累整理---全局变量、局部变量、作用域、变量的存储方式和生命周期

程序的内存分配一个由c/C++编译的程序占用的内存分为以下几个部分1、栈区(stack)— 由编译器自动分配释放,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表。3、全局区(静态区)(static)—,全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域(.data),未初始化的全局变量和未初始化的静态变量在相

2021-02-02 20:07:04 1836

原创 C语言积累整理---getchar()用法

(1)getchar()用法1.从缓冲区读走一个字符,相当于清除缓冲区2.前面的scanf()在读取输入时会在缓冲区中留下一个字符'\n'(输入完s[i]的值后按回车键所致),所以如果不在此加一个getchar()把这个回车符取走的话,gets()就不会等待从键盘键入字符,而是会直接取走这个“无用的”回车符,从而导致读取有误3.getchar()是在输入缓冲区顺序读入一个字符(包括空格、回车和Tab)getchar()使用不方便,解决方法: (1)使用下面的语句清除回车:

2021-01-29 17:05:58 2855

原创 KeilMDK配置项中Use MicroLIB

1.选上”UseMicroLIB”这是KEIL自带的一个简易的库,例如你用printf函数的时候,就会从串口1输出字符串,直接默认定向到串口12.microlib是缺省C库的备选库。它用于必须在极少量内存环境下运行的深层嵌入式应用程序。 这些应用程序不在操作系统中运行。microlib不会尝试成为符合标准的ISOC库。 microlib进行了高度优化以使代码变得很小。它的功能比缺省C库少,并且根本不具备某些ISOC特性。某些库函数的运行速度也比较慢...

2021-01-28 20:07:52 10357 5

原创 Git管理工具的认识与运用

一、git下载与安装 git官网 https://git-scm.com/download/win下载相应的安装包下载最新版本,一直点击next,直到出现install,点击install,安装完成后点击finish安装完成之后,打开终端,输入git –version 来查看git的版本信息,如果查询到,表示安装成功,否则安装失败。安装好git之后,就可以使用git的一些命令了。二.Git用处分布式版本控制 多个开发人员协调工作 有效监听谁做的修改 本地以及远程...

2021-01-28 10:17:24 184

原创 Windows Terminal 1.0体验

GPU加速渲染Windows Terminal利用GPU渲染其文本。使用命令行时,这提供了更快的体验。该渲染器还支持Unicode和UTF-8字符。这使您有机会以多种语言使用终端,同时还显示所有喜欢的表情符号。最后,我们在Windows Terminal软件包中包含了我们最新的字体Cascadia Code。默认字体设置为Cascadia Mono,这是不包含编程连字的字体变体。有关Cascadia Code字体的其他变体,请转到Cascadia Code GitHub repo。...

2021-01-27 19:31:41 222 1

原创 STM32学习笔记----STM32串口小结

一.简要介绍**串行通信**一般是以帧格式传输数据,即是一帧一帧的传输,每帧包含有起始信号、数据信息、停止信息,可能还有校验信息。USART 就是对这些传输参数有具体规定,当然也不是只有唯一一个参数值,很多参数值都可以自定义设置,只是增强它的兼容性。USART 满足外部设备对工业标准 NRZ 异步串行数据格式的要求,并且使用了小数波特率发生器,可以提供多种波特率,使得它的应用更加广泛。USART 支持同步单向通信和半双工单线通信;还支持局域互连网络 LIN、智能卡(SmartCar..

2021-01-26 20:21:35 1724

原创 MD5的认识与了解

md5为计算机安全领域广泛使用的一种散列函数,用以提供消息的完整性保护。一.作用:一般用于互联网一种数据的唯一性标识。二.实体:本身是一个128位的0/1比特。一般被表示为16进制的字符串。4个比特位组成一个16进制字符,因此常常能见到的是(128/4=)32个16进制字符组成的字符串 4951 dd1c bff8 cbbe 4cd4 475c a939 fc8b,当然它实质是一种消息摘要算法三.特点:1.完全相同的一段数据,不论时间地点(加密算法相同的条件)加密出的32位的字符串完全相同。2

2021-01-23 19:08:38 331

原创 MODBUS学习篇四------freemodbus的移植(rt-thread系统)

一.FreeModbus简介 FreeMODBUS一个奥地利人写的Modbus协议。它是一个针对嵌入式应用的一个免费(自由)的通用MODBUS协议的移植。Modbus是一个工业制造环境中应用的一个通用协议。Modbus通信协议栈包括两层:Modbus应用层协议,该层定义了数据模式和功能;另外一层是网络层。FreeMODBUS 提供了RTU/ASCII 传输模式及TCP协议支持。FreeModbus遵循BSD许可证,这意味着用户可以将FreeModbus应用于商业环境中。目前版本FreeModb...

2021-01-22 16:53:46 2546 2

原创 关于MDK 编译报错的问题整理以及处理

在调usart.c文件的时候出现下面错误:L6915E: Library reports error: __use_no_semihosting was requested, but _ttywrch was referenced Not enough information to list load addresses in the image map.解决办法://加入以下代码,支持printf函数,而不需要选择use MicroLIB #if 1#pragma import(__

2021-01-22 14:43:57 4664 2

原创 C语言积累整理---C语言中的回调函数(Callback Function)

1 定义和使用场合回调函数是指 使用者自己定义一个函数,实现这个函数的程序内容,然后把这个函数(入口地址)作为参数传入别人(或系统)的函数中,由别人(或系统)的函数在运行时来调用的函数。函数是你实现的,但由别人(或系统)的函数在运行时通过参数传递的方式调用,这就是所谓的回调函数。简单来说,就是由别人的函数运行期间来回调你实现的函数。这一设计允许了底层代码调用在高层定义的子程序(如图1-1所示)。C语言中回调函数主要通过函数指针的方式实现。回调的用途十分广泛:例如,假设有一个函数,其功.

2021-01-21 10:49:55 294

原创 C语言积累整理---volatile关键字

volatilevolatile是一个**特征修饰符**(type specifier).volatile的作用是作为指令关键字,确保本条指令不会因编译器的优化而省略,且要求每次直接读值。volatile(*不稳地的,反复的*)的变量是说这变量可能会被意想不到地改变,这样,编译器就不会去假设这个变量的值了。volatile 的特性表示一个变量也许会被后台程序改变,关键字 volatile 是与 const 绝对对立的。它指示一个变量也许会被某种方式修改,这种方式按照正常程序流程分析是无.

2020-12-25 16:04:46 807

原创 u8、u16、u32、s8、s16、s32、Size_t是什么类型

在MDK 开发环境里,比如一个 无符号32位整形数据会有很多种表示方法:1. unsigned int 32 (C语言标准表达方法)2. uint32_t ;3. u32;这三种方式都是在表达同一个意思,如:_IO int32_t 他等同于vs32,还等同于 volatile int32_t,**volatile signed int 32 这种表达方式才是C语言的标准表达方式**1.u8就是unsigned char ,是8位无符号char类型的值 /* exact-

2020-05-19 08:43:12 20458

原创 STM32中CAN1_RX0_IRQn和CAN1_RX1_IRQn的使用

“如果你用的CAN引脚是PA11和PA12,接收中断用CAN1_RX0_IRQn。如果CAN引脚用的是PB8和PB9,也就是用重定义的引脚,接收中断用CAN1_RX1_IRQn。由于PA11和PA12也是USB的引脚,所以非互联型且带CAN控制器的微控制器的库文件在起名字时用了USB_LP_CAN1_RX0_IRQn。”以上内容参考于网络,后经证实,以上说法是不正确的,理由如下:STM...

2020-05-08 11:40:29 2862 1

一款非常好用代码查错器

无需安装,打开代码查错器,勾选窗口右侧的“区分大小写”按钮,然后把写好的代码粘在代码窗口中,然后在窗口右侧指定代码源文件的列表中找到源文件,单击开始排错,检测到错误代码,下方有显示正确代码,进行逐条检测,直至无错误为止

2021-02-03

rt-thread-modbus-App01-03.rar

在STM32上移植了Rt-thread操作系统后,继续移植了freemodbus,实现多线程操作

2021-01-22

modbus入门上手练习

零基础学习modbus,按照教程,修改对应单片机,底层操作,完成移植,实现modbus的收发

2021-01-19

空空如也

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

TA关注的人

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