自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 不可重入函数

不可重入函数1 什么是可重入性**可重入函数:**可重入函数可以由多个任务并发使用,而不必担心数据错误**不可重入函数:**不能由超过一个任务所共享,除非能确保函数的互斥(或者使用信号量,或者在代码的关键部分禁用中断)可重入函数可以在任意时刻被中断,稍后再继续运行,不会丢失数据;可重入函数要么使用本地变量,要么使用全局变量是保护自己的数据2 可重入函数不为连续的调用持有静态数据不返回指向静态数据的指针,所有数据都由函数的调用者提供使用本地数据,或者通过制作全局数据的本地拷贝来保护全局数据

2021-05-20 21:25:22 3128

转载 函数编写规范

函数编写规范对所调用函数的错误返回码要仔细、全面地处理明确函数功能,精确(而不是近似)地实现函数设计编写可重入函数时,应注意局部变量的使用(如编写C/C++ 语言的可重入函数时,应使用auto 即缺省态局部变量或寄存器变量)说明:编写C/C++语言的可重入函数时,不应使用static局部变量,否则必须经过特殊处理,才能使函数具有可重入性。编写可重入函数时,若使用全局变量,则应通过关中断、信号量(即P 、V 操作)等手段对其加以保护 说明:若对所使用的全局变量不加以保护,则此函数就

2021-05-20 21:20:03 475

原创 【开源】APP+STM32+ESP8266+MQTT协议上云OneNET

【开源】APP+STM32+ESP8266+MQTT协议上云OneNET文章目录【开源】APP+STM32+ESP8266+MQTT协议上云OneNET1. 相关连接1.1 本项目相关连接1.2 无APP原版连接(有如何在FreeRTOS操作系统中添加其他模块的教程,如传感器,LED任务)1.3无操作系统简易版(旧版,有OneNET云平台设备创建和应用配置):1.4 开发工具连接2. 具体功能3. 硬件环境4. 接线(没改)5. 云平台实例创建6. 基础配置6.1 OneNET云平台6.2 APP应用管理

2021-03-21 16:08:54 35091 49

原创 ARM-Cortex-M架构寄存器详解

通用寄存器通用寄存器(R0-R15)可分成不分组寄存器R0-R7、分组寄存器R8-R14和程序计数器R15三类。1 不分组寄存器R0-R7不分组寄存器R0~R7是真正的通用寄存器,可以工作在所有的处理器模式下,没有隐含的特殊用途。2 分组寄存器R8-R14分组寄存器R8-R14取决于当前的处理器模式,每种模式有专用的分组寄存器用于快速异常处理。寄存器R8-R12可分为两组物理寄存器。一组用于FIQ模式,另一组用于除FIQ以外的其他模式。第1组访问R8_fiq-R12_fiq,允许快速中断处理

2021-02-04 19:31:29 3240

原创 ARM调用标准(ATPC)与函数参数传递

基本ATPCS规定了在子程序调用时的一些基本规则,包括下面3方面的内容ATPC (Automatic Transfer Power Control) 自动发信功率控制。技术的要点是微波发信机的输出功率在ATPC控制范围内自动跟踪接收段接收电平的变化而变化1 寄存器的使用必须满足下面的规则:子程序间通过寄存器R0-R3来传递参数,这时,寄存器R0-R3可以记作A1-A4。被调用的子程序在返回前无需恢复寄存器R0-R3的内容。在子程序中,使用寄存器R4-R11来保存局部变量。这时,寄存器 R4-R11

2021-02-04 19:07:07 794

原创 【开源】STM32+ESP8266+MQTT多传感器数据上云OneNET(易拓展,带操作系统FreeRTOS)

【开源】STM32+ESP8266+MQTT多传感器数据上云OneNET(易拓展)文章目录【开源】STM32+ESP8266+MQTT多传感器数据上云OneNET(易拓展)1. 相关连接1.1 本项目相关连接1.2 无操作系统简易版(旧版,有OneNET云平台设备创建和应用配置,本文不再赘述):2. 具体功能3. 硬件环境4. 云平台环境配置5. 接线6. 功能展示6.1 数据流6.2 APP应用管理6.3 串口数据7. 源码详解7.1 源码文件解析7.2 服务器与wifi配置相关7.3 源码框架7.4

2021-01-17 17:49:50 15382 13

原创 VScode C++开发环境配置教程

配置过程:下载 VScode配置中文环境安装C/C++扩展下载 MingGW设置环境变量设置 VScode C++环境文件tasks.json和launch.json不改动c_cpp_properties.json详细过程:1. 下载 VScode下载地址:https://code.visualstudio.com/Download1.1 配置中文环境插件选项安装中文环境插件重新打开VScode1.2 安装C/C++拓展2. 下载 MingG

2021-01-05 20:07:53 1064 1

原创 C语言的变量存储方式和关键词

5种变量存储类自动变量用auto修饰或者不修饰就默认属于自动存储类的变量,具有自动存储周期、代码块作用域、空连接。在默认下,在代码快或者函数的头部定义的任意变量都属于自动存储类。初始化,除非手动初始化,否则不会被自动初始化。如果在内层中使用和外层一样名字的变量,则内层会覆盖外层变量,在程序离开内层代码块时,外部变量就恢复了其作用和之前的值。 对于自动变量,除非显式的初始化,否则不会自动初始化。寄存器变量通过register声明,放在寄存器而非内存中,所以无法获得其地址。注意,有时候虽然请求了把

