自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 FreeRTOS 在串口中断中推送消息到队列configASSERT((portAIRCR_REG&portPRIORITY_GROUP_MASK) <= ulMaxPRIGROUPValue);

使用的芯片是。

2024-12-02 15:36:09 516

原创 使用微信小程序控制蓝牙小车(微信小程序端)

微信小程序控制蓝牙小车,初学者入门项目,新手友好

2023-11-10 15:24:06 2452 8

原创 查询STM32/GD32 卡死的几种方法

定位单片机卡死,hardfault等异常的原因

2023-01-29 14:15:59 2011

原创 TMC步进电机驱动stealthChop

经过九九八十一难,芯片手册拜读了好多遍,找了好多资料,问了好多人使用TMC2660驱动步进电机终于成功了。最后的问题居然是硬件把管脚画错了,然后我又没有检查,哭。。。

2023-01-17 17:51:46 3097

原创 【GD32】SPI学习笔记

void rcu_config(void){ rcu_periph_clock_enable(RCU_GPIOA); rcu_periph_clock_enable(RCU_GPIOC); rcu_periph_clock_enable(RCU_SPI0); rcu_periph_clock_enable(RCU_SPI2); rcu_periph_clock_enable(RCU_AF);}void gpio_config(void){ /* .

2022-05-24 13:53:41 3658

原创 【UCOS-ii】OSTmrCreate 创建定时器

/************************************************************************** 创建一个定时器*描述: 应用程序代码调用这个函数来创建计时器*参数: dly:初始延时 如果将定时器配置为ONE-SHOT模式,则使用此超时时间 如果将定时器配置为周期模式,则这是进入周期模式前需要等待的第一个超时时间 period: “period”在定时器中重复。 如果指定了'OS_TMR_OPT_P.

2022-04-13 14:58:44 1260

原创 【UCOS-ii】OSQPend等待消息队列中的消息

/************************************************************************** 在队列中等待消息*参数: pevent 是一个指向与期望队列关联的事件控制块的指针 * timeout 是一个可选的超时时间(以时钟周期为单位)。 如果非零,任务将等待消息到达队列,等待时间为该参数指定的时间。 但是,如果指定0,则任务将在指定的队列上永远等待,直到消息到达。 * perr 指向将存储错误消息的位置指针,.

2022-04-07 10:06:55 1211

原创 【UCOS-ii】QPost 投递消息到队列

/************************************************************************** 投递消息到队列*参数: pevent 一个指向与所需队列关联的事件控制块的指针 * pmsg 消息发送的指针**返回值: OS_ERR_NONE 通信成功,消息成功投递 OS_ERR_Q_FULL 队列为空不能接受任何消息 OS_ERR_EVENT_TYPE 没有传递一个指向队列的指针 OS_ERR_P.

2022-04-07 09:22:48 414

原创 【UCOS-ii】OSTaskSuspend任务挂起

/* 暂停一个任务这个函数用来挂起一个任务,则该任务可以是调用任务 传递给OSTaskSuspend()优先级是调用任务或者OS_PRIO_SELF的优先级*参数:prio是要挂起的任务的优先级,如果指定OS_PRIO_SELF,则调用task会暂停自己并重新调度*返回值:OS_ERR_NONE 请求的任务被挂起 OS_ERR_TASK_SUSPEND IDLE 如果你暂停不允许的空闲任务 OS_ERR_PRIO_INVALID 指定的优先级高于最大的优先.

2022-04-06 11:17:54 1149

原创 【UCOS-ii】OSTaskCreateExt与OSTaskCreate

ucosii 任务创建

2022-04-06 10:53:51 914

转载 【C++】二叉树前序、中序、后序遍历迭代法

前序遍历模板解法:先将根节点cur和所有的左孩子节点入栈,并加入结果中,直到cur为空,用一个while循环实现,然后每弹出一个栈顶元素,就到达它的右孩子,再将这个节点当作cur,重复以上操作,直到栈为空。这里需要一个while循环。/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * T

2022-01-24 20:10:02 566

原创 【C++】leetcode刷题

给定一个整数数组 nums和一个整数目标值 target,请你在该数组中找出 和为目标值 target的那两个整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。你可以按任意顺序返回答案。示例 1:输入:nums = [2,7,11,15], target = 9输出:[0,1]解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1] 。示例 2:输入:nums = [3,2,4], ta...

2022-01-12 10:07:04 247

原创 【C++】运算符+,++重载

// P8.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include <iostream>using namespace std;class complex{ float real; //实部 float image; //虚部public: //重载运算符"+"的原型 complex operator+(complex right); //重载运算符"="的定义 complex operator=(complex r.

2022-01-05 16:17:35 623

原创 【C++】构造函数与析构函数

1.构造函数没有返回值2.一个类可以有多个构造函数,但是多个构造函数之间数据类型或者参数个数至少有一个不同3.创建一个对象的时候,系统会自动调用一次构造函数析构函数1.析构函数没有参数,没有返回值2.一个类中只有一个析构函数3.调用条件:函数执行结束,该对象所在类的析构函数会被自动调用以下是一些例子#include "stdafx.h"#include <iostream>using namespace std;const int MAX = 5;

2022-01-04 18:13:05 586

原创 【C#】一个简单的串口调试助手

C#开发: 通信篇-串口调试助手 - 杨奉武 - 博客园C# 文件操作详解(一)File类_luoyanqing119的专栏-优快云博客_c# fileC# string类型和byte[]类型相互转换_大佛爷的博客-优快云博客

2021-12-30 15:51:56 1683

原创 【C】辗转相除法(欧几里得算法)C语言实现

用于计算两个非负整数a,b的最大公约数原理:gcd(a , b) = gcd(b , a%b)假设要计算1536和690之间的最大公约数,运行欧几里得算法,过程如下

2021-12-16 10:47:47 1804

原创 【C】文件操作学习笔记

打开文件 fopen(); 关闭文件 fclose(); 从文件中读取一个字符 fgetc(); 从文件中写入一个字符 fputc(); 从文件中读取一行 fgets(); 向文件中写入一行 fputs(); 检查文件是否结束 feof(); fwrite() fread()

2021-12-15 17:50:18 1196

原创 【C】指针的左值与右值

今天看C和指针的时候有点对左值和右值的概念有点蒙,尽管以前看过了,emmm,反正就是学过的东西不常用就忘记了左值: 必须是一个很明确的内存存储单元,可以用来被赋值右值: 必须是一个能被读出来的确确实实的值,这个值可以是数据可以是指针,可以是结构,只要能被读出来都可以被定义为右值//有如下语句定义了两个变量char ch = 'a';char *cp = &ch;表达式 右值 左值 ch 表示'a' 表示ch的内存地址 &ch .

2021-12-14 16:06:21 1726

转载 【高等数学】简单理解泰勒公式

绝对是我见过的最好的回答哈哈哈如何通俗地解释泰勒公式? - 知乎

2021-11-30 12:11:21 314

原创 【C#】interface接口

接口是为了实现多重继承而产生的。一个接口可以从多个基接口继承,而一个类或结构可以实现多个接口语法格式:访问修饰符 interface 接口名{ //接口成员}public interface IMyInterface{ void ShowMsg();}接口可包含方法、属性、事件或索引器这4种成员类型,但不能包含字段,也不能设置这些成员的具体值,即只能定义,不能赋值。接口特性:不能直接实例化接口。 接口可以包含方法、属性、事件、索引器。 接口不包含方法的实

2021-11-12 16:17:02 1003

原创 【C】文件操作练习

练习题目是某高校的考研专业课题目,题解都是自己写的,如果有错误,或者更优解,将会十分感谢能够指出1.某文本文件records.txt存放了某公司30位员工的打卡次数,格式如下工号 姓名 次数S1001 张三 25S1002 李四 20......编写程序,输出打卡次数最多的员工的工号、姓名和打卡次数。注意:打卡次数最多的员工可能不唯一,这时候要把他们都输出#include "stdio.h"#include "string.h"typedef.

2021-10-29 10:31:07 694 3

原创 【C】使用fgets和scanf分别从标准输入,对于‘\n‘和‘\0‘的处理

今天偶然使用了这两个函数,发现从标准输入的时候fgets与scanf存在差别一、fgets输入数据小于字符数组长度//输入小于数组长度int main(){ char ch[10]; fgets(ch, 10, stdin); for (int i = 0; i < 10;i++) { printf("%d ", ch[i]); }}//输入5698//输出 53 54 57 56 10 0 -52 -52 -52 -52由于fgets输入要求是字符串

2021-10-28 17:56:04 840

转载 【C】getchat与putchar笔记

浅谈getchar()和putchar()https://blog.youkuaiyun.com/sx2448826571/article/details/78553427?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522163532039316780265411493%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=1635320393167802

2021-10-27 15:57:02 969

转载 【C】指针数组与数组指针

数组指针(也称行指针)int (*p)[n]()的优先级高,首先说明p是一个指针,指向一个整型的一维数组,这个一维数组的长度是n,要执行p+1时,要跨过n个整型数组的长度如果要将二维数组赋给一指针,应这样赋值:int a[3][4];int (*p)[4]; //该语句定义的是一个数组指针,指向含4个元素的一维数组p = a; //将该二维数组的首地址赋给p,也就是a[0]或&a[0]p++;

2021-10-26 13:07:43 95

原创 【C】const int *a 与int *const a,int const * a

1.const int *aconst修饰的是int,而int是一个整型*a所指向的对象的值不能改变,但是指针的指向可以变,使其指向不同的对象const int *a = 0;const int b = 1;int c = 1;a = &b; //ok,将b的地址给a,改变a指针的指向a = &c; //ok*a = 2; //err,不能改变a指针指向对象的值2.int *const a这里const是修饰a,a表示

2021-10-07 19:32:35 764

原创 【C】gets、fgets的分析和比较

1.getsman手册中的描述NAME gets - get a string from standard input (DEPRECATED)SYNOPSIS #include <stdio.h> char *gets(char *s);DESCRIPTION Never use this function. gets() reads a line from stdin into the buffe

2021-10-03 08:48:26 199

原创 【C】字符串中查找字符strchr,字符串中查找子串strstr

strchr在字符串中进行搜索的函数是strchr,它接受两个参数(Linux man手册中的描述)SYNOPSIS #include <string.h> char *strchr(const char *s, int c); char *strrchr(const char *s, int c);该函数在字符串中返回字符参数第一次出现的位置,成功就返回指向该位置的指针,未找到返回NULLstrstrSYNOPSIS

2021-10-02 20:54:39 339

转载 【计算机网络】TCP面向字节流

这绝对是我见过最优秀的回答法国政府委托人将自由女神按照从上到下,从左到右(类似电视机一帧图像显示方式)的顺序编号,编号为1-300,编号1用1号箱子打包,编号2用2号箱子打包,以此类推,一共300个箱子,快递公司并不关心箱子里装的是啥,在他们眼里这些都是货物,只关心的是如何把这些货物按照法国政府提交的编号顺序(1,2,3…300)运输到目的地,然后按照相同的编号顺序(1,2,3…300)提交给美国政府,任务就算完成了。至于如何完成以上的任务(乱序、丢包重传)则可以参考以下这个故事。而基于TCP So

2021-09-23 10:55:38 532

转载 【C#】CheckedListBox控件的用法

https://blog.youkuaiyun.com/qq_28249373/article/details/74905884

2021-09-14 08:55:56 282

原创 【C#】Socket类的使用

客户端using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Windows.Forms;using System.Net.Sockets;using System.Threading.Tasks;using Syst

2021-09-13 17:16:24 902

原创 【C#】套接字网络编程TcpListener

TcpListener和TcpClient类为一组,用作客户端和服务器跳转门套接字网络编程TcpClienthttps://blog.youkuaiyun.com/qq_44708426/article/details/120253834TcpListener类用来侦听来自TCP网络客户端的连接。可使用TcpClient或Socket来连接TcpListener可使用IPEndPoint、本地IP地址及端口号或者仅使用端口号,来创建TcpListener。TcpListener类的属性TcpL.

2021-09-13 16:24:13 2690

原创 【C#】delegate委托用法

事件与驱动函数的对应关系就是通过委托(Delegate)类来关联的跨线程对控件进行操作 -----》委托(Delegate)其实委托(Delegate)类这种数据结构有些类似于之前C/C++中的函数指针。

2021-09-13 16:08:23 415

原创 【C#】套接字网络编程TcpClient类

1.TcpClient类TCPClient类使用TCP从因特网上请求数据。TCP建立与远程终结点的连接,然后使用此连接发送和接收数据包。TcpClient类属性TcpClient类的方法2.TcpListener类TcpListener类用来侦听来自TCP网络客户端的连接。可使用TcpClient或Socket来连接TcpListener。可使用IPEndPoint、本地IP地址及端口号或者仅使用端口号,来创建TcpListener。TcpListen类的属性T...

2021-09-13 11:33:13 8348 3

原创 【C#】Form窗体

窗体的本质就是利用System.Windows.Forms.Form类或者该类的派生类来创建窗体的组成主要包括图标、标题、位置和背景等可以在面板中进行设置,也可以通过代码实现1.属性面板打开属性面板有以下三种方法:创建WinForm程序之后,会有一个系统默认的窗体Form1。然后选中该窗体,单击右键会弹出一个命令菜单,接着选择“属性”命令,就能弹出“属性”面板 在菜单栏中选择视图命令,然后选择属性窗口命令,也能弹出属性面板 使用快捷键F42.属性包括以下2.窗体常用事件(点击.

2021-09-12 15:04:58 1898

原创 【STM32】定时器输出比较模式指定脉冲个数

前言:stm32f103rct6芯片,TIM4_CH3 (PB8); 中断内统计脉冲个数,如果介意中断太多太频繁占用cpu资源,或其他功能带的比较多,此方法不是好方法。(最近写这东西才发现认认真真看寄存器配置多重要,才有认认真真看stm32中文参考手册)用此(输出比较模式)驱动步进电机转动指定角度,以前用pwm模式写过步进电机的加减速控制一、通用定时器输出比较模式二、定时器初始化配置//TIM4 PWM部分初始化//PWM输出初始化//arr:自动重装值//psc:时钟预.

2021-08-30 16:16:30 4087

原创 【数据结构】二叉树先序遍历,中序遍历,后序遍历,层次遍历

// 二叉树.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include "stdio.h"#include "windows.h"#include <stdlib.h>typedef struct BitTree{ int data; //存放数据域 struct BitTree * lchild; //遍历左子树指针 struct BitTree * rchild; //遍历右子树指针}BitTree;typede.

2021-07-27 10:39:35 215

转载 [STM32]启动文件startup_stm32f10x_hd.s

启动文件中使用的ARM汇编指令汇总

2021-06-01 15:14:39 496

原创 【RT-Thread】 临界段的保护

临界段就是在执行不能被打断的代码段,最常见的就是对全局变量进行操作,临界段在系统调度和外部中断的时候会被打断。在RT-Thread中,系统调度最终也是产生PendSV中断,在PendSV里面实现线程的切换,所以对于RT-thread临界段的保护变成了把中断都关闭,NMIFAULT和硬FAULT除外。Cortex-M内核快速关中断指令Cortex-M内核专门设置了一条CPS指令,有4种用法,具体代码如下:CPSID I ;PRIMASK=1 ; 关中断CPSIE I ;PRIMASK=0 ;

2021-03-16 17:10:44 435

原创 【RT-Thread】学习笔记(实现就绪列表)

线程创建好之后,我们需要把线程添加到就绪列表里面,表示线程已经就绪,系统随时可以调度。就绪列表在 scheduler.c 中定义实现就绪列表定义就绪列表 将线程插入到就绪列表定义就绪列表//线程就绪列表rt_list_t rt_thread_priority_table[RT_THREAD_PRIORITY_MAX];数组下标对应线程优先级将线程插入到就绪列表线程控制块里面有个tlist成员,数据类型为rt_list_t,我们将线程插入到就绪列表里面,就是通过将线程..

2021-03-15 10:44:54 368

原创 【RT-thread】学习笔记(创建线程)

一、创建线程定义线程栈 定义线程函数 定义线程控制块 实现线程创建函数定义线程栈ALIGN(RT_ALIGN_SIZE)//定义线程栈rt_uint8_t rt_flag1_thread_stack[512];rt_uint8_t rt_flag2_thread_stack[512];定义线程函数(线程独立,无线循环,没有返回)void flag1_thread_entry(void *p_arg){ for(;;) {

2021-03-15 10:25:02 384

基于stm32的蓝牙智能锁.zip

基于stm32的蓝牙智能锁,采用stm32f103zet6,蓝牙模块用的HC-05,能够实现手机输入密码开锁,或者TFT屏幕开锁,屏幕使用的正点原子的那块2.8寸屏幕

2020-08-13

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

TA关注的人

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