自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(76)
  • 收藏
  • 关注

原创 GD32串口中断接收数据实现LED亮灭

【代码】GD32串口中断接收数据实现LED亮灭。

2024-06-02 23:06:26 144

原创 串口printf发送

链接: [link]https://download.csdn.net/download/weixin_44355245/89388735)

2024-06-02 17:58:55 191

原创 基于systick中断实现按键消抖功能(融合状态机)

【代码】基于systick中断实现按键消抖功能(融合状态机)

2024-06-02 13:41:15 184

原创 GD32进行外部中断

【代码】GD32进行外部中断。

2024-05-27 22:27:18 216

原创 结构体中的函数指针

/ 定义函数指针a_func// 定义函数指针b_func}print_ops;// 第一个函数// 第二个函数。

2024-05-01 18:34:07 248

原创 C++萃取的实现

#include <iostream>#include<string.h>using namespace std; template<typename T>struct my_is_pod{ static bool value; }; template<typename T>bool my_is_pod<T>::value = false;template<>struct my_is_pod<in

2024-04-24 08:45:15 64

原创 RTOS中断处理过程中的顶半和底半操作

在RTOS中,中断服务程序(ISR)的操作称为顶半操作,RTOS程序的任务操作成为底半操作。

2024-04-23 23:57:35 412 2

原创 同一个网段下实现网络共享文件

网络共享文件的前提是两个设备在同一个网段下。该案例情况:通过PC机远程访问吊舱内SD卡的内容,无需将SD卡从吊舱取下再插入PC机上。共享文件设置控制面板->程序->->程序和功能->启动和关闭Windows功能,勾选SMB 1.0/CIFC文件共享支持,最后重启电脑。设置完成后,在任意一个文件夹的路径上输入:\+IP。...

2024-04-16 21:11:17 208

原创 FreeRTOS互斥锁

拿电脑中文档举例:当一个文档已经被打开,这时如果再双击打开这个文档,则会提示“操作无法完成,因为文件已在word软件中打开”。这是因为操作系统在第一次打开文件的时候,给文件设置了一把锁。而如果后面还有程序想要操作文件,则因为上锁的原因,打开失败。避免暂停系统运转,纯逻辑层面解决了临界资源争抢的问题。另外还能解决优先级反转的问题锁的机制:资源我正在用,已经上锁,我什么时候解锁,你什么时候用。上锁:防止随意访问解锁:有权访问。

2024-04-16 21:07:19 562

原创 FreeRTOS信号量

讲解FreeRTOS信号量的使用

2024-04-07 22:35:01 404

原创 用DMA传送LCD数据

前面我写了“FreeRTOS驱动ILI9488液晶”的代码,但是全程是使用CPU进行数据传送的,效率很低,所以本章进行DMA数据传输,解放CPU。3、因为只是实现刷屏一种颜色,所以不需要源地址自增,而目的地址只能是FSMC的映射地址0x64000002,所以也不自增;1、使用DMA传输数据的路径是从内存传输到FSMC中,都是在单片机内部进行,所以是Memory To Memory;完成上述配置后,将DMA相关配置代码添加进上期代码中,如下图所示。4、因为使用的是RGB565格式,所以字宽为半字。

2024-04-06 22:52:46 392

原创 51单片机控制IIC

IIC.c#include"IIC.h"#include<reg51.h>void delay10us(void) //误差 0us{ unsigned char a,b; for(b=1;b>0;b--) for(a=2;a>0;a--);}void I2C_Start(void){ SCL = 1; delay10us(); SDA = 1; delay10us(); SDA = 0; delay10us();

2024-04-03 09:15:07 142

原创 51单片机之DS18B20

DS18B20.h#ifndef __DS18B20_H__#define __DS18B20_H__#include<reg51.h>sbit DSPORT = P3^7;void delay600us(void);void delay15us(void);unsigned char Ds18b20Init(void);void Ds18b02WriteByte(unsigned char dat);unsigned char Ds18b02ReadByte(void)

