自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(42)
  • 资源 (1)
  • 收藏
  • 关注

原创 rtthread studio低版本的PWM 问题

rtthread studio 工具的cubemx使用PWM驱动bug

2022-11-07 16:15:11 393

原创 keil中L6002U的error原因之一

keil 的error L6002U

2022-06-27 14:18:50 1583

原创 2021-10-08

回调函数的经典示例示例代码:如何插入一段漂亮的代码片#include<stdio.h>#include<string.h>#include"bubbleSort.h"int compare_int(const void * e1, const void * e2){ return *(int *)e1 - *(int *)e2;}int compare_int_r(const void * e1, const void * e2){ return *(int

2021-10-08 22:47:39 210

原创 switch与if-else的区别

switch与if-else的区别switch与if else的执行效率这里简单的总结一下:switch与if else的执行效率单从JVM的执行效率上讲的话,switch的执行效率要高于if语句:原因在于:switch语句在运行时,首先会生成一个“跳转表”来指示实际的case分支的地址,而这个“跳转表”的索引号与swtich中的case值是相等的,这样的话,switch就不用像if els...

2019-08-07 11:22:19 1017

原创 如何养成良好的编程

如何养成良好的编程习惯增强代码的可读性格式化代码适当的注释有含义鲜明的标识符良好的逻辑性附加文档防止内存错误指针的初始化释放申请的内存空间文件指针的打开文件指针的关闭判断是否成功分配内存提高代码的运行速度学会使用内联函数合理选用运算符定义合适的变量学会使用volatile高内聚低耦合提高代码的复用率养成重构的习惯增强代码的可读性格式化代码适当的注释有含义鲜明的标识符良好的逻辑性附加文档...

2019-07-28 14:47:59 472

原创 源码,反码,补码概念回顾

在计算机系统中,数值一律用补码来表示和存储。原因在于,使用补码,可以将符号位和数值域统一处理;同时,加法和减法也可以统一处理。此外,补码与原码相互转换,其运算过程是相同的,不需要额外的硬件电路。-2的8位数补码是:1111 1110。 用256减去2得出254,写成二进制,就算出来了。 补码的(加/减)运算法则,和一般的二进制数的(加/减)运算法则,完全相同。因为它没有特殊性,所以在计算机中...

2019-06-06 10:02:23 9583

转载 leetcode

