A modest STL tutorial

MATLAB项目,模拟曲柄滑块机构的运动学和动力学.zip 1.版本:matlab2014a/2019b/2024b 2.附赠案例数据可直接运行。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。 立即下载

-------大纲(Outline)-------

STL 包含由5大模块组成:容器(container),迭加器(iterators),算法(algorithms),函数对象(function objects),配置器(allocators).

Section1: Sample

分别用不同的例子简单描述上述5大组件(components).

Section2:Philosophy

解释STL框架的原理

Section3:Componets.

详细介绍5大组件(components)

Section4:Extending STL

介绍怎样自己定义STL 模板

 

Example

大多数情况下我们需要一个类似数组(array)的能自动分配空间的类型,STL 有个vector ,下面举例说明vector怎样工作的,

将一组interger 类型的数据进行排序(sort),并打印(print)

version1: Standart C++

#include <stdlib.h>

#include <iostream.h>

// a and b point to integers.  cmp returns -1 if a is less than b, 
// 0 if they are equal, and 1 if a is greater than b.

inline int cmp(const void *a,const void *b)

{

int aa=*(int *)a;

int bb=*(int *)b;

return (aa<bb)? –1: (aa>bb)?1 : 0;

}

// Read a list of integers from stdin
// Sort (c library qsort)
// Print the list
void main(int argc,char *argv[])
{
   const int size=1000; //array of 1000 integers
   int array[size];
   int n=0;
   //read an integer into the n+1 the element of array
   while(cin>>array[n++]);
   n--; //it got incremented once too many times
   qsort(array,n,sizeof(int),cmp);
   for(int i=0; i<n;i++)
      count<<array[i]<<”/n”;
}
 

Version2: containers ,iterators, algorithms
STL提供了大量能够包含其他对象的容器类(container),vector 就是其中一种,他类似于数组(array),能够需要自增长度,比如它的一个操作(operation) push_pack,将元素(element)加在vector(向量)的末尾,长度加1。
Vector 是一种sequence container,支持随机访问元素,常量时间内在尾端安插和移除元素,以及线性时间内在开头,中间处安插或移除元素.vector 的元素个数能够动态变更,其内存管理行为完全自动.【Generic Programming and the STL】
Vector 的大小(size,其所包含的元素个数)与容量(capacity,其内存所容纳的元素个数)之间有重要的区别.

 
 
 所以,你可以用STL sort实现来替代上例的qsort实现,STL提供很多算法(algorithms), sort 是通用的,它可以在不同类型的容器(containers)中工作,因为它不是直接依赖容器(container)而是迭代器(iterators).

Preview of iterators

在后面我们详细介绍iterators, 它为容器提供了一种元素的位置指针服务,iterator 可以增加也可以减少,而且可以比较,这种特殊迭代器我们把它叫做”past-the-end”;

可以通过iterator 指向vector 的开始(begin)和结尾(end).

Vector<int> v;

//add some integers to v

vector::iterator i1=v.begin();

vector::iterator i2=v.end();

 

排序(sort) 就是在两个iterators 指定的范围(rang)操作,比如通过增加i1(i1++),只要小于iT2,注意,它是一个semi-open rang 半闭环区

例子:

#include <string.h>

#include <algo.h>

#include <vector.h>

#include <stdlib.h>

#include <iostream.h>

void main()

{

    vector<int> v;

    int input;

    while(cin>>input)  //while not end of file ENTER key

        v.push_back(input);

    // sort takes two random iterators, and sorts the elements between
   // them.  As is always the case in STL, this includes the value
   // referred to by first but not the one referred to by last; indeed,
   // this is often the past-the-end value, and is therefore not
   // dereferenceable.

   sort(v.begin(),v.end());

   int n=v.size();

   for(int I=0;I<n;I++)

cout<<v[I]<<”/n”;

}

Incidentally,sort 比 qsort 实现的速度要快!

 

Version 3: 迭代器配接器(iterator adaptors)