2024-04-03 09:14:50 161

原创 51单片机控制LCD1602

LCD1602.c// 对LCD1602的底层和高层做封装#include"LCD1602.h"#include<reg51.h> #define LCD1602_DB P0sbit LCD1602_RS = P2^6;sbit LCD1602_RW = P2^5;sbit LCD1602_EN = P2^7; /*******************底层******************/void Read_Buzy(void){ unsigned char

2024-04-03 09:14:24 149

原创 重定位引入和链接脚本

大部分指令都是位置有关编码我们在设计一个程序时,会给这个程序指定一个运行地址。我们在写程序时,其实心里知道将来被运行时的地址的,而且必须给编译器链接器指定这个地址才行。最后得到的二进制程序理论上时和你指定的运行地址有关的(就叫位置有关代码)。但是有个别特别的指令他可以跟指定的地址没有关系,也就是说这些代码实际运行时不管放在哪里都能正常运行。

2024-04-03 09:13:20 127

原创 利用FreeRTOS驱动ILI9488液晶

从原理图中可以看到片选引脚为NE1,但是我用的是GD303,GD303的NE1对应STM32F1的NE2,所以片选选择NE2,a、打开Img2Lcd软件(有需要的可以私信我),点击左上角的打开按键,选择需要显示的图片;b、点击像素,将水平和垂直数据分别改为320和480,如下图所示。,所以将PA1设置为GPIO_Output,对应的参数默认即可,如下图所示。b、修改左侧栏最大宽度和高度,分别设置为320和480,其他设置如上图所示;RS在原理图中为A0,图片的格式为RGB565,所以数据位宽为16位。

2024-04-02 22:27:15 1136

原创 空闲任务(IDLE)

问:不创建任何任务,直接启动调度器会怎样?调度器会无任务可调吗?答:如果所有任务都处于阻塞、挂起状态,而没有一个任务是就绪的话,那调度器就没有用了。RTOS一定有一个用来垫底的任务,即“空闲任务”。它永远处于就绪状态,一旦所有任务都被暂停,空闲任务就会被调度器调用。我们可以把空闲任务称为“背景任务”。

2024-02-26 10:18:31 324

原创 C++的引用符号

#include<iostream>using namespace std;void swap3(int &pa, int &pb);int main(){ int x = 4; int y = 6; swap3(x, y); cout << "x = " << x << ", y = " << y << endl; return 0; } void swap3(int &

2024-02-26 09:01:04 360

原创 C++枚举enum

#include<iostream>using namespace std;//enum day{mon, thu = 2, wen};//完全写法 //enum class day:unsigned int {mon, thu, wen};//简写方法1//enum class day{mon, thu, wen};//简写方法2,没有创造命名空间 enum day{mon, thu, wen}; int main(){ day d1; d1 = day:

2024-02-26 09:00:48 102

原创 C++中子类和父类的兼容关系

C++中子类和父类的兼容关系子类是父类的超集,子类相当于可以裁剪成父类。按照这个逻辑,子类可以当父类来用,所输出的内容是父类的内容。#include<iostream>using namespace std;//定义父类class Person{public: int age; Person(){}; Person(int age); void speak(void);};//定义子类class Man:public Person{public: int

2024-02-26 08:58:59 218

原创 set的三种遍历

#include <iostream>#include<set>#include<algorithm>using namespace std; int main(void){ set<string> s1; s1.insert("cat"); s1.insert("dog"); s1.insert("horse"); //set的第一种遍历方法ranged_for for(auto s: s1) { cout <&lt

2024-02-26 08:58:36 159

原创 类模板特化示例

// 结论优先级:普通函数 > 模板函数的特化版本 > 模板函数的泛化版本 #include<iostream>#include<algorithm>using namespace std;template <typename T>class People{public: void func(T a) { cout << "in People func(T a),a = " << a << end

2024-02-26 08:57:22 83

原创 模板特化简单示例

