自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(99)
  • 资源 (4)
  • 收藏
  • 关注

原创 define的一些骚操作:##操作连接符、#@字符化操作符、#字符串化操作符、\行继续操作

*使用*//*使用字符串化操作符,将ITEM字符串化*//*使用define定义以简化枚举*/STATUS(KS_RELEASE) /*稳定松开状态*/ \STATUS(KS_PRESS_SHAKE) /*按下抖动状态*/ \STATUS(KS_PRESS) /*稳定按下状态*/ \STATUS(KS_RELEASE_SHAKE) /*松开抖动状态*/ \STATUS(KS_NUM) /*状态总数(无效状态)*/ \/*由于上面使用了define,此处枚举得以简化*//*

2023-07-26 13:57:22 1266

原创 一文读懂函数指针

本篇是关于函数指针的一篇保姆级教程

2023-06-29 15:59:10 832

原创 线程创建&回收:pthread_creat和pthread_join

pthread_create()是一个POSIX线程函数,用于创建一个新线程。void *arg);这个函数创建新线程的主要步骤为:1. 检查传入的线程属性attr是否正确,如果为空则使用默认属性。2. 将start_routine函数和参数arg封装为线程任务。3. 系统将分配资源为新线程创建环境,并保存线程ID到thread参数。4. 新创建的线程会调用start_routine(arg)函数开始执行线程任务。5. 如果资源分配成功,pthread_create()返回0,否则返回错误码。

2023-06-20 14:52:04 1089

原创 最详细二进制文件操作fwrite、fseek、fread、ftell、getFilesize…

size*nmemb返回:成功读取的元素总数会以,size_t 对象是一个整型数据类型。如果总数与 nmemb 参数不同,则可能发生了一个错误或者到达了文件末尾。

2023-06-19 18:21:11 1507

原创 延时函数:普通延时,硬件定时器延时,系统定时器延时

此种延时是基于让MCU做一些无意义的循环操作来打发时间,优点是简单易懂,缺点是会占用MCU的处理资源且精度较低,主要用于程序简单、无严格时间要求的场景中。

2023-06-14 09:25:09 4442

原创 F103ZET6使用FSMC和HAL点亮ILI9341

(一)对应关系由STM32内部硬件原理定义,参见STM32F103xE 数据手册 表5 引脚定义(二)PE2 ------> FSMC_A23 地址输入(重要DC)(不同板子可能不同)PD4 ------> FSMC_NOE RD读使能PD5 ------> FSMC_NWE WR写使能PG12 ------> FSMC_NE4 片选(重要)(不同板子可能不同)(三)PG11 ------> LCD_RST 复位PG6 ------> LCD_BK 背光1)16个数据引脚;

2023-05-20 01:45:13 1408

原创 再论指针数组与数组指针

fun 函数的第一个形参是为了被修改,返回被复制后的字符串,第二个参数是被复制字符串的源,这个源数组是不能被修改的,但是因为传递的是地址,存在被修改的风险,所以加了 const 修饰,表明 src_str 指向的是“常量”,不能被修改。printf("%p\n", buf) 与 printf("%p\n", &buf) 这两句话的打印结果是相同的,表明它们的值相等,但是 printf("%p\n", buf + 1) 与 printf("%p\n",&buf + 1) 的打印结果完全不同。

2023-04-18 19:34:00 379 1

原创 C指针传参的一些思考

无意中看到了一段关于函数传参的例程,就总结了实际开发中常用到的几种传参处理方式,

2022-11-15 15:18:54 896

原创 RTThread:静态线程&动态线程

创建静态线程和动态线程

2022-06-10 16:25:32 2256

原创 使用CJSON 解析JSON 结构体数组【典型】

一、CJSON数据结构定义#define cJSON_False 0#define cJSON_True 1#define cJSON_NULL 2#define cJSON_Number 3#define cJSON_String 4#define cJSON_Array 5 //数组#define cJSON_Object 6 //对象or键名typedef struct cJSON { struct cJSON *next,*prev; /*遍历数组或对象链的前向

2021-11-20 19:46:37 18275 2

原创 RT Thread studio同时生成bin和hex文件

