“叮铃铃… 叮铃铃…”

“叮铃铃… 叮铃铃…”

“谁呀?”黛丝博士打开了门,”哇,高飞,你怎么来了?”

“谁呀?”黛丝博士打开了户,”哇,高飞,你怎么来了?”

高飞狗:”好久不见,想来探你,还采购了公最好喜爱吃的纯黑巧克力。”

高飞狗:”好久不见,想来瞧您,还请了卿不过喜爱吃的纯黑巧克力。”

黛丝:”以往还是布鲁托领在您来之,今天而独自上门,必定不怀好意。买了这样多巧克力,必是生成有他图吧?”

黛丝:”以往都是布鲁托领在若来的,今天您独自上门,必定不怀好意。买了这样多巧克力,必是变有外图吧?”

高飞狗:”你当时说之哟话,咱俩一块长大的,怎么会不怀好意? 别有他图也真的。”

高飞狗:”你当时说的哟话,咱俩一块长大的,怎么会无怀好意? 别有客图也真的。”

黛丝:”我哪怕了解乃管事非登出八宝殿! 说吧,又碰到什么疑难的难题了。”

黛丝:”我就是清楚乃管事不上八宝殿! 说吧,又逢什么疑难的难题了。”

高飞狗:”是这样的,这半年因为Cortex-M7(以下简称CM7)为基本之MCU越来越多,CPU周围新增了几乎种植部件,例如ITCM和ICache,最新的STM32H743,ITCM容量高及64KB,ICache容量高臻16KB,我本着那职能一知半解,对其用法一头雾水,你可知不能够被详细讲解一番?”

高飞狗:”是这样的,这片年为Cortex-M7(以下简称CM7)为主导之MCU越来越多,CPU周围新增了几种部件,例如ITCM和ICache,最新的STM32H743,ITCM容量高臻64KB,ICache容量高臻16KB,我本着那效用一知半解,对其用法一头雾水,你可知无可知为详细讲解一番?”

黛丝:”高飞,你呀时换得起早贪黑了,居然研究由高大上之科技来了。”

黛丝:”高飞,你什么时换得起早贪黑了,居然研究起高大上之科技来了。”

高飞狗心想:”只要能管您当时白富美做到手,再伟大上之艰难也只要不惜一切代价克服。”

高飞狗心想:”只要能将您及时白富美将到手,再宏伟上之孤苦呢如不惜一切代价克服。”

黛丝:”ITCM和ICache还确实是生时尚之物,毕竟是新物,我研究之工夫啊不添加,谈不达到教,说错的地方还请求马上指正。”

黛丝:”ITCM和ICache还确确实实是非常时尚的东西,毕竟是初物,我研究之辰呢非加上,谈不达标教,说错的地方还伸手马上指正。”

高飞狗:”你最好谦虚了!”

高飞狗:”你顶谦虚了!”

黛丝:”咱们要由实际上问题出发吧。”

黛丝:”咱们要从事实上问题出发吧。”

黛丝:”以堆储藏室空间吗条例。堆栈空间及其存储的各种数码(含应用程序中的拥有有变量),只有CPU才见面造访,而且是反复造访。但是,在CM7出现以前,堆栈空间只能放在SRAM中,而SRAM是共享资源,DMA可以看,其它总线Master也还可看。导致了以下问题:”

黛丝:”以堆仓房空间啊例。堆栈空间及其存储的各种数据(含应用程序中的具有片段变量),只有CPU才见面造访,而且是累累造访。但是,在CM7出现以前,堆栈空间只能放在SRAM中,而SRAM是共享资源,DMA可以看,其它总线Master也还好拜。导致了以下问题:”

黛丝:”Q1:CPU要与其余总线Master争夺SRAM访问控制权,最凄美的当儿,CPU只发生50%底光阴足以看SRAM,极大地降落了先后性能。”

黛丝:”Q1:CPU要与另外总线Master争夺SRAM访问控制权,最惨痛的时刻,CPU只来50%之辰足以看SRAM,极大地回落了先后性能。”

黛丝:”Q2:其它总线Master有或篡改堆栈空间上之数据,严重威胁应用程序的安全。”

黛丝:”Q2:其它总线Master有或篡改堆栈空间达到的数额,严重威胁应用程序的平安。”

高飞狗:”对对对,我虽生出了这么的更。”

高飞狗:”对对对,我哪怕闹了这么的经验。”

