自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(121)
  • 资源 (1)
  • 问答 (1)
  • 收藏
  • 关注

原创 GPIO端口之AFIO的完全映射与部分映射的理解

GPIO端口之AFIO的完全映射与部分映射的理解

2022-09-02 18:37:40 1659 1

原创 C中的数据存储

一个函数的返回值是int16类型的。但当返回的参数值大于32767的时候是如何的现象。可以正常返回,接收返回值的变量可以容纳返回值即可。

2022-07-27 20:26:33 244

转载 Keil精确测量代码运行时间

在工程设置中“Debug”下,选右边硬件仿真,点下拉框选“J-LINK/J-TRACE”,再点“Setting” 在弹出窗口中“Debug”下,选“JTAG”或“SW”,在后面选好下载速率。 点到Trace”标签下,如果是选择的“SW” 则勾选“Enable”选项,在“Core”框中输入MCU实际工作时钟频率(就是单片机以什么频率来执行指令的,MDK会用它来计算时间),再勾选“Autodetect...

2022-04-15 17:16:51 3165

原创 C与指针第一章

1、注意格式,注意注释的格式/***这是一个C程序的注释**这一行也是**俺也是*/ 2、要从逻辑上删除一段C代码,更好的办法是使用#if指令。如下: #if 0 statements #endif3、预处理指令很强大,可能比我想象的还有强大。14章见。4、预处理指令#include<stdio.h> /*这一行的功能就会吧stdio.h文件中的内容逐字写到此处*/#include<string.h> /*同上*/#define MAX_CO

2022-01-06 20:17:40 386

原创 第十一章:字符串和字符串函数

C字符串和字符串函数

2022-01-06 19:54:00 769

原创 《深入C语言程序运行原理》第二课 于航

要点总结:一、数据量单位:位、字节和字1.1 位是计算机中共最小的存储单位。每一个为可以存储一个二进制码0或者1.而字节通常由8个位组成一个存储单元。在计算机中,字节是最小的可寻址单位,这意味着CPU在使用数据时,可以以字节为单位,为每一个字节内存分配一个相应的独立地址。1.2字的大小并不固定,注意是因为字的概念与具体的处理器或硬件体系架构直接相关,它跟位、字节这种较为通用和统一的数据量概念并不相同。一个字的大小可能是2的幂次个位,比如16位、32位、12位、27位等。二、汇编语言2.1在计算机编

2021-12-15 22:15:17 2233

转载 STM32+IAP方案的实现

专注电子技术学习与研究 联系我们 <a title="单片机教程网" href="http://www.51hei.com"><img alt="单片机教程网" src="http://www.51hei.com/hugab/artcss/images/logo51hei.png" align="middle"></a> <div class="v3_...

2021-11-30 12:03:50 2568 1

原创 GD32F103VET6替代STM32F103VET6遇到的问题

一.问题与现象:1.公司的产品之前用的是STM32F103VET6,芯片涨价&高价也买不到的情况下,我们选择了GD32F103VET6进行代替。之前同事直接把ST的程序给烧录进GD中,一下就跑起来了。短时间也没发现什么问题。过了阶段,我们发现,有时设备读取SIM卡的ICCID与无线通讯模组的IMEI读不全。我接收之后,就依照网友的总结GD32E103/F303系列替换STM32F103与STM32到GD32移植攻略对需要修改的地方进行了修改。把软件延时(for与while )进行了适当延长,这些问

2021-11-04 20:40:27 5119 4

原创 C语言中的内存布局

