自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 C语言 -- 链表(企业级,侵入式链表)

节点结构体只维护指针域,用户需预留4个字节空间,供我们帮助连接数据。

2022-09-04 22:54:24 597 1

原创 C语言 -- 动态数组&链表

将数组开辟到堆区,实现动态扩展。① 用户的数据类型无法确定;② 用户的数据无法确定创建在堆区还是栈区;③ 不管数据在堆区还是栈上,都是在内存中,就会有地址,只需维护数据的地址就行。

2022-09-04 21:03:24 901

原创 C++基础知识(二十五)--- STL案例之演讲比赛

24个人,分4组,每组6人,三轮比赛,每轮淘汰一半。第三轮6人决出前三名。

2022-08-29 15:48:15 551

原创 C++基础知识(二十四)--- 算数生成&集合算法

集合算法注意:两个集合必须是有序序列。

2022-08-23 08:53:20 130

原创 C++基础知识(二十三)--- 排序&拷贝替换算法

sort(v.begin(), v.end(), 函数对象);

2022-08-22 23:06:05 113

原创 C++基础知识(二十二)--- 查找算法

adjacent_find(开始迭代器,结束迭代器,谓词或函数对象);binary_search(开始迭代器,结束迭代器,对象,函数对象);binary_search(开始迭代器,结束迭代器,数值);adjacent_find(开始迭代器,结束迭代器);count(开始迭代器,结束迭代器,谓词或函数对象);count(开始迭代器,结束迭代器,数值);注意:数据必须要有序。

2022-08-22 22:34:06 129

原创 C++基础知识(二十一) --- 遍历算法for_each&transform

算法主要由头文件 组成。

2022-08-21 21:53:09 288

原创 C++基础知识(二十)--- 函数对象适配器

容器通过空间配置器取得数据存储空间,空间配置器管理容器的空间。将二元函数对象转为一元函数对象。

2022-08-21 19:17:47 759

原创 C++基础知识(十九)--- 函数对象

STL 中有以下实现“累加”功能的算法(函数模板),该模板的功能是对(first,last)中的每个迭代器 I 执行 val = op(val, *I),返回最终的 val。

2022-08-21 16:14:33 1064

原创 C++基础知识(十八)--- 容器案例

当我们给容器中插入元素时,容器内部实施了拷贝动作,而不是将原数据元素放入容器,也就是说我们提供的元素必须能够被拷贝。

2022-08-14 10:35:51 162

原创 C++基础知识(十七)--- pair&set&map

pair 对组是一个类,类中有两个公有的成员变量。pair 将一对值组合成一个值,这一对值可以具有不同的数据类型,两个值可以分别用 pair 的两个公有属性 first 和 second 访问。

2022-08-13 23:08:15 1198 2

转载 数组指针与二维数组详解

数组名代表数组首元素的地址,这句话对一维、二维数组都适用。

2022-08-12 08:26:45 1319

原创 C++基础知识(十六)--- stack&queue&list

由于 list 是一个双向链表,迭代器必须能够前移、后移,所以 list 的迭代器是双向迭代器。list 容器是一个循环的双向链表。

2022-08-09 22:33:06 574

原创 C++基础知识(五)--- 智能指针类&字符串类

一个类如果重载了函数调用符号,那么这个类实例化出的对象也叫仿函数。

2022-08-08 23:05:57 488

原创 C++基础知识(十五)--- deque 容器

vector 容器是单向开口的连续内存空间,deque 则是一种双向开口的连续线性空间。所谓的双向开口,是可以在头尾两端分别做元素的插入和删除操作。

2022-08-03 23:30:26 314

原创 C++基础知识(十四)--- vector容器

因为vector迭代器所需要的操作行为,如:operator->,operator++,operator+=等,普通指针天生具备。Vector 以两个两个迭代器 _Myfirst 和 _Mylast 分别指向配置得来的连续空间中目前已使用的范围,并以迭代器 _Myend 指向整块连续内存空间的尾端。......

2022-08-03 22:25:31 1127

原创 C++基础知识(十三)--- string容器

C++标准库定义了一种string类,定义在头文件。

2022-08-02 23:42:01 292

原创 C++基础知识(十二)--- STL基本概念

容器各种数据结构,如vector,list等,用来存放数据,从实现角度来看,STL容器是一种模板类(classtemplate)。

2022-08-01 23:09:25 569

原创 C++基础知识(十)--- I/O

在iostream头文件中定义的类有ios,istream,ostream,iostream,istream等。

2022-07-31 12:32:19 424

原创 C++基础知识(十一)--- 文件读写

由于文件设备并不像显示器屏幕与键盘那样是标准默认设备,所以它在fstream头文件中是没有像cout那样预先定义的全局对象,所以我们必须自己定义一个该类的对象。

2022-07-31 12:30:56 1222

原创 C++基础知识(九)--- 类型转换 & 异常