// 结论优先级:普通函数 > 模板函数的特化版本 > 模板函数的泛化版本 #include<iostream>#include<algorithm>using namespace std;template <typename T>bool GreaterThan(T a, T b){ if(a > b) { return true; } else { return false; }}//对GreaterTha

2024-02-26 08:56:40 61

原创 lambda表达式

#include <array>#include <iostream>#include<algorithm>#include <iterator>using namespace std; int main(void){ [](){}(); [](){cout << "hello" << endl; }(); [](int i){cout << i << endl;}(5); auto

2024-02-26 08:56:20 99

原创 C++谓词

#include <array>#include <iostream>#include<algorithm>using namespace std; /*bool IsGreater(int a){ return a > 0;}*/// 用函数对象实现 class MyGreater{public: bool operator()(const string &s1, const string &s2) { r

2024-02-26 08:55:59 74

原创 C++的array容器类

定义array#include<iostream>#include<array>#include<string>using namespace std;int main(){ array<int, 3> a1; //定义了,但是没有初始化 array<int, 3> a2{1, 3 ,5}; //定义并初始化 array<int, 3> a3 = {1, 3 ,5}; //和第二种方法是一样的 arr

2024-02-26 08:55:34 67

原创 C++模板继承1

单参数模板继承#include<iostream>#include<string>using namespace std;template <typename T> class Person{public: T x;public: Person(){}; Person(T a):x(a){}; void print(void); };template <typename Ty> class Man:public Perso

2024-02-26 08:55:09 153

原创 SVC(系统服务调用)

它是一个超级中断,是现代多任务操作系统的重要根基,下面是SVC汇编代码,暂时看不懂,先放到这里,后期能力提升后再来理解。

2024-02-26 08:54:32 245

原创 “一次性”任务

比如:开机自检、开机后要在屏幕上显示一下LOGO、开机时需要播放一段用户指导视频等等。一定要显性调用xTaskDelete对无用任务进行删除!用xTaskDelete()删除动态创建的任务即可。,否则容易Hardware Failure系统崩溃。因为某些任务只运行一次。

2024-02-26 08:53:40 160

原创 APM姿态旋转理论基础

APM姿态旋转理论基础一、坐标系1.1 NED坐标系1.2 机体坐标系二、欧拉角三、旋转矩阵3.1 基本公式3.2 矩阵作差四、四元数4.1 四元数与轴角的相互转换4.2 四元数表示旋转4.3 四元数与旋转矩阵4.4 四元数与欧拉角一、坐标系无人机领域中最重要的就是惯性坐标系和机体坐标系。1.1 NED坐标系因为在现实中通常需要在平面控制无人机,因此NED坐标系通常作为无人机领域的导航坐标系使用。NED坐标系如下图绿色坐标系,即北东地坐标系,三个方向始终保持不变。1.2 机体坐标系机体坐标系

2024-02-25 16:06:07 631

原创 C++模板运算符重载

#include<iostream>#include<string>using namespace std;template <typename T> class Person{private: T age;public: Person(){}; Person(T a); //运算符+ Person<T> operator+(const Person<T>& other); //运算符+= Pe

2024-02-25 16:05:26 183

原创 C++类模板

#include<iostream>#include<string>using namespace std;//定义模板类template <typename T> class People{private: int age; public: People(){}; People(int a); void print(T x); }; template <typename T> People<T>::Peo

2024-02-25 16:05:10 191

原创 C++友元函数模板

#include<iostream>#include<string>using namespace std;//必须类和友元函数都要前置声明template <typename T1, typename T2> class Person;template <typename T1, typename T2> void print(const Person<T1, T2>& pn);template <typenam

2024-02-25 16:04:55 199

原创 C++友元函数

外部友元函数#include<iostream>#include<string>using namespace std;class Person{private: int age;protected: int height;public: string name; Person(){}; Person(int age, int height, string name); friend void dis_info(Person &pn);}

2024-02-25 16:04:32 90

原创 S5PV210时钟系统简介