STL 事先定义的iterator大多数能迭代于container元素之中,但这并非必要条件,iterator的概念极为一般性,他们可用来表现“以任何次序安排“的数值(而非只是container中已排序好的数值)身上的迭代动作,STL 的stream iterators,就是基于C++ 的stream I/O Library实现输入与输出动作的。

STL 提供了一个配置器(adaptors),他能够实现将每个接口转换成另一种接口。Istream_iterator 其实就是一个有用的adaptor,它是一个template type,我们可以参数化想要处理的流(stream),比如 integers: 可以用 istream_iteraotr<int>. 一旦stream 结束,istream_iterator 便有一个特别的”stream 结束值”,此值就是 past-the-end iterator.

Istream_interator<int>(cin) 动作示意图:

为了讲标准输入的元素读入到一个vector中,我们需要用到copy算法(algorithm),copy包含3个iterators,第一和第二个指定(specify)源区间(source rang),第三个指定目标(destination):

int main()

{

    vector <int > V;

    copy(istream_iterator<int> (cin),istream_iterator<int>(), back_inserter(V));

}

也可以用:

typedef istream_iterator<int> istream_iterator_int;

algorthm 可以改成

copy(istream_iterator_int(cin),istream_iterator_int(),v.begin());

 

NOTE:有一个小问题就是如果第三个参数用v.begin(),假设,v没有足够的空间来存取所有的元素,这时 iterator 讲破坏past-the-end iterator 规则,引起错误。因为copy没有办法将新元素插入V中,其实是一种覆盖(overwrite)操作,就是讲新赋值于V既有的元素上,而不是插入新的元素,要实现插入新元素,就必须调用V的member function.其实我们用insertion操作来替代overwriting,利用另外一个adaptor做这些,back_insert_iterator,

它包含一个参数表示你要插入的对象类型:

 

back_insert_interator(v)动作示意图:

所以一个input动作可以描述:

typedef istream_iterator<int,ptrdiff_t> istream_iterator_int;

vector<int> v;

istream_iterator_int start (cin);

istream_iteratro_int end;

back_insert_iterator<vector<int>>dest (v);

copy(start,end,dest);

 

同样,输出动作也可以用copy algorithm;