黛丝:”ITCM的出现,彻底解决了上述两只问题。ITCM就是CPU的嫔妃,归CPU专享、专用、私有、独占。我们把堆库空间布置在ITCM内,CPU就得零等待、单周期、全速访问堆栈空间和反复用到之数对象,大大提升应用程序性能,且其中的数码不见面吃其他总线Master篡改,大大升级了应用程序的安全性。”

黛丝:”ITCM的出现,彻底解决了上述两只问题。ITCM就是CPU的贵人,归CPU专享、专用、私有、独占。我们拿堆库房空间布置在ITCM内,CPU就可以零等待、单周期、全速访问堆栈空间以及频繁用到的数量对象,大大升级应用程序性能,且其中的数目不会见为外总线Master篡改,大大提升了应用程序的安全性。”

高飞狗:”茅塞顿开!”

高飞狗:”茅塞顿开!”

高飞狗:”除此之外,ITCM还有呀用?”

高飞狗:”除此之外,ITCM还有啊用?”

黛丝:”在错综复杂应用程序中,常常强频地、随机地发生各种中断。发生搁浅时,就要读取中断向量表(IVT),然后跳反到中断服务程序(ISR)。在CM7出现前,CPU应针对中断存在以下几个头疼的问题:”

黛丝:”在错综复杂应用程序中,常常强频地、随机地来各种中断。发生中断时,就要读取中断向量表(IVT),然后跳反到中断服务程序(ISR)。在CM7出现之前,CPU应针对搁浅存在以下几单头疼的问题:”

黛丝:”Q1:IVT与受暂停代码的情理地址去(简称空距)通常比较远,需要吃多独机械周期才会读取中断向量。”

黛丝:”Q1:IVT与被搁浅代码的物理地址去(简称空距)通常比远,需要耗费多独机器周期才会读取中断向量。”

黛丝:”Q2:而ISR与IVT的空距通常为于远,又用消耗多单机器周期才会超越反到ISR。”

黛丝:”Q2:而ISR与IVT的空距通常也正如远,又得消耗多个机械周期才能够超过反到ISR。”

黛丝:”于是,产生同样软暂停,要耗费多机周期才会超过反执行到ISR。”

黛丝:”于是,产生相同潮暂停,要消耗成千上万机周期才能够超过反执行及ISR。”

黛丝:”Q3:ISR返回到被中止代码又比方耗多个机械周期。”

黛丝:”Q3:ISR返回到被中止代码又如果耗多个机械周期。”

黛丝:”执行同一浅ISR,花费在代码跳转上之年华接近不多。但是,高度频繁、随机产生的各种中断,将设CPU在先后跳反上淘极其巨大的时。在错综复杂、实时性要求比高的使中,其代价还是特别惊人的。”

黛丝:”执行同样坏ISR,花费在代码跳转上之年华接近不多。但是,高度频繁、随机产生的各种中断,将设CPU在次跳反上吃极其巨大的时。在千头万绪、实时性要求于高之动中,其代价还是非常可观之。”

黛丝:”ITCM的起,完美解决了上述3个问题。程序设计者可以人工地把IVT和ISR安排在同样片连续地址空间内,在系统启动时以那个整个装ITCM中,由于CPU访问ITCM总是独自周期的,以上3个问题中的次序跳反均好就周期就,大幅提升了ISR的实时性能。”

黛丝:”ITCM的面世,完美解决了以上3只问题。程序设计者可以人工地管IVT和ISR安排在同一片连续地址空间内,在系统启动时用那全部装ITCM中,由于CPU访问ITCM总是独自周期的,以上3单问题吃之顺序跳反均可以仅周期就,大幅升级了ISR的实时性能。”

 

 

高飞狗:”我记忆MCU内部通常都放起起适应实时加速器 (ART-Accelerator™),为什么还欲ITCM来举行这项工作呢?”

高飞狗:”我记忆MCU内部通常还放起于适应实时加速器 (ART-Accelerator™),为什么还需ITCM来开这项工作吧?”

黛丝:”在一一读取连续存放的下令时,ART- Accelerator有显而易见的涨潮效果。而以上3独问题之气象,基本上是随便读取指令,也尽管是代码间的空距较远,ART- Accelerator的效用就大打折扣,基本没什么提速作用,这正是ART- Accelerator的短板,而ITCM的产出则大大升级了随机读取指令和多少的特性,补及了ART- Accelerator的短板。”