地址注释高局部变量·动态申请的内存空间··全局变量(未初始化)·静态变量(未初始化)·全局变量(初始化)·字符串常量低函数地址代码段:代码段:通常是指用来存放程序执行代码的一块内存区域。这部分区域的大小在程序运行前就已经确定,并且内存区域通常属于只读。在代码段中,也有可能包含一些只读的常数变量,例如字符串常量等。数据段:数据段:通常用来存放已经初始化的全局变量和局部静态变量。BSS段:BSS段:(Block Starte...

2021-06-09 22:49:45 463

原创 存储类别、链接、和内存管理(一)

涉及内容:关键字:auto、extern、static、register、const、volatile、restricted(受限制的 保密的)、_Thread_local、_Atomic函数:rand()、srand()、time()、malloc()、calloc()、free()如何确定变量的作用域(可见范围)和声明周期(它存在多长时间)***** ********* ************************ ** * 好好理解"对象"这个概念。***

2021-06-08 10:36:18 186 2

原创 自己写一个参数可变的函数

参数可变的函数:#include <stdio.h>#include <stdlib.h>#include <stdarg.h>int sum(int n , ...);int sum(int n, ...){ int i, sum = 0; va_list vap; va_start(vap,n); for(i=0; i<n; i++) { sum += va_arg(vap, int);

2021-06-06 14:07:36 170

原创 void指针和NULL指针&指向指针的指针&指针数组

一、void指针和NULL指针void指针我们把它称为通用指针,就是可以指向任意类型的数据。也就是说,任何类型的指针都可以赋值给void指针。void类型指针,不要直接给void指针进行解引用。对一个NULL指针进行解引用是非法的,会引起段错误。当你还不清楚将指针初始化为什么地址时,请将它初始化NULL;在对指针解引用时,先检查该指针是否为NULL。NULL不是NUL 。NUL是ASCII字符表中的第一个字符。NULL用于指针和对象,表示指向一个不被使用的地址,而’\0’表示字符串的结尾。

2021-06-03 22:22:14 407

原创 *p++运行过程解读

*p++:执行流程:(1)p++。因为++的优先级高于。但是++是后置,所以先用p.(2)*p取值,值得注意的是:这里的p是++之前的值。第一步++之后用于下一次的使用。#include <stdio.h>#include <stdlib.h>#include <string.h>int main(void){ unsigned char a[] = "China NB Plus!"; unsigned char *p = a;

2021-06-02 16:55:55 1965

原创 字符串处理函数---很重要

1.字符串的定义:字符串就是一串零个或多个字符,并且以一个位模式为全0的NUL字节结尾。因此,字符串所包含的字符内部不能出现NUL字节。2.头文件包含:头文件string.h中包含了使用字符串函数所需要的原型和声明。3.字符串长度字符串长度就是所包含的字符的个数。库函数Strlen函数的原型如下:size_t strlen (char const * string)注意:strlen返回的是一个类型为size_t的值,这个类型是在头文件stddef.h中定义的,它是一个无符号整数类型。4.

2021-06-02 07:50:10 637

原创 STM32与GSM800A调试记录

最近在做一个项目,调试单片机与GSM(我这里用的是GSM800A)通信时遇到问题。实现功能:单片机控制GSM模块发送短信(很基础的功能)。用的的是AT指令,还有就是GSM模块启动工作流程。当我们要开始动手干活时,首先要想着,整个流程时怎么样的?要用到那些知识?一步一步慢慢来,细心的来。就上边的功能来看。可能是这样一套流程:(1)当我们选取了GSM模块之后,知道它与单片机之间是以串口的方式通信的,那么我们需要做好串口代码工作,并调试好,确保无误。(2)详细阅读GSM模块的手册,知道它的一整套工作流程。

2021-05-12 15:29:32 1222 2

原创 《洞见》罗伯特·赖特

1.作者:罗伯特·赖特是普林斯顿大学进化心理学教授,美国前总统的智囊,全球百位最具影响力的思想家之一。曾入围普利策奖,美国国家图书奖,主要作品有《道德动物》《神的演化》等。2.本书从进化心理学的角度,从哲学到科学细致地阐述人的认知误区,告诉我们如何才能更好地看清事物的真相,认识自己,成为更好的自己。3.精彩选段:3.1我们的大脑有很多特性,其中一个就是欺骗我们。3.2我们看世界时所见的事物,并不似表面看起来那般独特、真切。3.3你以为你是电影导演,但其实你只是个观众。3.4平常的生活就是一场幻觉

2021-05-12 08:02:28 4348 1

原创 C语言之结构体(二)

1嵌套结构struct name{ //第一个结构 char first[LEN]; char last[LEN];};struct guy{ //第二个结构 struct name handle; //嵌套结构 char favfoodp[LEN]; char job[LEN]; float income;};int main(void){ struct guy fellow = { //初始化一个结构变量 {“Ewen”,"Yang"}, "grilled sa

2021-05-10 22:00:52 553 12

原创 指针才是C语言的精髓

一、指针到底是什么?一般我们所说的指针其实指的是指针变量。那么既然是变量,指针其实说白了跟普通变量没有什么太大的区别。变量是存放数据的手段。指针变量也是如此,只不过变量存放的是地址。比如:int a = 10;int *p = &a; //p是一个int类型的指针上边这两句代码可以说:p指向了a的空间。本质上就是p中存放的是地址指向了空间a。准确的讲应该是:指针变量p里边存放的地址指向了空间a。二、变量空间的首字节地址,作为整个空间的地址实际上,内存中每一个字节空间都有一个地址

2021-05-09 16:28:45 227 1

原创 C语言中.与->的区别

首先他们两个是有区别的。看如下程序:在学习结构体方面的知识是注意到.与->了。在之前的意识中,两个没多大的差别。看下程序,分析下为什么,有时候用.有时候用->?其实要讨论这两者的区别,就涉及到了结构体指针与结构体变量来访问成员变量的问题了。#include <stdio.h>#include <stdlib.h>#define LEN 20struct name{ char first[LEN]; char last[LEN];};s

2021-05-09 10:11:27 4226 3

转载 keil5编译后生成 Program Size: Code RO-data RW-data ZI-data是什么

 在keil5下全编译了这么多次代码,每次编译完了后都有这么一行提示,闲来没事还是搜索学习了一下。 Program Size: Code=49560 RO-data=7032 RW-data=308 ZI-data=1100180 (数据当然是不一样的哈)  通过查阅keil5的帮助文档(ARM Development Tools),看到样的的一个数据,如图   Code (i...

2021-05-08 10:37:16 1077 1

转载 Code、 RO-data=、 RW-data、ZI-data、

1. 查看码Flash/内存RAM占用大小 工程编译后,双击上图中红框位置,会打开 .map文件,包含了各个函数和文件占用的空间大小和地址。     2. Code-Data,RO-Data,RW-Data,ZI-Data 分别是什么含义 Code-Data:代码占用的空间大小(占用的空间为内部Flash) RO-Data:只读常量大小(cons...

2021-05-08 10:35:25 2524

原创 C语言之结构体(一)

1、建立结构声明//该声明描述了一个由两个字符数组和一个float类型变量组成的结构。//该声明并没有创建实际的数据对象,只是描述了该对象由什么组成//(有时候我们成为模板)struct book //book是标记名,是可选的。{ char title[MAXTITL]; char author[MAXAUTL]; float value;}; //这样就创建了一个结构模板。//分析:关键字:struct 表明跟在其后的是一个结构,后边是一个可选的标记(本例中是book)。//

2021-05-07 22:40:31 157

转载 C/C++存储类别

本文介绍 C/C++ 中的存储类别。所谓的“存储类别”究竟是什么意思? 存储类别主要指在内存中存储数据的方式,其大致牵涉到变量的三个方面 —— 作用域、链接性和存储期,也就是说这三个方面决定了存储类别。下面先解释这三个概念,再介绍在 C/C++ 中的表示形式。存储类别定义作用域 (scope) 描述程序中可访问变量的区域,主要有块作用域 (block scope) 变量和 文件作用域 (file scope) 变量,平常我们也分别用局部变量和全局变量来指代这两者。这里需要注意的是,在 C/C++

2021-05-07 22:10:59 1438 1

原创 《干法》稻盛和夫

1、要在工作中修行。2、稻盛和夫认为人生的价值是:是你有没有在工作中磨练你的心性。3、稻盛和夫认为:工作是万病的良药。因为工作可以起到:工作可以提升心智,就是磨练心智;(P13:“只有通过长时间不懈的工作,魔力了心智才会具备厚重的人格,在生活中沉稳而不摇摆”) 、中国古人讲:“君子不重则不威”4、稻盛和夫把人分为三类:自然醒、可燃型、不燃型。自燃型:自己又想法,会思考,一天变化着想着如何把一件事情干好。可燃型:别人激励,鼓励,指导,他就能够好好干,叫做可燃型。不燃型:怎么鼓励,激励 都没有

2021-04-29 07:56:11 1442 4

原创 C语言基础值Switch case

1、多重选择:switch 和break2、基本格式1:每一个Case后边带有breakswitch(number){case 1: statement 1;break;case 2: statement 2;break;case 3: statement 3;break;case 4: statement 4;break;case 5:statement 5;break;case 6:statement 6;break;...case statementn;brea

2021-04-16 14:06:43 257

转载 c语言字符串长度,占用字节大小,存放位置等问题

参考文章:https://www.cnblogs.com/xmhsincere/p/4915354.html                   1、三者长度strlen问题 int main () { char *str="xiaolong"; printf("%d\n",strlen(str)); return 0...

2021-03-26 13:12:04 2018

转载 2021-03-26

背景最近在项目中遇到了一个编译警告,是因为定义的变量为char[],而在使用时作为函数的unsigned char类型的参数调用。这个警告很容易避免,但是char和unsigned char*到底有什么区别呢,本文作一个简单的探讨。char 和 unsigned char 的区别在C中,默认的基础数据类型均为signed,如定义变量为int,long等,都为有符号的。如果要定义无符号类型,必须显式地在变量类型前加unsigned。char vs unsigned char相同点:在内存中都是一个字

2021-03-26 10:16:34 79

原创 大彩串口屏之LUA使用1

1:需求:想通过用户输入文本参数值,存入到屏的Flash中,断电不丢失,下一次上电显示的还是最后一次输入的值。2:实现原理:用户在界面上设置文本控件的输入,输入完成可通过点击“保存”按钮来实现将数值保存起来,断电重新上电文本控件显示上次输入的值。特别注意:–按下保存按钮控件触发,画面ID是5,控件ID是4,按下状态是1;【程序实现中有体现】3:解决方法:可以通过LUA脚本进行对屏的控制。通过求助大彩的技术支持,得到一份文档,先是照猫画虎把LUA程序拷贝过来然后进行参数修改。我修改过之后的程序如下:

2021-03-24 18:16:16 4435 2

转载 CSND如何转载别人的文章

在参考“如何快速转载CSDN中的博客”后,由于自己不懂html以及markdown相关知识,所以花了一些时间来弄明白怎么转载博客,以下为转载CSDN博客步骤和一些知识小笔记。 参考博客原址:http://blog.csdn.net/bolu1234/article/details/51867099 转载CSDN博客步骤: 1.CSDN博客页面右键,点击【检查】 点击检查后,页面右侧出现html代码,如下图 2.如果需要转载全文,则在html代码下侧点击选中articl...

2021-03-19 10:55:29 131

转载 关于STM32ADC采样阻抗匹配问题。

  在做一款消费电子产品时,需要采集电池电压(3.3V-4.2V),同时在休眠的时候希望尽量减小待机电流。电池电压采集电路采用两个1%的300K电阻进行分压,由该电路引起的待机电路为4.2/(300+300)mA=7uA.此时比较合理(整机的待机电流要求30uA以内)。   初始设计电路如下:      在编程采集数据时发现测试电压与实际电压有偏差,测试值总比实际值偏小一点。在软件上做补偿,把值修正...

2021-03-19 10:53:51 6360 1

原创 公司项目修改维护记录

一、项目实现完成内容:(1)热导纯度传感器读SF6含量值并做校准界面(2)红外CF4传感器读取CF4含量值并做校准界面(3)电化学氧气传感器读取氧气含量值二、传感器与单片机之间通信所走的协议:(1)纯度:标准的modbus rtu协议----modbus协议解析:灵育MODBUS课程总结(2)CF4:厂家自定义协议(基于modbus)(3)氧气:无协议,模拟的,AD采样。三、校准界面的实现:(1)如何实现同测量值进行补偿?如何通过屏幕输入一个float值保存到内存中,或者EEPROM中?

2020-12-09 14:01:21 192

原创 ucos-II学习1(嵌入式实时操作系统ucos-II原理及应用)

1、实时操作系统应满足的条件:(1)实时操作系统必须是多任务系统;(2)任务切换的时间与系统中的任务数量无关;(3)中断延时的时间预知并尽可能的短。2、内核的分类:不可剥夺型内核(也叫合作型多任务内核):在这种内核中总是优先级别高的任务最先获得CPU的使用权。这种内核要求任务需要主动放弃CPU的使用权。可剥夺型内核:目前都使用可剥夺型的,也就是说优先级高的任务可以打断优先级低的任务。3、中断延时:自CPU响应中断到CPU转向中断服务程序之间所用的时间。4、操作系统提供三项服务为开发人员:(

2020-11-25 11:10:21 854

原创 Word中遇到的小问题

1.回车换行的小符号怎么去掉?答: 点击左上方图标“文件”—>“选项”---->“显示”---->段落标记前边的小钩去掉即可。2.在一段文字中间插入一部分内容,前边输入,后边的字消失,多插入一个,后边就消失一个,如何解决?答:可能是因为按住了键盘的 insert键,导致输入时的状态是【改写】,所以输入一个字,后面的字就消失了,只需要在按住一次insert键就可以了。3一段文字,想进行首行缩进,用按“空格键”的方法实现不了,一按“空格键”整段文字往后缩进,如何解决?答 :该word

2020-10-29 21:21:04 443

原创 程序是怎么跑起来的要点总结(第四章:熟练使用有棱有角的内存)

1、数组、指针、内存数组是内存的基本使用方法。因为数组和内存的物理结构是一样的。数组访问内存,通过索引访问,2、栈、队列以及环形缓冲区栈、队列都可以不通过指定地址和索引来对数组的元素进行访问。2.1 栈和队列的区别在于数据出入的顺序不同。在读内存数据进行读写时,栈是用LIFO(Last In First Out后进先出)方式,队列是FIFO(First In First Out先进先出)方式。2.2 我们只需要在内存中预留出栈和队列所需要的空间,并确定好写入和读出的顺序,就不用在指定索引和地址了。

2020-10-27 15:47:35 145

原创 程序是怎样跑起来的要点整理2(第二章 数据是用二进制表示的)

计算机所处理的信息的基本单位是字节(8bit)。字节是最基本的信息计量单位。位是最小单位,字节是基本单位。内存和磁盘都使用字节来存取与读写数据,使用位单位是无法访问的,因此字节是基本单位。程序在运行是计算机内部是用二进制数来表示的。计算机不区分二进制数,怎么解读由程序员说了算。比如“00100111”的二进制数,可以解读为纯粹的数值,也可以解读为单引号,也可以解读为方框图标等等。位权的概念:比如:39中 :3表示310 9表示91;这里的10 和 1就是位权。这个数的第一位(从右边开始数)的位权是

2020-10-15 09:42:26 258

原创 16进制数转换成Float型数

单片机与传感器通信,标准的MODBUS RTU协议。到了数据解析部分,如何把4个字节的数据读出来,显示到屏幕呢?单片机收到一帧数据,放入数组中,进行数据的拼凑,4个字节拼凑成一个32位的int型数据。然后再进行解析。/*部分函数实现*///假如下边数组中收到的是传感器随机返回的一帧数据//协议解释:第一个字为地址 第二个字节为功能码 第三个字节为连续几个字节的数据//后边紧跟的是第三个字节长度的数据,最后两位位CRC校验 unsigned char uartRx_Buf[] = {0x01,

2020-10-12 20:50:26 3398

转载 2020-09-28

通用异步收发器(Universal Asynchronous Receiver/Transmitter),通常称作UART,是一种串行、异步、全双工的通信协议,在嵌入式领域应用的非常广泛。UART作为异步串行通信协议的一种,工作原理是将传输数据的每个二进制位一位接一位地传输。在UART通信协议中信号线上的状态为高电平时代表‘1’,信号线上的状态为低电平时代表‘0’。比如使用UART通信协议进行一个字节数据的传输时就是在信号线上产生八个高低电平的组合。串行通信是指利用一条传输线将数据一位位地顺序传送,也可

2020-09-28 10:29:33 550

原创 比例电磁阀的工作原理

比例电磁阀的阀芯通过比例电磁铁控制,使得输出的压力或者流量与输入的电流成正比。所以可用改变输入信号的方式来连续控制输出的压力或者流量。有的阀还兼有控制流量大小和方向的功能。根据比例阀也可分为:压力比例阀,流量比例阀,换向阀三大类。比例阀是在普通压力阀、流量阀和方向阀上,用比例电磁铁替代原有的控制部分,按输入的电气信号连续地、按比例地对油流的压力、流量或方向进行远距离控制。比例阀一般都具有压力补偿性能,输出压力和流量可以不受负载变化的影响。比例阀可用PWM波控制输出的大小,而且输出连续。下图所示为比例阀

2020-09-18 16:02:26 12577 1

原创 第一章 C语言与内存

1、什么是程序?程序 = 数据 + 算法2、计算机运行程序的目的是什么?要么重视过程,要么重视结果,要么两者皆有。3、什么是内存?程序运行为什么需要内存?DRAM与SRAM的区别?内存相当于一个容器一样,要存储东西。计算机或MCU需要内存是要程序让存储于内存中并且让程序跑起来。SRAM:静态内存,速度快于DRAM,价格昂贵,一般用在CPU的一级缓存,二级缓存,要求特别高的地方;DRAM:价格相对于SRAM便宜一点,速度要比SRAM慢,DRAM又分为好多代。比如:SDRAM、DDR1 DDR2…

2020-09-05 10:25:50 362

原创 ST-Link之No Target Connected问题解决

一、背景:最近准备做个平衡车练练手(自己着实有些菜)。起初画板子的参考的别的原理图。好些地方没有特别注意。板子回来自己调试的时候遇到问题了。问题:要驱动两个电机的编码器。编码器驱动只能使用定时器(通用定时器与高级定时器都具有编码器接口功能,而基本定时器6 7不具有此功能)的通道1和通道2。然而我画板子的时候,起重一个电机编码器接口接到了PB0 PB1(MCU STM32F103C8T6)引脚上,这两个引脚对应的是定时器3的通道3跟通道4.那显然不可以了。于是乎割线、跳线了呗。看了看只能跳到PB6与PB7引

2020-08-16 09:59:48 30016

SIGAS-037 S-MODULE Basic EVO Manual V 1.5(en-cn).pdf

SMARTGAS型扩散式SF6传感器使用说明手册,使用基于MODBUS open 开放协议的单总线接口。

2020-07-03

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

TA关注的人

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