v滑动窗口算法了解一下!给定一个由若干 0 和 1 组成的数组 A,我们最多可以将 K 个值从 0 变成 1 。返回仅包含 1 的最长(连续)子数组的长度。示例 1:输入:A = [1,1,1,0,0,0,1,1,1,1,0], K = 2输出:6解释:[1,1,1,0,0,1,1,1,1,1,1]粗体数字从 0 翻转到 1,最长的子数组长度为 6。示例 2:输入:A = [0...

2019-06-02 21:56:30 137

原创 终于完成从裸机到RTOS的转变

从裸机到RTOS的进化最近终于在裸机工程中移植了RTThread这个实时操作系统,这是迈向嵌入式的第一步,在这里要感谢野火的《RT-Thread 内核实现与应用开发实战指南》,这本书简单细致的向我们介绍了RTThread的内核,以及对裸机程序如何移植到rtthread的操作环境中。在大型一点的项目中,RTOS给了我们希望,让我们不必再让阻塞延时来降低我们的工作效率,同时模块化任务的管理,信号量,...

2019-05-29 14:09:38 2715

原创 STM32cubeMX使用心得

使用STM32cubeMX创建工程首先你需要下载STM32cubeMX软件版本,我使用的是——5.0.1.软件版本可以去官网下载。其次你需要一个合适你工程的《STMcube_FW_F1_Vxx》库链接如下:STMcube软件以及固件库资料当我们使用STM32cubeMX创建一个工程时选择MCU selector ->core,series。最后在选择具体什么型号的芯片。工程...

2019-05-13 18:28:25 2715

原创 STM32RBT6时钟问题总结

这两天碰到关于CAN总线的问题,当检查配置与CAN分析仪都没问题的时候,陷入了迷茫期,之后在程序中找到对于CAN总线时钟的理解,想到了APB1的时钟可能有问题,对于在这里就对时钟再一次的进行总结。关于时钟的文件主要有两个:1.system_stm32f10x.c ,2.stm32f10x.h1.首先在启动文件中我们找到SystemInit()函数我们可以看到关于时钟的配置是在main函数之...

2019-04-15 17:47:39 730

原创 关于STM32的裸机多任务多线程心得

多任务多线程多任务"并行处理"首先我们来理解一下并行处理,初学者写程序通常是顺序执行,当我们逐渐想成为“专业”人士的时候顺序执行 的程序已经不能满足我们了,所以就需要多任务多线程系统,市面上标准的一些操作系统比如ucos,freeRTOS这些操作系统需要的学习周期长,范围广。在网上看到了一本书"单片机编程魔法师之高级裸编思想"在没学会ucos的阶段学习用这种思想过度感觉非常nice!单片机是...

2019-03-30 18:17:47 32411 3

原创 STM32的SWD使用说明

SWD下载口使用说明STM32的GPIO的默认下载口是JTAG,所以在需要在引脚上映射到SWD功能。必须保证JTAG的部分引脚配置放置在所有GPIO配置的最后,或者是在使用那部分引脚时使用map映射函数。/*JTAG做普通引脚时GPIO最后配置*/void JTAG_GPIO_Config(void){ GPIO_InitTypeDef GPIO_InitStructure; R...

2019-03-15 18:05:42 6776

原创 leetcode-两数之和

给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。示例:给定 nums = [2, 7, 11, 15], target = 9因为 nums[0] + nums[1] = 2 + 7 = 9所以返回 [0, 1]int* twoSum...

2019-02-13 20:00:33 155

原创 leetcode-整数反转

给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。示例 1:输入: 123输出: 321示例 2:输入: -123输出: -321示例 3:输入: 120输出: 21注意:假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [−231, 231 − 1]。请根据这个假设,如果反转后整数溢出那么就返回 0。int reverse(int ...

2019-02-13 19:50:44 242

原创 leetcode-回文数

判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。示例 1:输入: 121输出: true示例 2:输入: -121输出: false解释: 从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。示例 3:输入: 10输出: false解释: 从右向左读, 为 01 。因此它不是一个回文数。bool isP...

2019-02-13 19:24:45 220

原创 单向队列-入队-出队-测长-删除-打印

单向队列-入队-出队-测长-删除-打印#include &amp;lt;iostream&amp;gt;using namespace std;//队列的入队-出对-测长-打印typedef struct node{ int data; struct node *next;}node;typedef struct _Queue{ struct node* front; struct no...

2019-01-26 20:18:54 220

原创 双向链表-创建-打印-测长-查找-插入-删除

双向链表创建-打印-测长-查找#include &amp;amp;amp;lt;iostream&amp;amp;amp;gt;using namespace std;typedef struct DbNode{ int data ; struct DbNode *left; struct DbNode *right;}DbNode;//根据数据创建节点DbNode *Create(int data){ DbNode...

2019-01-24 19:29:52 329

原创 约瑟夫问题

单向循环链表#include &lt;iostream&gt;#include "stdio.h"#include "string.h"using namespace std;typedef struct node { int data; struct node *next;}node;node *Create(int n){ struct node *pRet = NU...

2019-01-24 12:57:42 209 1

原创 有序单链表的合并-递归方式

有序单链表的合并#include &lt;stdio.h&gt;#include "stdlib.h"typedef struct node { int data; struct node *next;}node;struct node *create(){ int i =0; struct node *head, *p, *q; int x = 0; head = ...

2019-01-23 13:41:31 369

原创 面试训练(下)

对于一个频繁使用的短小函数,在C语言中应用什么实现,在C++中应用什么实现?c用宏定义,c++用inline接入网用的是什么接口?V5接口voip都用了那些协议?H.323协议簇、SIP协议、Skype协议、H.248和MGCP协议unsigned char *p1;unsigned long *p2;p1=(unsigned char *)0x801000;p2=(unsign...

2019-01-09 12:25:38 307

原创 面试训练(上)

面试题训练关于数组越界的问题新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入关于数组越界的问题void te...

2019-01-07 18:54:36 255 1

原创 c++中命名空间与作用域

endl代表换行操作符重载是运用函数实现的。命名空间和作用域命名空间(namespace)是一种将相关的类型进行分组的逻辑命名方案。它将各种命名实体进行分组,各组间可以互不影响,避免出现重名,这与jave的包机制类似。学习本章,读者可以更好理解大型开发中的各种设计规划,更好地深入学习项目构建。命名空间的定义命名空间用namespace来声明,后面跟空间的名称,名称之后是由{}包含起来的声...

2018-12-11 23:28:29 2008

原创 类的具体表现--对象

定义对象对象是类的实例,它属于某个已知的类。因此定义对象之前,一定要先定义该对象的类。下面简单的介绍对象的定义。对象在确定了它的类以后,定义格式如下:《类名》《对象名表》其中,《类名》是特定的对象所属的类的名字,即所定义的对象是该类类型的对象。《对象名表》中可以是一个或多个对象名,多个对象名时用逗号分隔。也可以是指向对象的指针或引用名,数组。student s1,s3; //普通对象st...

2018-12-08 13:42:39 769

原创 C++中类的封装-下

构造函数构造函数就是构造类的实例时,系统自动调用的成员函数。当一个对象被创建时,它是否能够被正确的初始化,在c++中是通过构造函数来解决的。每当对象被声明或者在堆栈中被分配时,构造函数即被调用。构造函数是一种特殊的类成员,其函数名和类名相同,声明格式:《函数名》(《参数列表》);class student {private: int id; float chinese,english...

2018-12-01 00:10:42 229

原创 C++类的封装

面向对象基本概念面向对象的优点类的概念类是一种抽象概念:比如“电脑”就是一种抽象的事物…对象由类来定义,类是对象的模板。类规定了对象内部的属性,创建该对象的特性,以及对象在其属性上的行为。类本身并不存在,而是以对象的形式出现,因此类就是一块模板。对象是一个动态的概念,类是静态的概念。每一个对象都存在着有别于其他对象的属性与行为,这些熟悉可以随着它自己的行为而发生动态变化。类则是源代码...

2018-11-22 23:14:38 200

原创 操作符和表达式

操作符算术操作符“+ - * / %”太简单了,不解释。移位操作符“&amp;lt;&amp;lt;或&amp;gt;&amp;gt;”左移或右移位操作符,也不想解释,就是任性。位操作符“AND OR XOR”与&amp;amp;,或|,异或^,也不讲。单目操作符“! ++ - &amp;amp; sizeof ~ – + *” 非,自增,减,与,判断操作数类型长度,求补,自减,加,乘。关系操作符“&amp;

2018-11-07 19:20:21 239

原创 c的数据

基本数据类型整型家族整型家族包括字符,短整型,长整型,整型,它们分为有符号的和无符号的两种。类型最小范围char0-127signed char-127-127unsigned char0-255short int-32767-32767unsigned short int0-65535int-32767-32767unsi...

2018-11-04 14:15:48 352

原创 标准C库函数

标准c库函数头文件列表&amp;amp;lt;assert.h&amp;amp;gt;诊断&amp;amp;lt;ctype.h&amp;amp;gt;字符检测&amp;amp;lt;errno.h&amp;amp;gt;错误检测&amp;amp;lt;float.h&amp;amp;gt;系统定义的浮点型界限&amp;amp;lt;limits

2018-10-31 18:20:02 2597

原创 STM32-(SysTick定时器,EXTI外部中断/事件控制器)

Systick系统定时器介绍:systick定时器上属于CM3内核中的一个外设,内嵌在NVIC中。系统定时器是一个24位向下计数的计数器,计数器每一次计数的时间是1/SYSTICK,一般我们设置SYSTICK为72M。当重载数值寄存器的值递减到0时,系统定时器产生一次中断,以此循环。使用范围:1.一般用于操作系统,用于产生时基,维持操作系统的心跳。使用的寄存器:CTRL,LOAD,VAL,C...

2018-10-24 19:49:18 2650 1

原创 关键字

目录:1.静态内存与动态内存 2.c与c++ 中的动态内存分配 3.c++中的命名空间 4.强制类型转换静态内存与动态内存首先我们先要理解静态内存和动态内,以及他们的区别。1. 静态内存静态内存是指在程序开始运行时由编译器分配的内存,它的分配是在程序开始编译时完成的,不占用CPU资源。 程序中的各种变量,在编译时系统已经为其分配了所需的内存空间,当该变量在作用域内使用完...

2018-10-24 18:22:54 138

原创 STM32-(ADC,DMA,重映射)

STM32的高级定时器的功能应用高级定时器功能框图时钟源高级定时器有四个时钟源可以选择:1.内部时钟CK_INT内部时钟源CK_INT主要来源于芯片内部,为72M,一般情况下我们都是使用内部时钟。当从模式控制寄存器TIMx_SMCR的SMS位等于000时则使用内部时钟。2.外部时钟模式1:外部输入引脚TIx(1,2,3,4)时钟信号输入引脚共有4个,分别是TI(1,2,3,4),...

2018-10-17 20:01:11 3156

原创 g-code 命令解释_2

@TOC(GCODE-2)M commandGCODE_M84():设置步进电机自动关闭的时间。GCODE_M92():设置3D打印机内存中XYZE的步进电机的分辨率。GCODE_M104():设置挤出头的目标温度。可以不需要立即到达这个温度才执行下一条g语句。相关参数:Snnn:目标温度Tnnn:对应的挤出头编号Pnnn:是否等待前面的指令完成后,再开始设置挤出头温度。Fnnn:...

2018-10-11 20:25:11 6171

原创 g-code命令解释_1

@TOC(G-CODE 解释_1)G command#pragma innline void fun(){} //内联编译把fun函数内联到调用它的函数体内。以下函数都可以内联编译:static void GCODE_G0_1():提取G0/G1的数据命令,移动命令的数据预处理,在屏上刷新一次坐标。static void GCODE_G2():获取弧坐标并移动。static void ...

2018-10-09 19:33:17 4837

原创 c和指针

文章目录函数的参数函数的参数c语言中所有的参数都是以“传值调用”方式进行传递,这意味着函数将获得参数值的一份拷贝。这样,函数可以放心修改这个拷贝值,而不必担心会修改调用程序实际传递给它的参数。这个行为与modula和pascal中的值参数相同。c的规则很简单:所有参数都是传值调用。但是,如果被参数传递的参数是一个数组名并且在函数中引用了函数内的元素,那么在程序中对数组元素进行修改实际上修改的...

2018-10-08 19:08:45 649

原创 marlin固件函数解析

marlin中Arduino主程序架构setup()Loop()setup()setup()一般作为初始化的动作void setup(){ setup_killpin(); setup_powerhold(); MYSERIAL.begin(BAUDRATE); SERIAL_PROTOCOLLNPGM(&amp;amp;quot;start&amp;amp;quot;); SERIAL_ECHO_START; //代码段1 ...

2018-10-05 19:37:49 5226

原创 marlin固件解析

**@[TOC] G-code总结**. 关于G代码的学习总结学习3d打印机的基础就是了解并且掌握g-code文件,实际上g-code指的是3d模型在进入3d打印机实际打印之前,必须要经过切片器处理而成的一种中间格式文件。这种中间格式文件的内容,实际上就是每一行3d打印机固件所能理解的命令。而这种命令,也被称为g-code命令。是3d打印机与pc之间最重要的命令交互界面。常见的计算机与3...

2018-09-28 20:40:53 9475 2

原创 函数升级下——函数重载

目录:1.重载的概念 2.重载的条件 3.重载的限制 4.函数重载与函数指针 5.c和c++的相互调用重载的概念在自然语言中的上下文:洗衣服,洗脸,洗脑,洗车,戏马桶。 结论:能和“洗”字搭配的词汇有很多 洗字和不同的词汇搭配有不同的含义由上所述推知:同一个标识符在不同的上下文有不同的意义 重载的条件在函数重载至少满足下面的一个条件: 1.参数个数不同 2...

2018-09-10 21:40:27 160

原创 函数的升级上-内联函数

目录:1.宏的副作用2.c++中引进的内联函数宏的副作用:宏的副作用:由于c中的宏代码片段由预处理器处理,进行简单的文本替换,没有任何编译过程。所以在c++里面就推荐使用内联函数来代替宏代码片段。 c++中使用inline关键字声明内联函数 c++中引进的内联函数: inline int func(int a,int b) { ...

2018-09-08 21:19:07 234

原创 c++对c的提升

目录:c和c++中布尔类型的区别c和c++中三目运算符的区别引用在c++里的应用c和c++中布尔类型的区别:c中布尔类型bool其实是int型只不过规定了为0或1; c++中bool可取的值只有true和false两个关键字。 c++中理论上bool只占用一个字节,有的编译器可以对多个bool变量分别给到同一个字节的不同bit位上。c和c++中三目运算符的区别:...

2018-09-06 18:19:48 365

原创 关于C与C++的问题总结

关于c与c++的学习总结。目录:1.c++对c的加强2.c与c++中const变量的区别3.register关键字在c++的变化4.c++对struct类型的加强c++对c的加强:在c++中更强调语言的实用性,所有的变量都可以在需要使用时在定义。 int c=0;printf(&amp;quot;begin...\n&amp;quot;);for(int i=0;i&amp;amp;lt;10

2018-09-05 22:16:16 300

stm32f1xx-UCOSIII开发

STM32F1xx的UCOSIII开发攻略,内部包括了UCOSIII固件讲解,工程建立。

2018-10-18

空空如也

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

TA关注的人

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