2020-12-29 20:47:33 347

原创 STM32F103RCT6(Mini板)通过MQTT协议上传温湿度数据至OneNET云平台并控制LED灯

目录1. 相关连接:2. 具体功能:3. 硬件环境:4. 云平台环境配置:5. 接线:6. 功能展示:7. 要修改的的地方:简介: ESP8266通过MQTT协议将温湿度数据传输至OnenNet云平台关键词: OneNet、ESP8266、DHT11、MQTT、LED1. 相关连接:github(源码): https://github.com/Mbwide/DHT11_ToOneNetByMqttCSDN:(图文解析):Bilibili(视频解析):2. 具体功能:DHT11采集环境温

2020-12-23 12:03:08 20467 27

原创 常见排序详解(C语言版)

1 排序基本概念与分类1.1 排序的稳定性假设ki = kj,且在排序前的序列中r i领先于rj 。如果排序后r i仍然领先于rj,则称所用的排序方法是稳定的。反之,如果使得排序后的序列中rj领先于r i,则称所用的排序方法是不稳定的。1.2 内排序和外排序**内排序:**内排序是在排序整个过程中,待排序的所有记录全部被放置在内存中。**外排序:**外排序由于排序的记录个数太多,不能同时放置在内存,整个排序过程需要在内外存之间多次蒋欢数据才能进行这里主要介绍内排序的多种方法.对于内排

2020-12-19 21:47:10 389 1

原创 SMT32的RTC的晶振为什么是32768Hz

RTC的晶振任何实时时钟的核心都是晶振,晶振频率为32768 Hz 。它为分频计数器提供精确的与低功耗的实基信号。它可以用于产生秒、分、时、日等信息。为了确保时钟长期的准确性,晶振必须正常工作,不能够收到干扰。RTC的晶振又分为:外部晶振和内置晶振。RTC的晶振频率为什么是32768Hz?RTC时间是以振荡频率来计算的。故它不是一个时间器而是一个计数器。而一般的计数器都是16位的。又因为时间的准确性很重要,故震荡次数越低,时间的准确性越低。所以必定是个高次数。215 = 32768。3276

2020-12-16 21:59:53 2798 3

原创 FreeRTOS任务函数与函数指针

typedef void (*TaskFunction_t)(void *);void led0_task(void *pvParameters){ while(1) { LED0 = ~LED0; vTaskDelay(500); }} //TaskFunction_t led0_task //等价于 //void led0_task(void *pvParameters)(TaskFunction_t)led1_task//强制转

2020-12-13 22:56:42 1162

原创 C语言位运算过程会将数据大小提升为int

C语言位运算过程会将数据大小提升为inta<<3这个表达式的运算结果类型为int,这是C标准规定。 #include<stdio.h> int main() { unsigned char a = 0x8A; a <<= 3; printf("%X",a); return 0;}C标准规定在进行位运算时,a<<3这个表达式,a运算时会被类型提升为int​int main

2020-12-12 22:04:34 440

原创 malloc/calloc/realloc区别与联系

malloc/calloc/realloc区别与联系malloc/calloc/realloc和free介绍:1 malloc函数定义与声明: 在堆上,分配n个字节,并返回void指针类型。其函数声明如下:void * malloc(int n);参数释义:n:申请空间大小(单个类型大小*总个数)//类型大小为字节函数详述:函数返回值为void型指针。如果执行成功,函数从堆上获得n个字节的空间,并返回该空间的首地址。如果执行失败,函数返回NULL。由于malloc函数值的类型为v

2020-12-09 21:29:34 110

原创 串口、UART、USB、TTL、RS-232、RS-485区别

串口、UART、USB、TTL、RS-232、RS-485区别1 数据通信的基础简单讲,要实现数据通信的必须由物理接口,电气标准(逻辑电平标准)、通信时序标准三部分组成。物理接口: 接口形状电平标准: 逻辑电平标准规定了多少电压代表0,多少电压代表1等信息通信时序标准: 时序标准指的是和实际电压的逻辑值(0和1)在时间轴上的标准,简单讲,时序标准规定了逻辑信号的格式,什么时候该收或发1,什么时候该收或发0。物理接口和电平标准类似计算机网络七层协议里的物理层,通信时序标准属于物理层之上6层总和。

2020-12-06 21:52:53 1733

原创 C陷阱与缺陷低配版

*和++有相等的优先级,结合自右向左,指针自增1。即先把指针指向的数据加到a上,指针再增1。a += *a++;a += *(a++);//清晰ar[i]和*(ar+i)的意义是等价的,但是只有当ar是一个指针变量时,才可以使用ar++这样的表达式。数组形式中,ar是地址常量,与&ar[0]一样,可以使用ar+1标识数组里的下一个元素。增量运算符只能用在变量名前,不能用在常量前。*ar 中的ar是指针变量,即在指针形式中,ar是指针变量。C 库函数 void *.

2020-11-30 22:09:35 95

原创 printf出入栈详解

1. 从++i和i++说起int main(){ int i = 0; //i++ = 100; //直接报错,编译出错: error C2106: “=”: 左操作数必须为左值 ++i = 100; //通过,没有错误 printf("%d", i); //直接打印100 return 0;}从上面的代码情况可以认为编译器在处理i++和++i的方式不同i++完成之后返回的是右值也就是一个常量++i完成之后返回的是左值也就是i

2020-11-30 21:32:07 1298

空空如也

空空如也

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

TA关注的人

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