黛丝:”在逐一读取连续存放的通令时,ART- Accelerator有醒目的提速效果。而上述3独问题的情况,基本上是轻易读取指令,也就是是代码间的空距较远,ART- Accelerator的功能就是大打折扣,基本没什么提速作用,这多亏ART- Accelerator的短板,而ITCM的起则大大提升了随机读取指令与多少的性能,补及了ART- Accelerator的短板。”

 

 

高飞狗:”我理解了。”

高飞狗:”我知道了。”

高飞狗:”亲爱的,我发现,STM32H743的ITCM容量高及64KB,除了缓存IVT、ISR、堆栈空间之外,把整RTOS缓存进去吧从没问题。如此,CPU就好独占地、单周期看高频度用到之代码和数量,应用程序的性能提高幅度将是不足想像的。”

高飞狗:”亲爱的,我意识,STM32H743的ITCM容量高臻64KB,除了缓存IVT、ISR、堆栈空间之外,把全部RTOS缓存进去吧从没问题。如此,CPU就好独占地、单周期看高频度用到的代码和数目,应用程序的习性提高幅度将凡不足想像的。”

黛丝:”你或不行懂事的! 比以前聪明多矣!”

黛丝:”你还是好懂事的! 比以前聪明多矣!”

高飞狗:”我清楚为何而将ITCM的容量设计得这般可怜了。”

高飞狗:”我知道为什么而将ITCM的容量设计得这般老了。”

高飞狗:”CM7是32位中心,为何ITCM被规划也64各项宽度?”

高飞狗:”CM7是32员中心,为何ITCM被规划也罢64各类宽度?”

黛丝:”虽然CM7的平头运算能力多也32位,但为起微量64各项整数运算指令与大量64个对精度浮点数运算指令,传送64号数据的要求还是多多益善之,而且不少命令需要同糟传送多单32号数据,如下表所示,与32各总线宽度相比,64个之总线宽度可以省50%的数码传送时间,性能提升是甚惊人的。”

黛丝:”虽然CM7的平头运算能力多也32各类,但也来微量64各整数运算指令和大量64位对精度浮点数运算指令,传送64各项数据的求还是众多底,而且多命需要一致破传送多只32各项数据,如下表所示,与32员总线宽度相比,64号的总线宽度可以节省50%底数传送时间,性能提升是死惊人之。”

例子:一次传送64位宽度数据的指令

说明

LDRD R8, R9, [R3];

以R3为地址指针,将一个64位双字载入R8和R9

LDM R8, {R0-R3}

以R8为地址指针,读取4个32位数据到寄存器中

相当于传送2个64位双字

STM R1, {R3-R6,R11,R12}

以R1为地址指针,存储6个32位寄存器数据

相当于传送3个64位双字

PUSH {R4-R7};

将4个32位寄存器推入堆栈,相当于2个64位双字

64位双精度浮点数的读取和存储指令

不再列出具体指令

例子:一次传送64位宽度数据的指令

说明

LDRD R8, R9, [R3];

以R3为地址指针,将一个64位双字载入R8和R9

LDM R8, {R0-R3}

以R8为地址指针,读取4个32位数据到寄存器中

相当于传送2个64位双字

STM R1, {R3-R6,R11,R12}

以R1为地址指针,存储6个32位寄存器数据

相当于传送3个64位双字

PUSH {R4-R7};

将4个32位寄存器推入堆栈,相当于2个64位双字

64位双精度浮点数的读取和存储指令

不再列出具体指令

 

 

高飞狗:”听你谈话了如此多,胜读多年题。有接触累了咔嚓? 我叫你泡杯咖啡,吃块巧克力如何?”

高飞狗:”听你道了这般多,胜读多年书。有硌累了吧? 我给您泡杯咖啡,吃块巧克力如何?”

黛丝:”你倒反客为主了!还发何问题,一气问了,我还要出去办事为。”

黛丝:”你倒反客为主了!还出吗问题,一气问了,我还要出去干活为。”

高飞狗心想:”还这样狠心,一丝咸聊的时机还不叫。”

高飞狗心想:”还这么厉害,一丝咸聊的火候都不被。”

高飞狗:”既然ITCM这么好,为什么还发出了单ICache,又产生什么用也? 总起种植既生高飞,何生黛丝的觉得!”

高飞狗:”既然ITCM这么好,为什么还生了个ICache,又产生什么用也? 总起种植既生高飞,何生黛丝的觉得!”