C++的异常处理使得异常的引发和处理不必在一个函数中,这样底层的函数可以着重解决具体问题,而不必过多的考虑异常的处理。

2022-07-28 22:30:46 836

原创 C++基础知识(八)--- 模板

最初包含函数实现的地方,当原先的.h头文件改名为.hpp,并且其中引入了函数实现后,这里的全部屏蔽掉,即不使用该.cpp文件了)答类的成员函数默认申请为内联函数,在链接时,链接器会对重复的成员函数进行处理,只保留一份成员函数,所以不会报错。编译器会对函数模板进行两次编译,在声明的地方对模板代码本身进行编译,在调用的时候对参数替换后的代码进行编译。不管是普通类继承类模板,还是类模板继承类模板,都必须告诉编译器父类的泛型数据类型是什么类型。函数或类是通用的,但是里面的数据类型是多种多样的。...

2022-07-27 08:25:08 518

原创 C++基础知识(七)--- 多态

所谓的接口,即把内部实现的细节封装起来,外部用户通过预留的接口可以使用接口的功能,而不需要知晓内部具体细节。C++中,通过类实现面向对象的编程,而在基类中只给出纯虚函数的声明,然后在派生类中实现纯虚函数的具体定义的方式实现接口。不同派生类实现接口的方式也不尽相同。有继承;子类重写父类的virtual函数;函数返回值、函数名、函数参数,必须和父类中的虚函数一致。有继承;子类重新定义父类的同名成员(非virtual函数)...

2022-07-24 12:34:01 500

原创 C++基础知识(六)--- 继承

利用已有的数据类型来定义新的数据类型。一个B类继承于A类,或称从类A派生类B。则,类A称为基类(父类),类B称为派生类(子类)。

2022-07-19 08:44:05 277

原创 C++基础知识(四)---数组类、运算符重载

在调用函数时需要将实参对象完整地传递给形参,也就是建立一个实参的拷贝,系统是通过调用拷贝构造函数来实现的,这样就能保证形参具有和实参一样的值。

2022-07-16 10:41:25 949

原创 C++基础知识(三)---动态对象、对象模型、静态成员、友元

作用:禁止通过构造函数进行的隐式转换。

2022-07-11 22:48:16 1232

原创 C++基础知识(二)---重载、类和对象、构造析构

目录一. 函数重载(1)原理:(2)当函数重载遇上默认参数 (3)函数重载的实现原理二. C++调用C语言三. 类和对象(1)封装(2)struct 和 class 的区别:(3)面向对象程序例子eg:① 比较立方体② 点和园的关系四. 构造函数、析构函数(1)默认的构造函数和析构函数(2)如果构造函数中申请了堆区空间,则就要在析构函数中释放。(3)拷贝构造函数(4)匿名对象(了解)(5)拷贝构造函数的调用时机(6)构造函数的调用规则(7)深浅拷贝(8)多个对象的构造函数和析构函数8.1 类对象作为成员8.

2022-07-10 11:54:33 258

原创 C++基础知识(一)