copy(v.begin(),v.end(),ostream_iterator<int>(cout,”/n”);

 

ostream_iterator 是另外一个提供输出功能的adaptor,constructor包含两个实参;第二个参数是字符串,用于每个元素打印之后被打印

例:

#include <string.h>

#include <algo.h>

#include <vector.h>

#include <stdlib.h>

#include<iostream.h>

 

void main()

{

vector<int>v;

istream_iterator<int,ptrdiff_t> start (cin);

istream_iterator<int,ptrdiff_t> end;

back_insert_iterator<vector<int> >dest (v);

 

copy(start,end, dest);

sort(v.begin(),v.end());

copy(v.begin(),v.end(),ostream_iterator<int>(cout,”/n”));
}

 

结论:

在STL算法(algorithms)依赖于一个区间的概念(Rangs),它是贯穿了整个容器组件(container).这样,一般容器(container)都一个了一些基于区间的操作,比如,STL有个count algorithms,它用于计算[  first, last  区间与value相等的元素的个数。

template <class InputIterator, class T, class Size>
void count (InputIterator start, InputIterator end, const T& value, Size& n);

在区间内符合*I==value,的iterator的个数加入n中

所以必须要产生一个局部变量n,并讲它初始化0;

C++ Standart[ISO98]版中,提供了另外一种简单的实现

template<class InputIterator,class EqualityComparable>

typename iterator_traits<InputIterator>::difference_type

count(InputIterator first,InputIterator last,const EqualityComparable& value);

 

 

Section2:原理 (Philosophy)

STL编程我们讲它称为泛型编程(generic programming),它提供使得尽可能满足一般的参数类型的一系列算法。

 

STL 组件:

Containers

容器就是能够用于包含其他对象,并且能够确定这些被包含对象的基本属性,而不依赖于具体的对象类型。

就是数据结构,例如:

vectors,lists,deques,sets,maps,multisets,mulitimaps,queues,stacks,and priority queues…

下图给出我们常用的一些容器的抽象层次(hierarchy):

 

序列(Sequences)

Sequence 是一个大小可变的container,它不会以某种规定来排列元素,它必须具有两个member function insert 与erase,如果 s 是Sequence,而p是”指向s内的某个元素”的iterator,则 s.erase(p)会移除并释放改元素,s.insert(p,x)会产生一个新对象,此对象是x的一个副本,然后被安置于p所指元素之前,注意是之前而不是之后,因为iterator的range是非对称的,只有所谓”past-the-end”的元素,没有所谓”before-the-beginning”的元素,可以在s.begin()之前做插入动作,也可以在s.end()之后做插入动作,前者在最前头处插入一个元素,后者在最尾端处插入一个元素,如果s.insert(p,x)是将x插入在p之后,而非之前的化,那么上面的行为就没法达到了。

虽然2个member function 很简单,但存在两个重要问题:

1.       当进行插入和erase操作时,对指向Sequence的那个iterator有没有影响?

2.     insert,erase的复杂度如何?

 

这两个问题,我们只能视情况而定,不同的Sequence,有个不同的体现。

STL包含3个Sequences类:

Vector:

在尾端插入很快,而且允许随机访问。

Lists

它是以节点(node)为基础的container,插入任何位置的速度都很快,但只提供顺序访问

Deques:

在尾端插入很快, 而且允许随机访问。但它具有类型限制。而且许多操作不支持.

Stacks and queues,同上

 

 

(关联性容器)Associative containers

Associative container 是一种可变大小的container,可以高效率的根据“以key为基础“的元素。它的每个元素有一个相关联的key,只要给定一个key,Associative container会很快查询key 的元素,

Associative container的基本操作是查询(lookup),插入(insert)和删除(erase).它不允许讲元素插入到Associative container的任意位置。

Sets, Multisets,Maps,Multimaps都是Associative container.

 

Iterators

前面已经描述了Iterator的意思,它实际上是用于指定容器或流的位置,类似于指针操作。它能够遍历由object所形成的range之中。有了iterator,得以将container和作用于它上的algorithmes 分离。

Input iterators

Input iterators 用于访问数据源。

 

Output iterators

它是用来存储数值序列。

Forward iterators

Forward iterator符合线性数值序列(liner sequence of values)的只觉概念,它不同于input iterator,也不同于output iterator,可用于多回(multipass)算法,顾名思义,它只能在range中向前移动。

Bidirectional iterators

它是一个可以incremented 也可以decremented的iterator.

 

Random access iterators

它是一中可以incremented 也可以decremented的iterator,并在向前或向后移动任意步数时,以及在比较两个iterators时,耗用固定的时间.它提供类似C指针的所以操作能力。

 

 

 

 

基于MATLAB的Abel反演和Fowler–Milne诊断研究对HyperFill TWGMAW-P进行了电波形分析。.zip 1.版本:matlab2014a/2019b/2024b 2.附赠案例数据可直接运行。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。 立即下载

相关推荐

aerosonde-fc-hybrid-uav-sim-main.zip

1.版本:matlab2014a/2019b/2024b 2.附赠案例数据可直接运行。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。

CLIST Tutorial中英对照版(二)

Forms and the Top-Level LoopThe things which you type to the LISP interpreter are called forms; theLISP interpreter repeatedly reads a form, evaluates it, and prints theresult. This procedure is calle...

weixin_34315665的博客 106

YOLO26算法左侧目标识别+训练好的模型+504张数据集+pyqt可视化界面.zip

附训练好的 YOLO 权重与 PyQt 可视化检测界面,页面底部含可视化效果预览,毕设/课设开箱即用。 【数据集概况】 · 检测类别(中文):[未获取()] 【训练曲线与评估图】 【模型训练配置】 参数 | 值 模型 | yolo26n 训练轮数 | 100 epochs 输入尺寸 | 640x640 批次大小 | 24 优化器 | auto 初始学习率 | 0.01 训练设备 【关键指标汇总】 训练了 83 个 epoch,最终轮指标: 指标 | 数值 mAP50 | **0.9950** mAP50-95 | 0.9950 Precision | 0.9989 Recall | 1.0000 train/box_loss | 0.2388 train/cls_loss | 0.1435 val/box_loss | 0.1671 val/cls_loss | 0.1126 【训练过程分析】 自从开始这次 YOLO26 算法训练以来,我始终盯着那条 loss 曲线,就像盯着一个长跑运动员的冲刺曲线一样。最初几轮训练,loss 拉得很快,那段时间真的挺让人揪心的,生怕一不小心就错过了最好的时机。但到了中期,loss 曲线进入了漫长的平台期,就像马拉松中的长距离赛段,大家都保持着匀速前进。到了后期,loss 平稳下降,mAP50 和 mAP50-95 两个指标都稳定在了 0.9950,这个阶段就像是冲刺阶段,每一次的训练都能感受到模型在平稳而坚定地进步。在训练到第 83 轮时,所有的 loss 指标都趋于稳定,这意味着模型已经在我们的训练数据上收敛得很好。但在这整个过程中,我还是感受到了一些挑战,尤其是在平台期的那几轮,看着曲线徘徊不前,那种焦虑和不确定感真的磨得人没脾气。不过,最后的曲线走势还是让我们松了... 使用场景:毕业设计、课程设计、深度学习入门、工业场景落地验证。

memset,memcpy,strcpy 的区别

一.函数原型   strcpy   extern char *strcpy(char *dest,char *src);   #include    功能:把src所指由NULL结束的字符串复制到dest所指的数组中   说明:src和dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符串。   返回指向dest的指针  memcpy  extern void *memcpy

4784

ACS6116 - 高级控制模块的任务集。该任务重点是模拟和控制猎鹰9号火箭着陆,采用受限和不受约束的MPC技术。.zip

1.版本:matlab2014a/2019b/2024b 2.附赠案例数据可直接运行。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。

【通信测试自动化】基于可执行上下文的接口测试生成:通信行业高复杂度API质量保障方案设计

内容概要:本文探讨了接口测试自动化在通信行业的演进路径,从传统确定性脚本向“可执行上下文”驱动的智能化测试转型。面对接口数量激增、迭代周期缩短和测试数据复杂性的挑战,文章提出“可执行上下文”概念,强调测试成功不仅依赖API规范,还需融合真实测试数据、调用链依赖、业务断言逻辑和隐性规则。通过Skills拆解、RAG注入和Agentic编排三大核心技巧,构建结构化上下文资产,实现AI辅助生成高可执行性测试用例,并引入自愈断言机制提升测试鲁棒性。最终指出未来趋势是“治理下的自治”,即在保障安全与合规的前提下,推进自动化向多步骤工作流和语义感知扩展。; 适合人群:具备一定软件测试或自动化开发经验,从事通信行业系统测试、质量保障或接口自动化平台建设的研发与测试人员,尤其是关注AI在测试中应用的工程师和技术管理者。; 使用场景及目标:①解决通信系统中接口测试因数据不真实、依赖复杂导致的用例失效问题;②利用RAG与Skills方法提升AI生成测试用例的准确性与可审计性;③通过自愈断言和上下文复用增强测试稳定性与维护效率;④构建面向5G、O-RAN、BSS等复杂系统的可持续演进的自动化测试体系。; 阅读建议:此资源以工程实践为导向,结合代码示例深入剖析上下文驱动的测试生成机制,建议读者结合自身系统特点,重点借鉴上下文资产积累与RAG规则注入的方法,并在可控环境中试点Agentic测试与自愈断言,逐步实现从脚本自动化到上下文智能的跃迁。

auto,static,register,const,volatile,extern 关键字的作用

(1) auto这个关键字用于申明变量的生存期为自动,即将不在任何类,结构,枚举,联合和函数中定义的变量视为全局变量,而在函数中定义的变量视为局部变量。所以所有的变量默认为auto的(2) register这个关键字命令编译器尽可能的将变量存在CPU内部寄存器中而不是通过内存寻址访问以提高效率。(3) static

2277

增强型PID-自适应-前馈-神经网络控制研究(Matlab代码实现)

内容概要:本文系统研究了“增强型PID-自适应-前馈-神经网络控制”复合控制策略,结合Matlab代码与Simulink仿真模型,深入探讨了传统PID控制与智能控制算法的深度融合方法。该策略通过引入自适应机制和前馈补偿,结合BP神经网络进行非线性系统建模与参数优化,并融合扩展卡尔曼滤波(EKF)等状态估计技术,提升控制系统在复杂动态环境下的响应速度、鲁棒性和控制精度。研究涵盖双闭环控制架构设计、神经网络训练流程、EKF状态融合等关键技术环节,适用于电机控制、电力电子变换器、无人机、微电网等高阶非线性系统的建模与仿真。配套资源丰富,包含多个可复现的Simulink模型、Matlab代码及参考文献,尤其支持高水平EI期刊成果的复现与验证。; 适合人群:具备自动控制理论基础和Matlab/Simulink仿真能力,从事控制工程、电气自动化、电力电子或智能系统研发的研究生、科研人员及工作1-3年以上的工程技术人员; 使用场景及目标:①深入研究先进PID控制策略在非线性系统中的优化应用;②实现神经网络与经典控制算法的协同设计与联合仿真;③开展状态估计、参数辨识与智能控制策略的实验验证;④复现并拓展高水平学术论文中的控制方法,支撑科研创新与项目开发; 阅读建议:建议结合提供的Matlab代码与Simulink仿真模型进行实践操作,重点剖析控制结构设计逻辑、神经网络训练过程及EKF状态估计的实现细节,按照文档说明逐步调试与优化,以全面掌握复合控制系统的建模、仿真与性能评估方法。

如何正确使用内存

首先我们要了解内存的分配方式。一般来说,内存的分配方式有三种:1.从静态存储区域分配。内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。例如全局变量,static变量。2.在栈上创建。在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限。3.从堆上分配,亦称动态内存分

1905

【带状电容器计算用于电容式触摸传感器应用】半数值模型的电容式触摸传感器集成于金属基材涂层中研究(Matlab代码实现)

内容概要:本文针对集成于金属基材涂层中的电容式触摸传感器,提出了一种用于带状电容器电容计算的半数值模型,并基于Matlab平台实现了仿真分析。该模型结合解析方法与数值计算,采用有限差分法求解二维泊松方程,精确模拟传感器在金属背景下的电场分布,有效克服了金属基底对电容信号的屏蔽与干扰问题,显著提升了触摸检测的灵敏度与稳定性。研究系统探讨了传感器的几何结构、介电层材料特性、电极尺寸及间距等关键参数对电容响应的影响机制,建立了完整的建模流程与仿真框架,为高性能、高抗干扰能力的电容式触控器件在智能家居、工业控制面板及复杂电磁环境下的实际应用提供了理论支撑与技术路径。; 适合人群:具备电磁场与电磁波、数值计算方法基础,熟悉Matlab编程,从事传感器设计、人机交互技术开发、电子器件仿真及相关领域研究的科研人员、工程师及研究生。; 使用场景及目标:①面向金属表面集成的电容式触摸传感器进行高精度建模与性能优化;②为智能家电、工业设备等人机接口的触控模块提供抗干扰设计与仿真验证方案;③支撑相关科研课题的理论分析、算法开发与原型系统验证。; 阅读建议:学习者应结合提供的Matlab代码深入理解半数值建模的具体实现过程,重点掌握有限差分法在电场求解中的应用技巧,并可通过调整传感器结构参数与材料属性开展对比仿真,进而探究各因素对灵敏度的影响规律,全面提升对电容式传感机制的理解与工程化设计能力。

【数据库技术】MySQL事务ACID与隔离级别解析:InnoDB与MyISAM存储引擎对比及适用场景设计

内容概要:本文系统讲解MySQL事务与存储引擎的核心知识点,重点围绕事务的ACID特性、并发问题与隔离级别(包括脏读、不可重复读、幻读)、MySQL默认的可重复读(RR)隔离级别如何通过MVCC和间隙锁避免幻读,以及InnoDB与MyISAM存储引擎在事务支持、锁机制、外键、全文索引等方面的对比。同时介绍了MEMORY存储引擎的特点及其适用场景,并结合实际面试高频问题进行深入剖析,帮助读者全面掌握MySQL在事务处理和存储引擎选择方面的关键技术细节。; 适合人群:准备后端开发面试、或希望深入理解MySQL核心机制的开发者,尤其是有一定数据库基础、工作1-3年的研发人员。; 使用场景及目标:①理解事务四大特性(ACID)的底层实现原理,如undo log、redo log、MVCC等;②掌握不同隔离级别之间的区别及MySQL默认RR级别的特殊性;③能够根据业务需求合理选择InnoDB与MyISAM存储引擎;④应对MySQL相关技术面试中的高频问题。; 阅读建议:此资料兼具理论深度与实战指导价值,建议结合MySQL官方文档和实际环境动手验证事务行为与锁机制表现,尤其关注RR级别下快照读与当前读的行为差异,以及行锁失效场景的模拟,以加深理解和记忆。

建立一个用于字串查找的Hash表

在实际开发过程中,往往需求类似一个问题--这个对象是否已经存在? et.如果我们讲每个对象建立一个诸如这样的structure  struct  OBJECT{    char*  szName,   int      i_hash,  ....};  那么可以建立一个 object libary,根据 szName 计算出一个唯一的Hash值,这样建立一个Hash表,查找的时候可以选择2分法等查

1648

优快云首页 发布文章 优快云同步助手 阻尼器磁流变阻尼器MR Damper非线性(阻尼、滞回)特性研究(Matlab代码实现) 46 100 摘要:会在推荐、列表等场景外露,帮助读者

内容概要:本文系统整理了一套面向科研仿真的Matlab/Simulink资源合集,涵盖电力电子、控制理论、信号处理、电力系统、智能优化算法、机器学习、图像处理、路径规划、通信技术、雷达追踪、车间调度等多个前沿科研领域。重点资源包括三相PWM整流器双闭环控制、磁流变阻尼器非线性特性建模、双有源桥(DAB)DC-DC变换器优化控制、电网不平衡下的功率平衡策略、卡尔曼滤波状态估计、多类型路径规划与调度算法等,多数为顶级EI期刊成果复现,配套仿真模型、原理说明、参考文献及代码,具备较强的学术参考价值与工程实践意义。; 适合人群:适用于从事电气工程、自动化、控制科学与工程、信号与信息处理、计算机、机械电子等方向的硕士/博士研究生及科研人员,要求具备Matlab/Simulink基础操作能力及相关专业背景;也适合高校教师指导课程设计、毕业设计或科研项目开发。; 使用场景及目标:①辅助高水平论文研究与期刊成果复现;②支撑课程设计、毕业设计与科研项目开发;③深入理解先进控制策略(如VOC、SVPWM、模糊PID、滑模控制)与系统建模方法;④结合YALMIP等优化工具开展算法设计与验证;⑤拓展智能优化、机器学习、路径规划等跨学科研究能力。; 阅读建议:建议按照资源目录顺序系统浏览,优先关注标注“顶级EI复现”的高价值模型,结合公众号“荔枝科研社”提供的网盘资料与技术文档进行仿真实践,通过动手调试加深对算法逻辑与系统动态特性的理解,提升科研建模与创新能力。

动态Array处理方法

一.引子    在实际开发中,我们有可能实时的处理一个数组(Array),本文,我利用内存拷贝来实现动态数组相关的宏操作.二.相关宏  #if defined(_MSC_VER)#      define  VLCCVP (void **)#else#      define  VLCCVP#endif#define  INSERT_ELEM(p_ar,i_oldsize,i_pos,elem) 

1448

Arco Design Pro PC端商家后台框架 | Axure高保真原型库

摘要:本Axure原型设计方案基于字节跳动ArcoDesignPro规范,提供企业级后台快速搭建方案。包含动态表格、表单验证等核心组件,采用中继器驱动设计,支持响应式布局。方案覆盖80%后台常用交互,可节省60%原型制作时间,配套完整设计文档和组件库,实现原型到开发的高效衔接。特别适用于电商、SaaS等后台系统开发,支持权限管理、数据分析等场景,显著提升团队协作效率。

招风的黑耳优快云 3971

STM32F103 串口DMA + 空闲中断 实现不定长数据收发

文章目录1. 空闲中断1.1 uart_dma.c1.2 uart_dma.h1.3 main.c1.4 stm32f10x_it.c1.5 效果演示1.6 知识补充1.6.1 外设的基地址     DMA(Direct Memory Access,直接存储器访问) 是所有现代电脑的重要特色,它允许不同速度的硬件装置来沟通,而不需要依赖于 CPU 的大量中断负载。否则,CPU 需要从来源把每一片段的资料复制到暂存器,然后把它们再次写回到新的地方。在这个时间中,CPU

夏夜晚风_的博客 3万+

Function Pointers -----PART 1

Introduction   In a previous series of articles named " Pointer Perfect," I looked at how data stored in computer memory is accessible through pointer, The code you write for your application in the f

1401

自动化测试工具playwright中文文档-------1.编写测试

Playwright 测试非常简单,它们执行操作,并断言状态是否符合预期。在执行任何操作之前,无需等待任何内容:Playwright 在执行每个操作之前会自动等待一系列可操作性检查通过。此外,在执行检查时也不需要处理竞态条件——Playwright 的断言设计方式能够描述最终需要满足的期望。就这样!这些设计选择允许 Playwright 用户完全忘记他们测试中的不稳定超时和竞态检查。您将学习如何编写第一个测试如何执行操作如何使用断言测试如何在隔离环境中运行如何使用测试钩子。

2301_76646967的博客 2502

C++ 编程常见错误收集

It is an error to modify a const variable. For example, afterconst double pi = 3.141592654; it is illegal to change the value of pi:pi = 3.0 ; //ERRORThe definition of pint a[] = {-1

1187

IS-IS协议深度解析(二):LSDB同步机制与骨干网实战部署

本文深度解析IS-IS协议的LSDB同步机制与骨干网实战部署。详细阐述了DIS角色如何通过CSNP/PSNP报文高效管理链路状态数据库同步,并与OSPF DR机制进行对比。重点介绍了Level-2骨干网作为逻辑高速公路系统的工作原理,以及通过ATT比特位实现跨区域路由的自动化。最后提供了高可靠性骨干网的实战配置要点与验证方法。

kite3的博客 643

linux 基于debian/ubuntu AB系统适配(二)-updateEngine移植

其实A/B系统的原理很简单,大部分的工作都集中在uboot上,rootfs只是起到一个辅助的作用,但这个作用也就必不可少的。你会发现在这个其中并没有kernel的参与。

badbayyj的博客 1033
上一篇: ADO的RECORDSET的RECORDCOUNT属性总是为-1
下一篇: How to Compile XviD with Microsoft Visual C++6.0
ybugchen
博客等级 码龄22年 1粉丝 44原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值