MSYS:CPU、DRAM控制器、IRAM&IROMDSYS:都是和视频现实编解码等相关的模块PSYS:和内部各种外设时钟有关,比如串口、I2C、AC97、USB等为什么内部要分为3个域?因为210内部的这些模块彼此工作时钟速率差异太大了,所以有必要把高速的放在一起,相对低速的放一起。

2024-02-25 16:03:23 487

原创 C语言的指针

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档。

2024-02-25 16:02:06 603

原创 C++static静态成员用法

#include<iostream>using namespace std;class Person{public: int age; static int height; static void print(int age);};// 静态成员变量和普通成员变量的区别是:静态成员变量需要在类的外面重新定义 int Person::height = 23;void Person::print(int age){// cout << "age = "

2024-02-25 15:58:40 171

原创 C++运算符重载示例

#include<iostream>using namespace std;class coordinate{public: int x; //x坐标 int y; //y坐标 coordinate(); //默认构造函数1 coordinate(int x0, int y0); //重载构造函数2 void print(void); //打印属性信息函数声明 //定义运算符+的重载 coordinate operato

2024-02-25 15:58:30 113

原创 C++拷贝构造函数

#include<iostream>#include<string>using namespace std;class Person{public: string name; int age; bool male; int *pInt; Person(){}; Person(string name, int age, bool male); //拷贝构造函数声明,拷贝构造函数的重点 Person(const Person& pn); ~

2024-02-25 15:58:21 93

原创 C++多继承二义性问题(菱形继承问题)

C++多继承二义性问题(菱形继承问题)这是多继承二义性问题的另一个常见问题,叫菱形问题。简单来说是,祖类为A,父类为B和C,子类为D,当我们想调用祖类A的成员时,编译器出现歧义的编译错误。解决方法:对父类进行虚继承祖类,看如下代码:#include<iostream>using namespace std;class A{public: void print(void);};//父类B虚继承祖类Aclass B:virtual public A{ };//父类

2024-02-25 15:58:11 107

用串口中断接收数据实现LED灯亮灭

用串口中断接收数据实现LED灯亮灭

2024-06-02

uart0串口printf发送代码(没有中断)

uart0串口printf发送代码(没有中断)

2024-06-02

基于systick中断进行按键消抖功能

本资源通过systick中断实现软件消抖,更贴近项目实战,同时使用状态机功能对按键的释放、缺人按下、短按、长按四个状态进行转化

2024-06-02

使用GD32进行外部中断的示例

在key_drv.c文件中,初始化了EXTI0、EXTI13和EXTI14,并且通过EXTI0_IRQHandler和EXTI10_15_IRQHandler两个中断服务程序进行了3个LED灯的反转

2024-05-27

中断中释放信号量要小心 I am FromISR

以串口中断为例,讲解了如何正确的在中断中释放信号量,其中xSemaphoreGiveFromISR(uart_rx_sem, &taskWoken)为中断释放信号量的函数,portYIELD_FROM_ISR(taskWoken)是切换当前的中断任务,使得接收到信号量的任务马上从就绪态转变为运行态

2024-04-23

FreeRTOS计数信号量示例代码

创造两个任务,第一个任务以100ms的速度释放信号量,第二个任务以500ms的速度接收信号量并进行LED翻转,如果按照二值信号量来进行的运行,则肯定会丢失信号量。

2024-04-07

FreeRTOS二值信号量示例

创建两个任务,第一个任务没一秒钟释放一次信号,第二个任务接收到信号后进行LED灯翻转

2024-04-07

STM32F1的FreeRTOS工程模板

该工程为STM32的FreeRTOS工程模板,使用CubeMX配置的。外设只配置了一个UART1,和GPIOA8和GPIOE6。

2024-04-07

DMA传输LCD的数据

利用DMA传输LCD的数据,解放CPU,实现LCD彩色刷屏

2024-04-06

GD303驱动ILI9488液晶屏

硬件为郭天祥老师的麒麟学习板,使用FreeRTOS创建任务,任务内容为驱动ILI9488液晶屏显示图片

2024-04-02

空空如也

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

TA关注的人

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