命名空间 ::namespace A{ //A 是空间的名字 int a; void func() {}}(1)命名空间只能写在全局;(2)可以嵌套;namespace Aspace { int a = 1; namespace B { int b; }}(3)命名空间是开放的,可以随时加入新成员;(4)命名空间可以取别名;namespace newSpace = oldSpa...........

2022-07-04 22:06:22 384

原创 sizeof、strlen

int main(void){ char str1[] = {'1','2','0','3',0,0}; char str2[] = { '1','2','\0','3',0,0 }; char str3[] = "120300"; printf("sizeof(str1) = %d, strlen(str1) = %d\n", sizeof(str1), strlen(str1)); printf("sizeof(str2) = %d, strlen(str2).

2022-04-10 18:18:37 77

原创 状态机实现按键检测

需求:按键分短按、长按,需要带消抖。key.h#ifndef __KEY_H_#define __KEY_H_#include "main.h"#define KEY_ST PORT_GetBit(KEY_GPIO_PORT,KEY_GPIO_PIN)typedef enum{ NULL_KEY = 0, SHORT_KEY = 1, LONG_KEY}KEY_TYPE;extern KEY_TYPE key_type;

2022-04-06 23:46:55 694

原创 16位数与8位数的转换

在单片机编程里,遇到这样一个问题,涉及到位操作:字节 0 1 2 3 4 5 6 7 CAN-ID 0 1 2 3 0x68 地址 计数 充电电压 充电电流 充电温度 eg:当数据为02 00 5d c0 42 68 00 41时,表示:当前的输出为24V、17A,温度为65摄氏度。/*** @brief CAN向充电器发送设置充电电压、电流信息 * @param //...

2022-04-06 23:34:15 934

原创 嵌入式软件开发框架--时间片轮询法

一.参考:嵌入式软件开发常用的三种架构/** * @brief 任务函数相关信息结构体定义. */typedef struct{ uint8 m_runFlag; /*!< 程序运行标记:0-不运行,1运行 */ uint16 m_timer; /*!< 计时器 */ uint16 m_itvTime; /*!< 任务运行间隔时间 */ vo.

2022-04-06 22:58:01 625

原创 Apple Media Service

AMSMR: watchMS:phoneAMS entities:AMS定义了3个不同的实体entities,每个entities具有各自不同的属性attributes:(1)Player :The currently active media app。该实体的attributes包括其名称、播放状态和播放音量等值。(2)Queue : The currently loaded playback queue,当前加载的播放队列。该实体的attributes包括其大...

2022-03-28 00:16:16 531

转载 嵌入式C语言基础知识--位操作

大端模式、小端模式、高字节序、低字节序、MSB、LSB编程知识_字节序_位操作内存的读写永远是从低地址开始读写,从低到高。大小端模式:以unsigned int value = 0x12345678为例,分别按照大端模式和小端模式存放在芯片中。内存地址 0x00000001 0x00000002 0x00000003 0x00000004 大端模式 0x12 0x34 0x56 0x78 小端模式 0x78 0x...

2022-03-19 22:25:13 1250

原创 BLE应用框架接口设计--前提

本文从功能需求的角度分析一般蓝牙BLE单芯片的应用框架(SDK Framework)的接口设计过程,并以TI CC2541为例说明BLE的应用开发方法。一.应用框架(Framework)我们熟知的Framework包括Android Framework、Linux QT、Windows MFC。应用框架抽象并封装实现了一般应用场景的需求,完成应用开发的80%,剩下的20%则以回调和函数接口的方式供应用开发人员调用以完成具体的需求。一般Framework完成的工作包括:任务分发、消息通信和UI等.

2022-03-16 14:03:16 375

原创 BLE低功耗蓝牙协议栈

目录一. BLE低功耗蓝牙协议栈(1)蓝牙核心协议(Bluetooth Core)(2)蓝牙应用层协议(Bluetooth Application)(3)BLE低功耗蓝牙核心协议层详解(Bluetooth Core)① 物理层(PHY)② 链路层(LL)③ 主机控制接口层(HCI)④ 通用访问配置文件层(GAP)⑤ 逻辑链路控制及自适应协议层(L2CAP)⑥ 安全管理层(SM)⑦ 属性协议层(ATT)⑧ 通用属性配置文件层(GATT)(4)ATT协议层中的

2022-03-14 18:11:06 8252 1

原创 STM32+CubeMX+Keil+HAL库

目录1. 设置GPIO:2. printf重定向3. Log信息格式4.个性化输出5. CubeMX+HAL打开串口中断6.打开外部中断7.时钟树基本操作8.通用定时器配置9. CubeMX配置定时器(1)将定时器的时钟设为72M(2)选择内部时钟(3)配置定时器(4)开启中断定时器中断回调函数:(平滑滤波)10.CubeMX配置pwm11.CubeMX配置spwm12.CubeMX配置ADC(1)轮询...

2022-02-27 01:06:14 1590

转载 CANOpen(一)-- CAN通信基础补充

【专栏】CANOpen系列教程CAN与CANOpen(一)_maifansnet的博客-CSDN博客_canopen《CANOpen轻松入门》--周立功目录1. CAN组成2.位填充3.优先级4. 位时序CAN总线波特率5.数据帧CAN既是一种总线,又是一种协议。CAN总线协议只定义了物理层和数据链路层,在实际设计中,这两层完全由硬件实现,设计人员无需再为此开发相关软件或固件,只要了解如何调用相关的接口和寄存器,即可完成对CAN的控制。简单说,CA...

2022-02-21 14:37:16 6618 1

原创 Linux文件目录

常用的linux文件权限:444 r–r--r–600 rw-------644 rw-r–r--666 rw-rw-rw-700 rwx------744 rwxr–r--755 rwxr-xr-x777 rwxrwxrwx从左至右,1-3位数字代表文件所有者的权限,4-6位数字代表同组用户的权限,7-9数字代表其他用户的权限。而具体的权限是由数字来表示的,读取的权限等于4,用r表示;写入的权限等于2,用w表示;执行的权限等于1,用x表示;通过4、2、1的组合,得到以下几种..

2022-02-13 19:28:28 389

原创 以太网口&arm&mos&推挽开漏&上下拉&高低边&时域频域傅里叶

目录1. 以太网网口简介MIIDMAMACPHY2. Arm2.1 什么是ARM内核:2.2 什么是ARM架构:2.3 什么是指令集:3. mos场效应管3.1 NMOS和PMOS3.2 Vcc、Vdd、Vss3.3 LDO3.4电源芯片选用LDO还是DC-DC?3.5TTL、CMOS4. 推挽输出和开漏输出5. 上拉、下拉6. 高、低边驱动7. 时域、频域、傅立叶分析8. Excel技巧Excel怎么将表格的一列乘..

2022-02-13 19:26:25 661

空空如也

空空如也

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

TA关注的人

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