黛丝:”巧言令色,看自己不登大而!”

黛丝:”巧言令色,看我莫踩好而!”

黛丝:”这还得看一个微例子,才会说得明白。如下表所示。”

黛丝:”这尚得看一个有些例子,才能够说得清楚。如下表所示。”

 

 

// 循环1亿次

while (…) {

function1(); // 函数地址在0x10000

function2(); // 函数地址在0x20000

function3(); // 函数地址在0x30000

}

// 循环1亿次

while (…) {

function1(); // 函数地址在0x10000

function2(); // 函数地址在0x20000

function3(); // 函数地址在0x30000

}

 

 

黛丝:”这段小程序来2只性状:

黛丝:”这段小序来2独特色:

F1:3只函数顺序得到推行,在实施时间达是邻的,简称时距相邻。

F1:3独函数顺序得到推行,在实践时达是隔壁之,简称时距相邻。

F2:3独函数的物理地址去好远,简称空距很远。

F2:3只函数的大体地址去非常远,简称空距很远。

 

 

盖空距很远,前一个函数执行完毕后,跳反执行到下一个函数,至少要花3个机器周期,循环的1不成施行费在跳转上之日子最少9独机械周期,循环的1亿破实施相应的开至少9亿单机器周期!

为空距很远,前一个函数执行了后,跳反执行及下一个函数,至少得花费3独机械周期,循环的1糟实施费在跳转上之时间最少9单机器周期,循环的1亿不善实践相应的支付至少9亿只机器周期!

 

 

发生了ICache之后,情况大不相同。

生矣ICache之后,情况大不相同。

ICache的特色是自行地管常偏离相邻的代码尽可能集中存放于协调体内,而随便这些代码的空距有差不多远,且CPU以单独周期看ICache。”

ICache的表征是活动地管常偏离相邻的代码尽可能集中存放于团结体内,而不论是这些代码的空距有多远,且CPU以只周期看ICache。”

 

 

黛丝:”以上述小循环也条例,在尽function1()期间,ICache会把function1()尽可能缓存在温馨体内,在实践了一次于巡回后,如果3单函数的总容量不超过ICache的容量,那么3单函数的全部代码都都缓存在ICache体内。从循环的第2不善实行起来,CPU只需要访问ICache就好执行总体循环,不必还拜FLASH,所有指令的获都是光周期的。前一个函数执行了后,跳反执行及下一个函数,只待1单机械周期,循环的1亿糟糕实行费在函数跳反上的时空才待3亿单机器周期!”

黛丝:”以上述小循环也例,在实施function1()期间,ICache会把function1()尽可能缓存在投机体内,在推行了一次巡回后,如果3单函数的总容量不超过ICache的容量,那么3单函数的方方面面代码都已缓存在ICache体内。从循环的第2蹩脚实践起来,CPU只需要访问ICache就得执行总体循环,不必还拜FLASH,所有指令的取都是单独周期的。前一个函数执行完毕后,跳反执行到下一个函数,只待1个机器周期,循环的1亿涂鸦实践费在函数跳反上之辰只有需要3亿个机械周期!”

黛丝:”通常,函数function1/2/3()还会见调用其它众多函数,函数之间的跳转切换数量而远远多于如达到所说。只要容量足够好,ICache还会见把给function1/2/3()调用的旁函数通通缓存到体内,由此要省的执行时远远超越如上所述。”

黛丝:”通常,函数function1/2/3()还会调用其它众多函数,函数之间的跳转切换数量而远远多于如达到所说。只要容量足够大,ICache还见面拿让function1/2/3()调用的另外函数通通缓存到体内,由此要省的行时间远远高于如上所述。”

黛丝:”所以,ICache的优势是智能地、自动地以经常距离相邻而空距很远之代码段放置在体内,CPU因单周期看这些代码,大大升级了序性能。”

黛丝:”所以,ICache的优势是智能地、自动地拿经常偏离相邻而空距很远之代码段放置于体内,CPU因只周期看这些代码,大大升级了程序性能。”

黛丝:”而ITCM的优势是大妈升级了时距不相邻而空距相邻之代码段的行性,且需要人工地将代码组织成为空距相邻。”

黛丝:”而ITCM的优势是大大升级了时距不相邻而空距相邻的代码段的施行性,且待人工地将代码组织成空距相邻。”

高飞狗:”ICache会不会见缓存ITCM中之代码?”

高飞狗:”ICache会不见面缓存ITCM中之代码?”