一、RTT默认生成bin文件默认选择Raw binary,则项目对应的debug文件夹下生成bin文件;修改成intel的话,则项目对应的debug文件夹下生产hex文件;二、同时生成bin和hex文件项目 属性-C/C++构建-设置-构建步骤-命令arm-none-eabi-objcopy -O ihex"rtthread.elf" "rtthread.hex"...

2021-09-02 23:12:40 2177 1

原创 调度器锁rt_enter_critical() & rt_exit_critical()

一、函数说明void rt_enter_critical(void); /* 进入临界区*/调用这个函数后,调度器将被上锁。在系统锁住调度器的期间,系统依然响应中断,如果中断唤醒了的更高优先级线程,调度器并不会立刻执行它,直到调用解锁调度器函数才尝试进行下一次度。void rt_exit_critical(void); /* 退出临界区*/当系统退出临界区的时候,系统会计算当前是否有更高优先级的线程就绪,如果有比当前线程更高优先级的线程就绪,将切换到这个高优先级线程中执行;如果无更高优先级线

2021-08-17 12:38:43 2897

原创 快速排序qsort函数用法

一、qsort函数简介排序方法有很多种:选择排序,冒泡排序,归并排序,快速排序等。 看名字都知道快速排序是目前公认的一种比较好的排序算法。因为他速度很快,所以系统也在库里实现这个算法,便于我们的使用。 这就是qsort函数(全称quicksort)。它是ANSI C标准中提供的,其声明在stdlib.h文件中,是根据二分法写的,其时间复杂度为n*log(n)。功能: 使用快速排序例程进行排序头文件:stdlib.h用法:void qsort(void* base,size_t nu.

2021-08-17 11:10:47 912

原创 断言ASSERT使用详解

一、assert的定义原以为assert 仅仅是个报错函数,事实上,它居然是个宏,并且作用并非"报错"在经过对其进行一定了解之后,对其作用及用法有了一定的了解,assert() 的用法像是一种"契约式编程",其表达的意思就是,程序在假设条件下,能够正常良好的运作,其实就相当于一个 if 语句:if(假设成立){ 程序正常运行;}else{ 报错&&终止程序!(避免由程序运行引起更大的错误) }但是这样写的话,就会有无数个 if 语句,甚至会出.

2021-08-07 13:25:14 659

原创 norflash和nandflash;SRAM和SDRAM

一、常见存储类型典型应用 名称 描述 MCU片内flash norflash nor flash数据线和地址线分开,可以实现ram一样的随机寻址功能,可以读取任何一个字节。但是擦除仍要按块(页)擦除。 因为按照字节寻址,所以程序可以在nor flash中运行。嵌入式系统多用一个小容量的nor flash存储引导代码。 U盘 nandflash nand flash同样是按块擦除,但是数据线和地址线复用,不能利用地址线随机寻址。读取只能按

2021-08-04 00:01:24 626 1

原创 电源引脚VDD、VSS、VDDA、VSSA、VREF+、VREF-、VBAT

总体电源框图一、名词解释名称 说明 备注 VCC 电路的供电正电压 一般表示模拟信号电源 GND 电路的供电负电压? 表示模拟信号地 VDD 芯片的工作正电压 表示数字信号电源 VSS 芯片的工作负电压 表示数字电源地 VDDA 芯片的工作正电压(模拟) VSSA 芯片的工作负电压(模拟) VDDD 芯片的工作正电压(数字) VSSD 芯片的工作负.

2021-08-03 17:35:50 21853

原创 线程同步之事件集event

一、事件集一个事件集中包含 32 个事件(一个 32 bit 无符号整型数),特定线程只等待、接收它关注的事件。可以是一个线程等待多个事件的到来(线程 1、2 均等待多个事件,事件间可以使用 “与” 或者 “或” 逻辑触发线程),也可以是多个线程等待一个事件的到来(事件 25)。当有它们关注的事件发生时,线程将被唤醒并进行后续的处理动作。在 RT-Thread 实现中,每个线程都拥有一个事件信息标记,它有三个属性,分别是RT_EVENT_FLAG_AND( 逻 辑 与 ) , RT_EVENT_

2021-05-12 14:01:53 1788

原创 互斥量之:与信号量区别;死锁;优先级翻转;递归锁

一、互斥量(一)互斥量的定义互斥量的状态只有两种,开锁或闭锁(两种状态值)。当有线程持有它后,互斥量将处于闭锁状态,由这个线程获得它的所有权。相反,当这个线程释放它时,将对互斥量进行开锁,失去它的所有权。当一个线程持有互斥量时,其他线程将不能够对它进行开锁或持有它,持有该互斥量的线程也能够再次获得这个锁而不被挂起。(二)互斥量的使用场合互斥量的使用比较单一,因为它是信号量的一种,并且它是以锁的形式存在。在初始化的时候,互斥量永远都处于开锁的状态,而被线程持有的时候则立刻转为闭锁的状态。互

2021-05-11 17:04:35 1137

原创 信号量使用之:线程间同步与互斥,线程与中断同步,资源计数

生产者与消费者问题本质是:解决线程间互斥关系和同步关系问题由于缓冲区是临界资源,它一个时刻只允许一个生产者放入消息,或者一个消费者从中取出消息,所以需要解决互斥访问的问题。同时生产者和消费者又是一个相互协作的关系,生产者生产以后,消费者才能消费,因此又存在一个同步问题。为了解决上述既互斥又同步的问题,需要定义如下3 个信号量分:①lock:信号量锁的作用,因为 2 个线程都会对同一个数组 array 进行操作,所以该数组是一个共享资源,锁用来保护这个共享资源。②empty:空位个数,初

2021-05-10 17:58:36 910

原创 RT-Thread临界段之rt_hw_interrupt_enable和rt_hw_interrupt_disable

一、PRIMASKPRIMSK=1 ;关闭中断PRIMSK=10;打开中断二、void rt_hw_interrupt_enable(rt_base_t level);有参数,无返回值该功能将设置指定的中断状态,该状态应由rt_hw_intterrupt_disable函数保存。 如果保存的中断状态是中断打开,该功能将打开系统中断状态。三、rt_base_trt_hw_interrupt_disable(void);有返回值,无参数此功能将返回当前系统中断状态并禁用系统中断。返回..

2021-05-07 18:34:38 4489

原创 常用内存操作函数

常用内存操作函数常用内存操作函数1.设置内存数据2.复制内存数据3.移动内存数据4.比较内存数据5.对齐分配内存6.释放对齐分配的内存总结常用内存操作函数内存操作是C语言的基础,常用的内存操作函数大致可以分成如下6类1.设置内存数据代码如下(示例):void* rt_memset ( void * s, int c, rt_ubase_t count )函数功能:此函数将内存的内容设置为指定的值参数s 源内存的地址c 将要设定的值count 源内存要被

2020-12-21 00:50:22 854

原创 short转换为char,提取单字节

本文描述:将两个字节长度的wdVersion,分别提取出低字节和高字节的值,此方法可以用于不同类型不同长度的单字节提取!(注释种的位操作的方法也可以,先 移位 后 位与 操作)wdVersion的类型为unsigned short。2字节取变量wdVersion(长度2字节)的第一个字节的值! 第一步,取首地址 &wdVersion 第二步,强制转换 (char*)&wdVersion 将2字节da...

2020-06-27 15:49:51 7416

原创 argc和argv,参数个数和参数值

argc:argument count 参数个数argv:argument value 参数值C/C++语言中的main函数,经常带有参数argc,argv,如下:int main(int argc, char** argv)int main(int argc, char* argv[])这两个参数的作用: argc 是指命令行输入参数的个数(以空白符分隔),而argv存储了所有的命令行参数 ;假如有一段程序是test.exe,如下所示#include <st...

2020-06-08 12:53:08 6987 1

原创 linux文件属性、文件权限管理和stat函数

1.linux中各种文件类型1.1 普通文件(-)regular file文本文件:文件中的内容都是由文本构成的,文本指的是ASCII码,Unicode码,utf8码等字符。其实,这些字符码的本质是数字(无论什么编码格式,对应的都是二级制的0和1)。常见的.c文件.h文件.txt文件等都是文本文件,其好处是可以被人轻松的编写和理解。二进制文件:二进制文件中存储的也是二进制的0和1,只不过这些数字并不是符合一定编码规则的数字,而是纯粹的数字0和1。gcc编译生成的a.out文件和arm-.

2020-06-04 00:44:57 1450

原创 linux中的文件IO、文件操作API、标准IO

1. 文件描述符fd2. 文件的打开,读文件,写文件3. OPEN函数的flag_13.1 文件的读写权限(O_RDONLY ; O_WRONLY ; O_RDWR )3.2 文件打开的内容操作(O_TRUNC ; O_APPEND)3.3 结束进程(exit;_exit;Exit)man 2 是系统调用 ; man 3 是库函数4. OPEN函数的flag_24.1 文件“创建打开”方式O_CREAT,不存在则创建(O_CREA...

2020-05-20 22:29:13 1012

原创 KEIL5 MDK5 快捷键 颜色 自动补全 设置

1. 快捷键设置1.1 点击工具栏右侧的小扳手configuration1.2 点击Short Keys标签,弹出快捷键设置页面1.3 左侧选中功能,右侧输入快捷键完成设置2. 自动补全设置2.1点击工具栏右侧的小扳手configuration2.2如下操作后,点击OK,重启MDK后生效3. 颜色设置3.1还是小扳手3.2选项卡选中“Colors&Fonts”即可设置...

2020-05-10 18:46:36 4896

原创 STM32标准库下外设的配置方式

使用STM32标准库,使用的功能如串口USART功能,DMA功能,NVIC功能,I2C功能,SPI功能等都有一个类似的配置流程。先定义端口和引脚(define),再定义初始化结构体(XX_InitTypeDef),然后配置初始化(XX_Config),最后使能一下即可(XX_Cmd)。1. 宏定义端口Port和引脚Pin(#define)1 /**2 * 串口宏定义,不同的串口挂载的总线和 IO 不一样,移植时需要修改这几个宏3 */4 5 // 串口 1-USART.

2020-05-10 18:34:26 934

原创 删除单向链表的头节点

1、使用pTemp保存头节点的指针域(第二个节点的首地址),2、删除(free)头节点,3、再将pTemp传给新的pHead进而指向新的头节点。/**copyright(c) 2018,HH*All rights reserved.*作 者:HH*完成日期:2020年3月19日*版本号:v1.0**问题描述:生成一条包含5个节点的单向链表,然后从头部开始依次删除,...

2020-03-19 00:33:12 9297 1

原创 C语言位操作 - bit 、byte的清零,置1,提取,判断

一、位操作概述针对MCU的嵌入是开发中经常涉及到寄存器的操作,例如GPIO配置低寄存器GPIOx_CRL(共32个bit),有时需要改变其中的一位或者几位bit值,同时不能影响其它bit位的值。例如,需要设置第0位bit=1时,不能简单的设置为:GPIOx_CRL=0x01 ,这样的方法会使得低配置寄存器GPIOx_CRL的其它比特位都置为0。对于二进制位操作来说:不管该...

2020-03-12 19:08:32 42198 7

原创 删除单向链表的最后一个节点

分为三个步骤:1、找到倒数第二个内存,把它的指针域置为NULL;2、将最后一个节点所占用的内存(堆内存)释放掉;第一步:

2020-03-07 20:05:42 11926 2

原创 向单向链表中部插入节点

构造一条含有两个节点的单向链表:学生A,学生B单向链表的某一节点后插入,知道此节点的指针域next即可例如向节点A后插入,节点C: C.next = A.next; //A的下一个地址,就是B的地址;C连接B A.next = &C;//A连接C向单向链表中部插入“学生C”并输出新的完整的单向链表:学生A,学生C,学生B/**copyrigh...

2020-03-07 10:51:40 486

原创 单向链表新增节点之头插法(接上一篇尾插法)

使用“头插法”在单向链表的头部插入新的节点与尾插法的区别是:只需要定义pHead(指向头部节点首地址)即可,不用定义pTail,更简单不变的还是中间指针“pNode”在传递新的节点地址!!!/**copyright(c) 2018,HH*All rights reserved.*作 者:HH*完成日期:2020年月4日*版本号:v1.0**问题描述:向单向链表头...

2020-03-05 00:01:07 1437

原创 C++基础概念

1、头文件形式的不同头文件的差别 C C++ stdio.h iostream math.h cmath string.h cstring stdlib.h cstdlib 2.1 新增动态内存分配运算符2.2 新增作用域运算符2.3 变量的引用2.4 常变量3 输入和输出C++的...

2020-03-04 23:33:05 128

原创 C++基础示例

类,数据成员(一般为私有private),成员函数(一般为公有public)一般的程序:若干对象+对象间的消息传递#include <iostream>#include<cstring>using namespace std;class Student{ public: void setdata(int n,string ...

2020-03-04 23:31:08 281

原创 链表新增节点之单向链表尾部插入新增节点

/**copyright(c) 2018,HH*All rights reserved.*作 者:HH*完成日期:2020年月4日*版本号:v1.0**问题描述:向单向链表尾部插入节点,新增并提供打印功能*输入描述:学生姓名*程序输出:;。*备注:*/#include <stdio.h>#include<string.h>#inclu...

2020-03-04 23:27:34 2569

原创 指针、寄存器、位操作

定义寄存器的绝对地址,并转换为指针进行位操作1、位操作示例一#define PERIPH_BASE ((unsigned int)0x40000000)#define APB2PERIPH_BASE (PERIPH_BASE + 0x00010000)#define GPIOB_BASE (APB2PERIPH_BASE+0x0C00)/...

2019-11-30 19:05:58 1309

原创 指针类型和指针强制转换

1、地址、字节、位位(bit)是电子计算机中最小的数据单位。每一位的状态只能是0或1。字节(Byte)是用于计量存储容量的一种单位,每一个字节由8位组成(1Byte = 8bit)。地址可以理解为在一片内存中,每个字节(Byte)的编号。他们在内存中的关系可以比作,内存是一栋大楼,字节(Byte)是大楼中的每一层,地址是楼层编号,位(bit)是每一层中的房间,每一层有8个房间...

2019-11-27 23:58:41 1141 1

原创 2018年7月1日

/**copyright(c) 2018,HH*All rights reserved.*作 者:HH*完成日期:2018年7月1日*版本号:v1.0**问题描述:while循环,1到100的加法*输入描述:;*程序输出:;*备注:sum=0的初始值一定要设置好!*/#include<stdio.h>int main(){ int n,sum;...

2019-11-27 23:43:45 108

原创 20118年6月29日

/**copyright(c) 2018,HH*All rights reserved.*作 者:HH*完成日期:2018年6月28日*版本号:v1.0**问题描述:条件运算符,优先级仅高于赋值运算符和逗号运算符!*输入描述:;;*程序输出:;。*备注:表达式1?表达式2:表达式3*条件运算符是C语言中,唯一的一个“三目运算符”!!!*/#include<std...

2019-11-27 23:43:28 118

原创 2018年6月28日

/**copyright(c) 2018,HH*All rights reserved.*作 者:HH*完成日期:2018年6月28日*版本号:v1.0**问题描述:体验逻辑短路;*输入描述:;;*程序输出:;。*/#include <stdio.h>int main(){ int a=5,b=6,c=7,d=8,m=2,n=2; (m=a...

2019-11-27 23:43:08 95

单片机原理及应用PIC18F452部分答案.pdf

浙江理工单片机原理及应用PIC18F452部分答案 主要涉及定时器,中断技术,汇编指令集

2021-11-15

DL/t698.45国南网报文解析.zip

该工具支持如下规约: 1.698.45报文解析;2.南网规约报文解析;3.376.2报文解析(茜茜写的);4.376.1规约帧结构解析;5.645.07表规约帧结构解析;6.101规约报文解析;7.104规约报文解析。附加功能:a.698.45模拟主站功能;b.698.45规约示例报文;c.自带上面各协议规约,一键打开;d.sqlite查看与查询功能;e.UTC/LINUX时间转换,各类型数据转换;f.ascii码转换等等。

2020-10-27

BeyondCompare_v2.4.3.243

BeyondCompare_v2.4.3.243 带注册

2016-08-23

project的实例

这些事project的实例,欢迎大家的借鉴!

2015-07-23

空空如也

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

TA关注的人

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