黛丝:”由于CPU能够以单纯周期看ITCM中之全部内容,所以ITCM中之情节未必然缓存到ICache。在CPU硬件设计达到就确保做到这一点。所以,ICache中缓存的代码一定是ITCM之外的情节。”

黛丝:”由于CPU能够以只周期看ITCM中之全部内容,所以ITCM中之始末无自然缓存到ICache。在CPU硬件设计及虽保险好就一点。所以,ICache中缓存的代码一定是ITCM之外的情。”

高飞狗:”ITCM和ICache还确确实实各有所长。”

高飞狗:”ITCM和ICache还真各有所长。”

高飞狗:”你谈话了如此多,我来总结一下,你看对不对准。”

高飞狗:”你说话了这般多,我来总结一下,你看对无对准。”

高飞狗:”结论1:ITCM既会缓存代码也能够缓存数据,但需人工地管频繁执行的代码、IVT、ISR和储藏室空间连通(空距相邻),人为地装入其中。从而使CPU以只周期、独占方式访这些代码和数据,大幅提升应用程序的性及安全性。”

高飞狗:”结论1:ITCM既能缓存代码也克缓存数据,但得人工地将频繁执行的代码、IVT、ISR和仓库空间连通(空距相邻),人为地装入其中。从而使CPU以单周期、独占方式访这些代码和数量,大幅提升应用程序的习性与安全性。”

高飞狗:”结论2:ICache只能缓存代码,但智能地、自动地用经常去相邻而空距很远的代码段放置在体内,CPU以单独周期看这些代码,大幅升级程序性能。”

高飞狗:”结论2:ICache只能缓存代码,但智能地、自动地将经常距离相邻而空距很远的代码段放置在体内,CPU以仅周期看这些代码,大幅提升程序性能。”

高飞狗:”简而言之,ITCM和ICache是CPU的贴身护卫。”

高飞狗:”简而言之,ITCM和ICache是CPU的贴身护卫。”

黛丝:”概括得不得了好。”

黛丝:”概括得甚好。”

黛丝:”对于STM32H743,ITCM和ICache的总容量已落得80KB,如果程序设计者精心安排,使得80%的时CPU是于当下二者中尽顺序,应用程序的性提升以会无限巨大。”

黛丝:”对于STM32H743,ITCM和ICache的总容量已高达80KB,如果程序设计者精心安排,使得80%的时间CPU是以这两头中推行顺序,应用程序的性能提升将会晤尽巨大。”

 

 

高飞狗:”ITCM是Instruction Tightly Coupled
Memory的缩写,似乎其中只能存放代码?”

高飞狗:”ITCM是Instruction Tightly Coupled
Memory的缩写,似乎其中只能存放代码?”

黛丝:”你还不行仔细之!ITCM也可以存放数据,例如堆栈空间。所以,这个名词的确有点词不浅。”

黛丝:”你还特别仔细之!ITCM也可以存放数据,例如堆栈空间。所以,这个名词的确有点词不浅。”

 

 

高飞狗:”对了,CM7核心还新增了DCache部件。最近举行了一些实验,涉及DMA传送,好像一启用DCache,数据读写及传递就发出问题;只要禁用DCache,一切都正常。你可知无克为自身详细讲解一番?”

高飞狗:”对了,CM7核心还新增了DCache部件。最近开了部分试行,涉及DMA传送,好像一启用DCache,数据读写及传递就发生题目;只要禁用DCache,一切还正常。你能够无可知为本人详细讲解一番?”

黛丝:”今天时不早了,我还得出去干活,下次再说吧。”

黛丝:”今天日未早了,我还得出去干活,下次加以吧。”

高飞狗:”那我求吃晚饭,聊表谢意!”

高飞狗:”那我伸手吃晚餐,聊表谢意!”

黛丝:”饭和萎缩就无了,你还无运动我就从跑了您!”

黛丝:”饭和衰落就非了,你重新无挪自己就是从跑了你!”

高飞狗:”这么厉害呀!那自己就算未客气了,先走一步了。”

高飞狗:”这么狠心呀!那我就算非谦虚了,先走一步了。”

“高飞的白鹭,黛丝的鹅,唐诗里产生打,唐诗里生唱歌,唐诗是自个儿本着您的剖白…”

“高飞的白鹭,黛丝的鹅,唐诗里来打,唐诗里发唱歌,唐诗是自我本着而的剖白…”

相关文章