苹果版imtoken钱包下载|dmb
ARM64中的内存屏障指令(DMB,DSB,ISB) - 知乎
ARM64中的内存屏障指令(DMB,DSB,ISB) - 知乎首发于STM32-笔记切换模式写文章登录/注册ARM64中的内存屏障指令(DMB,DSB,ISB)随风新时代农民工!内存屏障指令是系统编程中很重要的一部分,特别是在多核并行编程中。本章重点介绍内存屏障指令产生的原因、ARM64处理器内存屏障指令以及内存屏障的案例分析等内容。18.2.1 使用内存屏障的场景在大部分场景下,我们不用特意关注内存屏障的,特别是在单处理器系统里,虽然CPU内部支持乱序执行以及预测式的执行,但是总体来说,CPU会保证最终执行结果符合程序员的要求。在多核并发编程的场景下,程序员需要考虑是不是应该用内存屏障指令。下面是一些需要考虑使用内存屏障指令的典型场景。在多个不同CPU内核之间共享数据。在弱一致性内存模型下,某个CPU乱的内存访问次序可能会产生竞争访问。执行和外设相关的操作,例如DMA操作。启动DMA操作的流程通常是这样的:第一步,把数据写入DMA缓冲区里;第二步,设置DMA相关寄存器来启动DMA。如果这中间没有内存屏障指令,第二步的相关操作有可能在第一步前面执行,这样DMA就传输了错误的数据。修改内存管理的策略,例如上下文切换、请求缺页以及修改页表等。修改存储指令的内存区域,例如自修改代码的场景。总之,我们使用内存屏障指令的目的是想让CPU按照程序代码逻辑来执行,而不是被CPU乱序执行和预测执行打乱了代码的执行次序。18.2.2 ARM64里的内存屏障指令ARMv8指令集提供了3条内存屏障指令。数据存储屏障(Data Memory Barrier,DMB)指令:仅当所有在它前面的存储器访问操作都执行完毕后,才提交(commit)在它后面的访问指令。DMB指令保证的是DMB指令之前的所有内存访问指令和DMB指令之后的所有内存访问指令的执行顺序。也就是说,DMB指令之后的内存访问指令不会被处理器重排到DMB指令的前面。DMB指令不会保证内存访问指令在内存屏障指令之前完成,它仅仅保证内存屏障指令前后的内存访问的执行顺序。DMB指令仅仅影响内存访问指令、数据高速缓存指令以及高速缓存管理指令等,并不会影响其他指令(例如算术运算指令等)的顺序。数据同步屏障(Data Synchronization Barrier,DSB)指令:比DMB指令要严格一些,仅当所有在它前面的内存访问指令都执行完毕后,才会执行在它后面的指令,即任何指令都要等待DSB指令前面的内存访问指令完成。位于此指令前的所有缓存(如分支预测和TLB维护)操作需要全部完成。指令同步屏障(Instruction Synchronization Barrier,ISB)指令:确保所有在ISB指令之后的指令都从指令高速缓存或内存中重新预取。它刷新流水线(flush pipeline)和预取缓冲区后才会从指令高速缓存或者内存中预取ISB指令之后的指令。ISB指令通常用来保证上下文切换(如ASID更改、TLB维护操作等)的效果。18.2.3 DMB指令DMB指令仅仅影响数据访问的序列。注意,DMB指令不能保证任何指令必须在某个时刻一定执行完,它仅仅保证的是DMB指令前后的内存访问指令的执行次序。数据访问包括普通的加载操作(load)和存储操作(store),也包括数据高速缓存(data cache)维护指令(因为它也算数据访问指令)。DMB指令通常用来保证DMB指令之前的数据访问可以被DMB后面的数据访问指令观察到。所谓的观察到指的是先执行完A指令,然后执行B指令,于是B指令可以观察到A指令的执行结果。如果B指令先于A指令执行,那么B指令没有办法观察到A指令的执行结果。总之,DMB指令强调的是内存屏障前后数据访问指令的访问次序。这里有两个要点:一个是数据访问指令,另一个是保证访问的次序。DMB指令后面必须带参数,用来指定共享属性域(share ability domain)以及指定具体的访问顺序(before-after)。【例18-1】CPU执行下面两条指令。ldr x0,[x1]
str x2,[x3]LDR指令读取X1地址的值,STR指令把X2的值写入X3地址。如果这两条指令没有数据依赖(data dependency)或者地址依赖(address dependency),那么CPU可以先执行STR指令或者先执行LDR指令,从最终结果来看没有区别。数据依赖指的是相邻的读写操作是否存在数据依赖,例如,从Xn地址读取内容到Xm地址中,然后把Xm地址中的值写入Xy地址中,那么Xm为这两条指令的数据依赖,下面是伪代码。ldr xm,[xn]
str xm,[xy]地址依赖指的相邻的读写操作是否存在地址依赖,例如,从Xn地址读取内容到Xm地址中,然后把另外的一个值Xy写入Xm地址中,那么Xm为这两条指令的地址依赖,下面是伪代码。ldr xm,[xn]
str xy,[xm]在例18-1中,如果想要确保CPU一定按照写的序列来执行代码,那么就需要加入一条DMB指令,这样就可以保证CPU一定先执行LDR指令,后执行STR指令,例如下面的代码片段。ldr x0,[x1]
dmb ish
str x2,[x3]【例18-2】CPU执行下面两条指令。ldr x0,[x1]
str x0,[x3]LDR指令读取X1地址的值到X0寄存器,然后把X0寄存器的值写入X3地址。这两条指令存在数据依赖,不使用内存屏障指令也能保证上述两条指令的执行次序。【例18-3】CPU执行如下3条指令。ldr x0,[x1]
dmb ish
add x2,x3,x4第一条指令是加载指令,第二条指令是DMB内存屏障指令,第三条指令是算术运算(ADD)指令。尽管加载和算术运算指令之间有一条DMB内存屏障指令,但是第三条指令是有可能在加载指令前面执行的。DMB内存屏障指令只能保证数据访问指令的执行次序,但是ADD指令不是数据访问指令,因此无法阻止ADD指令被重排到第一条指令前面。解决办法是把DMB指令换成DSB指令。【例18-4】CPU执行如下4条指令。ldr x0, [x2]
dmb ish
add x3, x3, #1
str x4, [x5]第一条指令是LDR指令,把X2地址的内容加载到X0寄存器。第二条指令是DMB指令,第三条指令是ADD运算指令,它不属于数据访问指令。第四条指令是STR指令,把X4寄存器的值存到X5地址处。这里的数据访问指令只有第一条和第四条,因此LDR指令的执行结果必须要被DMB后面的STR指令观察到,即LDR指令要先于STR指令执行。此外,由于这里的ADD指令不是数据访问指令,因此它可以被乱序重排到LDR指令前面。【例18-5】CPU执行如下4条指令。dc cvac,x6
ldr x1, [x2]
dmb ish
ldr x3, [x7]第一条指令是数据高速缓存维护指令,它用于清理X6对应地址的数据高速缓存。第二条指令是LDR指令,第三条指令是DMB指令,第四条指令也是LDR指令。前面两条指令之间没有DMB指令,而且都是数据访问指令,因此从执行顺序角度来观察,LDR指令可以乱序重排到DC指令前面。第四条指令能观察到DC指令执行完成,或者说第四条指令不能在DMB指令前面执行。数据高速缓存和统一高速缓存(unified cache)相关的维护指令其实也算数据访问指令,所以,在DMB指令前面的数据高速缓存维护指令必须在DMB指令后面的内存访问指令之前执行完。通过上述几个例子的分析可知,DMB指令关注的是内存访问的序列,不需要关心内存访问指令什么时候执行完。DMB前面的数据访问指令必须被DMB后面的数据访问指令观察到。18.2.4 DSB指令DSB指令要比DMB指令严格得多。DSB后面的任何指令必须满足下面两个条件才能开始执行。DSB指令前面的所有数据访问指令(内存访问指令)必须执行完。DSB指令前面的高速缓存、分支预测、TLB等维护指令也必须执行完。这两个条件满足之后才能执行DSB指令后面的指令。注意,DSB指令后面的指令指的是任意指令。与DMB指令相比,DSB指令规定了DSB指令在什么条件下才能执行,而DMB指令仅仅约束屏障前后的数据访问指令的执行次序。【例18-6】CPU执行如下3条指令。ldr x0,[x1]
dsb ish
add x2,x3,x4ADD指令必须要等待DSB指令执行完才能开始执行,它不能重排到LDR指令前面。如果把DSB指令换成DMB指令,那么ADD指令可以重排到LDR指令前面。【例18-7】CPU执行如下4条指令。dc civa x5
str x1, [x2]
dsb ish
add x3,x3,#1第一条指令是DC指令,它清空虚拟地址(X5寄存器)对应的数据高速缓存并使其失效。第二条指令把X1寄存器的值存储到X2地址处。第三条指令是DSB指令。第四条指令是ADD指令,让X3寄存器的值加1。DC指令和STR指令必须在DSB指令之前执行完。ADD指令必须等到DSB指令执行完才能开始执行。尽管ADD指令不是数据访问指令,但是它也必须等到DSB指令执行完才能开始执行。在一个多核系统里,高速缓存和TLB维护指令会广播到其他CPU内核,执行本地相关的维护操作。DSB指令等待这些广播并收到其他CPU内核发送的应答信号才算执行完。所以,当DSB指令执行完时,其他CPU内核已经看到第一条DC指令执行完。18.2.5 DMB和DSB指令的参数DMB和DSB指令后面可以带参数,用于指定共享属性域以及具体的访问顺序。共享属性域是内存屏障指令的作用域。ARMv8体系结构里定义了4种域。全系统共享(full system sharable)域,指的是全系统的范围。外部共享(outer sharable)域。内部共享(inner sharable)域。不指定共享(non-sharable)域。除指定范围之外,我们还可以进一步细化内存屏障指令的访问方向,例如,细分为读内存屏障、写内存屏障以及读写内存屏障。第一种是读内存屏障(Load-Load/Store)指令,在参数里的后缀为LD。在内存屏障指令之前的所有加载指令必须完成,但是不需要保证存储指令执行完。在内存屏障指令后面的加载和存储指令必须等到内存屏障指令执行完。第二种是写内存屏障(Store-Store)指令,在参数里的后缀为ST。写内存屏障指令仅仅影响存储操作,对加载操作则没有约束。第三种为读写内存屏障指令。在内存屏障指令之前的所有读写指令必须在内存屏障指令之前执行完。第一种和第二种指令相当于把功能弱化成单一功能的内存屏障指令,而第三种指令就是全功能的内存屏障指令。内存屏障指令的参数如表18.1所示。表18.1 内存屏障指令的参数18.2.6 单方向内存屏障原语ARMv8指令集还支持隐含内存屏障原语的加载和存储指令,这些内存屏障原语影响了加载和存储指令的执行顺序,它们对执行顺序的影响是单方向的。获取(acquire)屏障原语:该屏障原语之后的读写操作不能重排到该屏障原语前面,通常该屏障原语和加载指令结合。释放(release)屏障原语:该屏障原语之前的读写操作不能重排到该屏障原语后面,通常该屏障原语和存储指令结合。加载-获取(load-acquire)屏障原语:含有获取屏障原语的读操作,相当于单方向向后的屏障指令。所有加载-获取内存屏障指令后面的内存访问指令只能在加载-获取内存屏障指令执行后才能开始执行,并且被其他CPU观察到。如图18.1所示,读指令1和写指令1可以向前(如图18.1中指令执行的方向)越过该屏障指令,但是读指令2和写指令2不能向后(如图18.1中指令执行的方向)越过该屏障指令。▲图18.1 加载-获取屏障原语存储-释放(store-release)屏障原语:含有释放屏障原语的写操作,相当于单方向向前的屏障指令。只有所有存储-释放屏障原语之前的指令完成了,才能执行存储-释放屏障原语之后的指令,这样其他CPU可以观察到存储-释放屏障原语之前的指令已经执行完。读指令2和写指令2可以向后(如图18.2中指令执行的方向)越过存储-释放屏障指令,但是读指令1和写指令1不能向前(如图18.2中指令执行的方向)越过存储-释放屏障指令。▲图18.2 存储-释放屏障原语加载-获取和存储-释放屏障指令相当于单方向的DMB指令,而DMB指令相当于全方向的栅障。任何读写操作都不能越过该栅障。它们组合使用可以增强代码灵活性并提高执行效率。如图18.3所示,加载-获取屏障指令和存储-释放屏障指令组成了一个临界区,这相当于一个栅障。读指令1和写指令1可以挪到加载-获取屏障指令后面,但是不能向前(如图18.3中指令执行的方向)越过存储-释放屏障指令。读指令3和写指令3不能向后(如图18.3中指令执行的方向)越过加载-获取屏障指令。在临界区中的内存访问指令不能越过临界区,如读指令2和写指令2不能越过临界区。▲图18.3 加载-获取屏障指令与存储-释放屏障指令ARMv8 体系结构还提供一组新的加载和存储指令,其中显式包含了上述内存屏障原语,如表18.2所示。表18.2 新的加载和存储指令此外,ARMv8指令集还提供一组内置了上述屏障原语的独占加载与存储指令,如表18.3所示。表18.3 独占加载和存储指令18.2.7 ISB指令ISB指令会冲刷流水线,然后从指令高速缓存或者内存中重新预取指令。ARMv8体系结构中有一个术语——更改上下文操作(context-changing operation)。更改上下文操作包括高速缓存、TLB、分支预测等维护操作以及改变系统控制寄存器等操作。使用ISB确保在ISB之前执行的上下文更改操作的效果对在ISB指令之后获取的指令是可见的。更改上下文操作的效果仅仅在上下文同步事件(context synchronization event)之后能看到。上下文同步事件包括:发生一个异常(exception);从一个异常返回;执行了ISB指令。发生上下文同步事件产生的影响包括:在上下文同步事件发生时挂起的所有未屏蔽中断都会在上下文同步事件之后的第一条指令执行之前处理;在触发上下文同步事件的指令后面的所有指令不会执行,直到上下文同步事件处理完;在上下文同步事件之前完成的使TLB失效、指令高速缓存以及分支预测操作,都会影响在上下文同步事件后面出现的指令。例如,如果在上下文同步事件之前完成了使指令高速缓存失效的操作,那么在上下文同步事件之后,CPU会从指令高速缓存中重新取指令,相当于把流水线之前预取的指令清空。另外,修改系统控制寄存器通常是需要使用ISB指令的,但是并不是修改所有系统寄存器都需要ISB指令,例如修改PSTATE寄存器就不需要ISB指令。【例18-8】CPU执行如下代码来打开FPU功能。//打开FPU
mrs x1,cpacr_el1
orr x1, x1 #(0x3 << 20)
msr cpacr_el1, x1
isb
fadd s0, s1, s2把cpacr_el1的Bit[21:20]设置为0x3,即可以打开浮点运算单元。但是在打开之后,马上执行一条FADD指令,有可能会导致CPU异常。因为FADD这条指令可能已经在流水线里,并且有可能会提前执行,即打开浮点运算单元之前就提前执行了,所以出现错误了。解决办法就是插入一条ISB指令。这里的ISB指令是为了保证前面打开FPU的设置已经完成,才从指令高速缓存里预取FADD这条指令。【例18-9】改变页表项。1 str x10,[x1]
2 dsb ish
3 tlbi vae1is, x11
4 dsb ish
5 isb在第1行中,[x1]是页表项的地址,这里STR指令用来更新这个页表项的内容。在第2行中,DSB指令保证STR指令执行完。在第3行中,使页表项对应的TLB项失效。在第4行中,DSB指令保证TLB指令执行完。在第5行中,触发一个上下文同步事件,保证ISB后面的指令可以看到上述操作都完成,并且从指令高速缓存里重新预取指令。第5行是否可以换成DSB指令?答案是不可以,因为后面的指令在第2行以及第4行的指令没执行完时可能已经位于流水线中,即已经预取了旧的页表项的内容,这会导致程序执行错误。【例18-10】下面是一段自修改代码。自修改代码就是当代码执行时修改自身的指令。要保证自修改代码执行的正确性,需要使用高速缓存维护指令和内存屏障指令。在本案例中我们重点关注内存屏障指令的使用。首先,CPU0修改代码。1 str x11, [x1]
2 dc cvau,x1
3 dsb ish
4 ic ivau,x1
5 dsb ish
6 str x0,[x2]
7 isb
8 br x1在第1行中,[x1]是执行代码存储的地方,这里STR指令修改和更新最新代码。在第2行中,清理[x1]地址处的代码对应的数据高速缓存,把[x1]对应的数据高速缓存写回[x1]指向的地址中。在第3行中,DSB指令保证DC指令执行完,所有的CPU内核都看到这条指令已经执行完。在第4行中,使[x1]对应的指令高速缓存失效。在第5行中,DSB指令保证其他CPU内核都能观察到,使指令高速缓存失效的操作完成。在第6行中,[x2]表示标志位(flag),设置标志位为1,通知其他CPU代码已经更新了。在第7行中,ISB指令保证CPU0从指令高速缓存中重新预取指令。在第8行中,跳转到最新的代码中。上述的第7行指令一定使用ISB指令,否则第8行指令就会提前位于流水线里,预取X1寄存器的旧数据,导致程序错误。CPU1也开始执行新代码。1 WAIT (x2 == 1)
2 isb
3 br x1第1行的伪代码WAIT表示等待标志位置位。当置位之后,我们需要使用一条ISB指令来保证CPU1从指令高速缓存里重新预取指令。在这个例子里,有如下几个有趣的地方。在更新代码与清理对应数据高速缓存之间(见CPU0的代码片段中的第1行和第2行)没有使用内存屏障指令。因为更新代码内容和清理数据高速缓存都操作相同的地址,它们之间有数据依赖性,可以理解为相同的观察者,所以可以保证程序执行的次序(program order)。在清理数据高速缓存和使指令高速缓存无效之间需要内存屏障指令(见CPU0的代码片段中第2~4行)。虽然这两条高速缓存维护指令都操作相同的地址,但是它们是不同的观察者(一个在数据访问端,另一个在指令访问端),因此需要使用DSB指令来保证清理完数据高速缓存之后才去使指令高速缓存失效。在一个多核一致性的系统中,DSB指令能保证高速缓存维护指令执行完,其他CPU内核能观察到高速缓存维护指令完。DSB指令会等待高速缓存维护指令发送广播到其他CPU内核,并且等待这些CPU内核返回应答信号。18.2.8 高速缓存维护指令与内存屏障指令在ARMv8体系结构里,高速缓存维护指令(例如DC和IC指令)的执行顺序需要分情况来讨论。指令单元、数据单元、MMU等都可以看成不同的观察者。【例18-11】CPU执行如下两条指令。dc civau x2
ic ivau x2第一条是数据高速缓存维护指令,第二条是指令高速缓存维护指令。尽管二者都对X2寄存器进行高速缓存的维护,但是IC指令可以乱序并提前执行,或者DC指令还没清理完高速缓存就开始执行IC指令,这会导致IC指令有可能获取了X2寄存器中的旧数据。解决办法是在上述两条指令中间加入一条DSB指令,保证DC和IC指令的执行顺序,这样IC指令就可以获取X2的最新数据了。这里加入一条DMB指令行不行?数据高速缓存维护指令可以当成数据访问指令,但是指令高速缓存维护指令不能当成数据访问指令。如果这里改成DMB指令,那么后面的IC指令可能会在DC指令前面执行。因此,这里必须使用DSB指令。下面总结数据高速缓存、指令高速缓存以及TLB与内存屏障指令之间执行次序的关系。1.数据高速缓存与统一高速缓存维护指令通常L1高速缓存分成指令高速缓存和数据高速缓存,而L2和L3高速缓存是统一高速缓存。在单处理器系统中,使用一条DMB指令来保证数据高速缓存和统一高速缓存维护指令执行完。在多核系统中,同样使用DMB指令来保证高速缓存维护指令在指定的共享域中执行完。这里说的指定共享域通常指的是内部共享域和外部共享域。以DC指令为例,使某个虚拟地址(VA)失效。在多核系统中,这条使高速缓存失效的指令会向所有CPU内核的L1高速缓存发送广播,然后等待回应。当所有的CPU内核都回复了一个回应信号之后,这条指令才算执行完。DMB指令会等待和保证在指定共享域中所有的CPU都完成了使本地高速缓存失效的操作并回复了应答信号。注意,加载-获取和存储-释放内存屏障原语对高速缓存维护指令没有作用,它不能等待高速缓存的广播答应。DC指令与其他指令之间的执行次序需要分多种情况来讨论,我们假设这些指令之间没有显式地使用DSB/DMB指令(下面不讨论DC ZVA指令)。DC指令与加载/存储指令之间保证程序执行次序(program order)的条件如下。加载/存储指令访问的地址属于内部回写或者写直通策略的普通类型内存,并且它们访问的地址在同一个高速缓存行中。DC指令指定的地址与加载/存储指令访问的地址具有同一个高速缓存共享属性。DC指令与加载/存储指令之间可以是任意执行次序的情况有好几种。第一种情况如下。加载/存储指令访问的地址属于内部回写或者写直通策略的普通类型内存,并且访问的地址在同一个高速缓存行中。DC指令指定的地址与加载和存储指令访问的地址不具有同一个高速缓存共享属性。DC指令与加载/存储指令之间没有使用DSB或者DMB指令。第二种情况如下。加载/存储指令访问的地址属于设备类型内存或者没有使能高速缓存的普通类型内存。DC指令与加载/存储指令之间没有使用DSB或者DMB指令。第三种情况是加载/存储指令访问的地址和DC指令指定的地址不在同一个高速缓存行。多条DC指令之间的执行次序如下:如果DC指令指定的地址属于同一个高速缓存行,那么多条DC指令之间可以保证程序执行次序;如果DC指令指定的地址不在同一条高速缓存行或者没有指定地址,那么多条DC指令之间可以有任意执行次序。DC指令与IC指令之间可以有任意执行次序。综上所述,如果想保证DC指令与其他指令的执行次序,建议在DC指令后面添加DSB/DMB等内存屏障指令。2.指令高速缓存维护指令指令高速缓存与数据高速缓存在内存系统中是两个独立的观察者。与指令高速缓存相关的一些操作包括指令的预取、指令高速缓存行的填充等。与数据高速缓存相关的一些操作包括数据高速缓存行填充和数据预取等。在指令高速缓存维护操作完成之后需要执行一条DSB指令,确保在指定的共享域里所有的CPU内核都能看到这条高速缓存维护指令执行完。使指令高速缓存失效的指令会向指定共享域中所有CPU内核发送广播,DSB指令会等待所有CPU内核的回应。3.TLB维护指令遍历页表的硬件单元和数据访问的硬件单元在内存系统中是两个不同的观察者。遍历页表的硬件单元就包括MMU以及TLB操作。在TLB维护指令后面需要执行一条DSB指令,来保证在指定的共享域里面的所有CPU内核都能完成了TLB维护操作。在多核处理器系统中,TLB维护指令会发广播给指定共享域中的所有CPU内核,DSB指令会等待这些CPU的应答信号。4.ISB指令不会等待广播应答ISB指令不会等待广播应答信号,如果有需要,则每个CPU内核单独调用ISB指令。发布于 2023-01-26 14:39・IP 属地湖北ARM指令指令屏蔽赞同 155 条评论分享喜欢收藏申请转载文章被以下专栏收录STM32
广播系统_百度百科
_百度百科 网页新闻贴吧知道网盘图片视频地图文库资讯采购百科百度首页登录注册进入词条全站搜索帮助首页秒懂百科特色百科知识专题加入百科百科团队权威合作下载百科APP个人中心收藏查看我的收藏0有用+10广播系统播报讨论上传视频通信和广播相融合的新概念多媒体移动广播服务本词条由“科普中国”科学百科词条编写与应用工作项目 审核 。广播系统简称DMB,是DigitalMultimediaBroadcasting的英文缩写,是通信和广播相融合的新概念多媒体移动广播服务。并被称为第3代无线电广播。该项技术除了支持传统的音频广播之外,还将可以通过MPEG-4、H.264和MPEG-2、AAC+等多种方式,把交通信息和新闻等多种多媒体信息传输到手机上,提供高质量的音质和多样化的数据服务。而且其采用与移动电话一致的CDM(CodeDivisionMultiplexing)技术,特别适合移动接收环境,能够更好地应对移动接收环境中信号质量下降的多路径干扰问题。中文名广播系统外文名DigitalMultimediaBroadcasting简 写DMB通 过MPEG-4H.264和MPEG-2等多种方式目录1定义2优点3系统技术4商业模式5系统分类▪室外广播系统▪室内广播系统▪公共广播系统6传输分类定义播报编辑DMB是指将数字化了的音频信号及各种数据业务信号,在数字状态下进行各种编码、调制、传递等处理,由于数字信号在进行各种处理过程中,只有“1”和“0”两种状态,传递媒介自身的特征,包括噪声、非线形失真等,均不能改变数字信号的品质,同时又可方便地进行各种数值运算及各种逻辑编码运算,由于数字技术这些独特的优点,故在引入或替代现存的模拟系统后,便极大地改变了现存系统的技术运作环境,提高了系统的整体技术性能指标达到现存模拟技术无法实现的运作质量和要求。优点播报编辑1、提高了音频信号的传递质量和现有的模拟体制广播相比,由于数字信号自身的高可靠性,使得无论是在音频信号的处理或是在传递上,其声音的质量不变,即可保持演播室的品质,故相对于FM,其在几个主要音频指标上有上百倍乃至数百倍的改善,即可以达到人们常说的“CD”质量。2、有很高的功率效率同样由于数字信号传递的高可靠性及高抗干扰能力,接收机灵敏度可以做得较高,从而使得在实现和现存FM相同的广播覆盖要求情况下,其对发射功率的要求要低得多。我们的广播技术来看,其六套高质量音频节目共用1KW的功率发射,接近一套FM广播独用10KW发射的覆盖面。由此可见DAB的功率效率相对于FM有成百倍的改善。功率效率的大幅度提高,不仅仅是意味着能源的节约,另外还有很重要的一点是大幅度减低了DMB建台的费用。理由是DMB单机通道最多可发射六套高功率DMB节目功率等级要求又很低,故此相对于要分别发射六套高功率FM节目来说,一方面占用的机房面积要小数倍,另一方面其供配电、稳压、空调等辅助动力系统的容量则亦要小百倍,同时需投资较大的天馈系统亦要简单很多,尤其是新建台费用减少,建台周期也缩短很多,对将DMB大面积推广使用极为有利。3、很高的频谱效率如前所述数字调制技术有很高的频谱效率,具有对DMB来说尽管为了解决移动接收的问题而采用QPSK调制,频谱效率在2bit/Hz.s,其在1.5MHz的射频通道里不同时传送6套高质量音频节目,这样在一个电视频道8MHz带宽里,在考虑了各通道保护间隔的的情况下,可以方便地安排四个DMB通道,即可安排24套节目,则同时播出的节目个数还要多许多。这当然在现行模拟体制下是无法想象的。此外,还存在一个重要特性,即可方便地组成单频网利用该项技术可实现同内容的大面积覆盖,甚至是全省、全国范围的覆盖,这在实际上也极大地节约了频率资源,提高了频率的再利用率,这样综合考虑起来,的频谱效率会更为突出。除了上述之外,DMB还有抗多径干扰、快速衰落以及移动接收能力强,数据传送能力高的特点。系统技术播报编辑IP数据广播技术使得我们能够向移动手持接收机广播电视等数字节目。这一技术基于DVB-H标准与IP技术的融合,后者已经通过Web技术渗透到日常生活中。IP数据广播非常适合于移动内容的传播和接收,DVB组织正在制定构成其基础的DVB-H标准。在进行IP数据广播时,所有内容均以IP数据包的形式发送——这也是在互联网上发送数字内容所采用的形式。这带来的额外好处就是所有基于IP的数字内容既适用于数字广播,也适用于作为传统的电视节目。因此,消费者可以体验到广播与多媒体节目与其移动电话手持终端的较好结合。虽然从本质上讲是IP数据广播将电视引入了移动环境,但由此而产生了手机电视还是和传统的数字电视有几点不同,因为后者是在家庭和汽车中使用而设计的。移动环境要求采用不同的系统来支持手持接收机,因为这些设备没有外部天线、大屏幕或持续的电源供应。节省接收机的功耗是通过DVB-H支持的“时间分片”技术实现的。为了延长移动设备的电池寿命,DVB-H以高速猝发方式接收节目,然后进行缓冲和长时间播放。在猝死发送的间隙,接收机可以被关闭,从而可以大大节省能量消耗。另一项技术优势是,IP数据广播可以轻松适应手持终端较小的屏幕。要在这种较小的屏幕上传送高质量的视频内容,每一套电视节目,每一频道只需128~384kbps。这提高了广播效率,并使得在同一网络中可以传送30~80套电视节目。传统数字电视广播是配置使用大屏幕的,使用3~5Mbps宽比特流在类似的网络上传送3~5套节目。新设计的IP数据广播网络将支持覆盖室内的、配置小型内置天线的设备。这与在接收机中使用屋顶或其它外部天线的传统电视广播网络存在明显的差异。手机电视网络的室内覆盖是非常重要的,因为其业务应用与同样是在建筑物内或移动的车辆上进行的蜂窝电话业务非常相似。移动IP数据广播技术提供了一个交互式的反向信道。广播节目通过广播信道发送,而购买节目、投票或在线查看额外信息等可能的交互操作则通过蜂窝网络的反向信道完成。广播与蜂窝网络互为补充,并可为消费者提供多种多样的新节目和服务。商业模式播报编辑商用的IP数据广播系统促使现有的电信、传媒和广播产业的业者联手合作,在发挥各自核心业务的竞争力的同时,为各方开拓新的市场契机。IP数据广播因此应该是有偿服务的,而且可以通过精心的加密对服务进行保护。提供这种业务的最有可能的主要参与者包括大众传媒机构、电视广播公司、蜂窝电话运营商和广播网络运营商。为实施该业务,业务销售商必须提供具有IP数据广播功能的移动电话手机、网络基础设施和业务管理系统。最后,最终消费者将作为该业务的用户扮演关键角色。 [1]系统分类播报编辑室外广播系统室外广播系统主要用于体育场、车站、公园、艺术广场、音乐喷泉等。它的特点是服务区域面积大,空间宽广。背景噪声大;声音传播以直达声为主;要求的声压级高,如果周围有高楼大厦等反射物体,扬声器布局又不尽合理,声波经多次反射而形成超过50ms以上的延迟,会引起双重声或多重声,严重时会出现回声等问题,影响声音的声像定位。室外系统的音响效果还受气候条件、风向和环境干扰等影响。室内广播系统室内广播系统是应用最广泛的系统,包括各类影剧院、体育场、歌舞厅等。它的专业性很强,既能非语言扩声、又能供各类文艺演出使用,对音质的要求很高,系统设计不仅要考虑电声技术问题,还要涉及建筑声学问题。房间的体形等因素对音质有较大影响。公共广播系统公共广播系统为宾馆、商厦、港口、机场、地铁、学校提供背景音乐和广播节目。公共广播系统还兼做紧急广播,可与消防报警系统联动。公共广播系统的控制功能较多。如选区广播与全呼广播功能、强制功换功能和优先广播权功能等。扬声器负载多而分散、传输线路长。为减少传输线路损耗,一般都采用70V或100V定电压高阻抗输送。声压要求不高,音质以中音和中低音为主。特点:背景音乐简称BGM,是 Back ground music 的缩写,它的主要作用是掩盖噪声并创造一种轻松和谐的气氛,听的人若不专心听,就不能辨别其声源位置,音量较小,是一种创造轻松愉快环境气氛的音乐。因此,背景音乐的效果有两个,一是心理上掩盖环境噪声,二是创造与室内环境相适应的气氛,它在宾馆、酒店、餐厅、商场、医院、办公楼等广泛的应用。 [2]传输分类播报编辑无线广播系统无线广播是一种以无线发射的方式来传输广播的设备。具有无需立杆架线,覆盖范围广,无限扩容,安装维护方便,投资省,音质优美的特点。因此无线数字广播具有传统的有线广播无法比拟的优越性。智能调频广播系统由智能播控系统、数字音频工作站、调频发射接收系统组成。本方案本着“先进、实用”的指导思想,按我国最先进的无线广播的配置来设计,其指标已达到我国地市级专业广播电台的水平。根据无线调频广播的特点,结合工矿企业广播现状与发展方向,采用微电脑锁相、数码纠错、闪速存贮、SCA遥控编码、VB软件编程等先进技术、设计了一套具有国内领先技术水平的全数字智能工矿企业广播系统。系统采用FM-SCA副载波编码遥控技术,使用一个无线电频率,利用音频载波以外的副载波传输编码控制信号,无需申请控制频率,既节约了频率资源,又实现了对终端点的控制,而且提高了系统的稳定性和可靠性。数字化智能广播系统以其"优质、经济、稳定、实用"等特点,可广泛用于工矿企业管理、工矿企业会议、通知播放及出现紧急情况时播放紧急广播等。本系列产品以优质的品牌和合理的价格、设备先进、格调高雅、音质优美、功能齐全、性能优异等优点,带你进入公共广播自动化的崭新境界,让你在轻松美妙的音乐中度过,且此系统播出的乐曲以抒情风格、轻松美妙为主体。它集:休闲、娱乐、消防、紧急广播为一体,主要用于播放背景音乐及出现紧急情况时播放紧急广播。有线共缆调频广播系统有线调频广播系统就是将音频信号采用FM调频调制的方式,调制在87-108MHz这一频段内,与有线电视信号混合后,采用同轴电缆或者是光缆进行传输的一种广播信号传输方式,也就是我们常说的FM+CATV共缆传输方式,有线调频广播可以传输立体声调频广播信号,指标高的调频调制器可以达到CD音质。 [3]新手上路成长任务编辑入门编辑规则本人编辑我有疑问内容质疑在线客服官方贴吧意见反馈投诉建议举报不良信息未通过词条申诉投诉侵权信息封禁查询与解封©2024 Baidu 使用百度前必读 | 百科协议 | 隐私政策 | 百度百科合作平台 | 京ICP证030173号 京公网安备110000020000DMB数字多媒体广播_百度百科
字多媒体广播_百度百科 网页新闻贴吧知道网盘图片视频地图文库资讯采购百科百度首页登录注册进入词条全站搜索帮助首页秒懂百科特色百科知识专题加入百科百科团队权威合作下载百科APP个人中心收藏查看我的收藏0有用+10DMB数字多媒体广播播报讨论上传视频技术名词英译Digital Multimedia Broadcasting,是在数字音频广播DAB(Digital Audio Broadcasting)基础上发展起来的技术。两者本质一样,都属于数字多媒体广播范畴,简单点理解可以认为DAB类似传统的调频音频广播,而DMB可以接收观看数字可视化的电视节目。中文名DMB数字多媒体广播外文名Digital Multimedia Broadcasting发展基础DAB目录1简介2分类简介播报编辑DMB数字多媒体广播DMB将数字化了的音视频信号及各种数据业务信号,在数字状态下进行各种编码、调制、传递等处理,只有“1”和“0”两种状态,就其本身的特点,不受带宽和流量的限制,具有传输速率高、抗干扰能力强、网络覆盖面积大、频谱利用率高、能在高速状态(时速150KM/H)下稳定接收清晰的图像画面等特点。通过数字广播平台,理论上用户可以看到接近于DVD的视频效果,听到相当于CD立体声系统的音质,具有非常看好的应用前景。目前,我国仅在广州、上海、北京等少数城市和地区覆盖了DMB网络。分类播报编辑DMB分为两种一种是T-DMB(地面数字多媒体广播),建立在欧洲厂商开发的尤里卡147数字音频广播(DAB)系统的基础上,做了一定修改后可以向手机、PDA和便携电视等手持设备播送空中数字视音频节目;另一种是S-DMB(卫星数字多媒体广播),将数字视频或音频信息通过DMB卫星进行广播,由移动电话或其他专门的终端实现移动接收,是一种可以在很宽广的地区充分满足在移动环境下视听广播电视这一个性化要求的,极具竞争力的解决方案。前者投资额较小,适合于区域性应用,后者适用面比较广,甚至可以覆盖整个国家,所以投资额较大。新手上路成长任务编辑入门编辑规则本人编辑我有疑问内容质疑在线客服官方贴吧意见反馈投诉建议举报不良信息未通过词条申诉投诉侵权信息封禁查询与解封©2024 Baidu 使用百度前必读 | 百科协议 | 隐私政策 | 百度百科合作平台 | 京ICP证030173号 京公网安备110000020000DMB-抖音百科
抖ARM基础(6):内存屏障指令之DMB、DSB和ISB详解_dmb dsb isb-CSDN博客
>ARM基础(6):内存屏障指令之DMB、DSB和ISB详解_dmb dsb isb-CSDN博客
ARM基础(6):内存屏障指令之DMB、DSB和ISB详解
最新推荐文章于 2024-03-06 14:57:51 发布
tilblackout
最新推荐文章于 2024-03-06 14:57:51 发布
阅读量3.4k
收藏
25
点赞数
4
分类专栏:
ARM
文章标签:
arm开发
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/tilblackout/article/details/131949061
版权
ARM
专栏收录该内容
20 篇文章
30 订阅
订阅专栏
内存屏障是一个通用术语,用于指代一条或多条指令,它们强制处理器在执行加载(load)或存储(store)指令时进行同步事件。ARMv7-M 和 ARMv6-M架构都提供了三个内存屏障指令来支持内存顺序模型。这三个内存屏障指令分别是:DMB、DSB和ISB。
文章目录
1 DMB、DSB和ISB之概述2 三种指令的典型案例3 总结
1 DMB、DSB和ISB之概述
(1)Data Memory Barrier(DMB):数据内存屏障 主要用于多核处理器系统中,不同的处理器可能同时执行数据内存传输指令。DMB指令确保在DMB之前的所有显式数据内存传输指令都已经在内存中读取或写入完成,同时确保任何后续的数据内存传输指令都将在DMB执行之后开始执行,否则有些数据传输指令可能会提前执行。 (2)Data Synchronization Barrier(DSB):数据同步屏障 在计算机的体系结构中,处理器在执行指令时通常会利用指令流水线来提高性能。但也会产生一些问题,比如在多线程编程中,两个线程同时对共享的内存进行读写操作,由于读/写操作的重排序,就会导致数据的不一致。
当执行DSB指令时,它确保在DSB之前的所有显式数据内存传输指令都已经在内存中读取或写入完成,同时确保任何后续的指令都将在DSB执行之后开始执行。
(3)Instruction Synchronization Barrier(ISB):指令同步屏障 指令的流水线允许处理器同时执行多条指令的不同阶段,然而这样并行执行可能会导致一些问题,特别是涉及到上下文切换的情况,如实时操作系统的任务切换。当上下文切换时,可能指令流水线中的指令还在执行,而此时上下文已经改变,导致指令执行的结果不正确。
通过插入ISB指令,处理器会将流水线中的指令全部刷新,从而确保之前的指令不会影响后续指令的执行,并且后续指令将从正确的上下文开始重新获取。
tips:大多数CPU的体系架构在异常的入口和出口都有ISB的语义(自动执行) 当处理器执行代码时,可能会遇到异常情况,例如中断、系统调用、或者其他外部事件的触发。在这些情况下,处理器需要暂时中止当前的任务,转而处理异常事件,然后再返回到之前的任务继续执行。
具体来说,在进行异常进入之前,处理器会执行ISB操作。这样做的目的是刷新指令流水线,确保异常处理程序的指令是从正确的地址开始执行,避免异常之前的指令对异常处理程序造成干扰。
而在异常处理程序执行完毕后,处理器需要返回到之前被中断的任务继续执行。在进行异常返回之前,处理器同样会执行ISB操作。这样做的目的是刷新指令流水线,确保返回时从正确的地址重新获取指令,避免异常处理程序的指令对正常任务造成干扰。
(4)API 在C语言中,可以使用CMSIS或各种C编译器提供的函数来调用内存屏障指令。
内存屏障CMSIS函数MDK-ARM,DS-5和RVDS中集成的C编译器DMB_DMB()_dmb(0xF)DSB_DSB()_dsb(0xF)ISB_ISB()_isb(0xF)
这里的0xF表示指定一个完整系统屏障(Full System Barrier)操作,它将确保读写的屏障操作,适用于芯片内部的内存(如SRAM)和外部的内存(如自己接的HyperRAM),无论该内存是Shareable还是Non-Shareable。
2 三种指令的典型案例
1、DMB DMB指令保证了两个内存访问能按正确的顺序执行。实际上DMB在Cortex-M的处理器中用得并不多,因为Cortex-M处理器不会重新排序内存事务(Memory transaction)。但如果想要软件能在其他ARM处理器上重用(如Cortex-M移植到Cortex-A),尤其是在多主系统中,DMB是必要的。下面举几个例子: (1)DMA 在使用DMA控制器时,需要在CPU内存访问和DMA操作之间插入DMB屏障,以确保CPU当前的内存读写操作在DMA开始之前完成。
(2)多核系统中的信号量 在多核系统中,使用信号量进行核间同步。需要使用DMB来强制指定内存执行顺序,以避免潜在的竞态条件或数据不一致性。
当一个核要访问共享资源之前,它会先检查信号量的状态。如果信号量已经被另一个核获取,当前核就必须等待,直到信号量状态变为可用。这个等待过程需要保证在一个核释放信号量之后,其他核能够立即看到信号量状态的变化,而不是因为处理器优化或缓存导致的无效读取而产生错误。
在这里,DMB的作用就是强制执行内存顺序。通过在核获取信号量之前插入DMB屏障,确保在DMB之前的所有内存操作都完成。这样,在一个核释放信号量之后,其他核获取信号量的操作能够看到最新的信号量状态,从而实现正确的同步。
(3)多核系统中的邮箱 类似地,在核之间通过邮箱机制通信时,需要使用DMB来对邮箱的内存访问正确顺序,避免通信问题。
2、DSB 在Cortex-M处理器中,DSB可以用来: (1) 确保对SCS(System Control Space)的修改在下一条指令执行之前生效
在ARM Cortex-M处理器中,SCS是一个特殊的内存区域,包含了一些系统控制寄存器和配置信息,用于管理处理器和系统的各种功能和特性。访问SCS的寄存器可以影响处理器的行为,例如启用或禁用特定的中断、配置时钟、设置系统控制位等。为了确保对SCS的修改在下一条指令执行之前生效,需要使用DSB指令进行数据同步。
(2)确保在执行特权级指令之前,内存中的数据已经更新 在ARM Cortex-M处理器中,一些特殊的指令如SVC(Supervisor Call,特权级调用)、WFI(Wait For Interrupt,等待中断)、WFE(Wait For Event,等待事件)等操作,涉及到特权级的转换或者等待系统事件发生,需要使用DSB指令。
3、ISB ISB指令用于清空流水线,确保在ISB指令之前的所有上下文修改操作的效果被后续操作正确识别。有一个很典型的例子: CONTROL寄存器的修改 在修改CONTROL寄存器后,应该使用ISB指令。比如我们修改CONTROL寄存器中的相关字段以进入特权模式,然后下一行代码就是一些特权操作,在这之前就需要使用ISB指令来让处理器正确识别新的特权级。
3 总结
本文详细说明了DMB、DSB和ISB三个指令的含义和使用时机。但大多数简单处理器不会对内存传输进行重新排序,因此,体系结构的需求和处理器的实现需求是不同的。例如,大多数应用程序可以在现有的Cortex-M处理器上正确运行,而无需使用任何内存屏障指令。
但是,如果要将应用程序移植到高端处理器,则内存屏障指令的遗漏可能会导致应用程序出现故障。如果要将软件移植到具有多个处理器的系统上,内存屏障的使用也很重要。例如,在多处理器系统中处理信号量时,应该使用内存屏障指令来确保系统中的其他处理器能够以正确的顺序观察到数据的变化。
ARM建议软件开发人员基于架构需求开发软件,而不是基于处理器特定的行为。这确保了软件代码的可移植性和可重用性。处理器特定的行为在相同架构的不同的发布版本之间也可能有所不同。
关注博主即可阅读全文
优惠劵
tilblackout
关注
关注
4
点赞
踩
25
收藏
觉得还不错?
一键收藏
打赏
知道了
2
评论
ARM基础(6):内存屏障指令之DMB、DSB和ISB详解
本文详细说明了DMB、DSB和ISB三个指令的含义和使用时机。但大多数简单处理器不会对内存传输进行重新排序,因此,体系结构的需求和处理器的实现需求是不同的。例如,大多数应用程序可以在现有的Cortex-M处理器上正确运行,而无需使用任何内存屏障指令。
复制链接
扫一扫
专栏目录
【ARM Cache 系列文章 5 – 内存屏障ISB/DSB/DMB】
CodingCos的博客
11-06
2129
举个例子,如果dmb前后的两次访存指令访问的都是同一个终点(比如都是ddr,或者都是spi的fifo),它在能保证两次访问放射顺序的同时,其实就能保证实际的完成顺序了。DMB不能保证它前面的指令在它后面的指令之前完成,只能保证后面的指令能观察到前面的指令执行了(即在LSU的执行顺序是能得到保证的),可能你会问这样的屏障有什么实际的作用呢?DMB指令保证DMB指令前后的内存访问指令的执行次序,内存访问包括load、store、data cache维护指令, 像add指令DMB是管不到的。
DBG-DMB-DSB-ISB.zip_cannotmqq_dmb dsb dsb 区别_dsb() isb()_dsb指令使用
09-19
ARM处理器汇编指令描述,DBG、DMB、DSB 和 ISB指令
2 条评论
您还未登录,请先
登录
后发表或查看评论
指令隔离DMB,DSB,ISB
leekay123的博客
12-05
3178
像ARM7TDMI这样经典的ARM处理器会按照程序的顺序来执行指令或访问数据。而最新的ARM处理器会对执行指令和访问数据的顺序进行优化。举个例子,ARM v6/v7的处理器会对以下指令顺序进行优化。
LDR r0, [r1] ; 从普通/可Cache的内存中读取,并导致cache未命中STR r2, [r3] ; 写入普通/不可Cache的内存
假设第一条LDR...
关于__DSB(); __ISB();
weixin_34384915的博客
04-07
7316
为什么80%的码农都做不了架构师?>>>
...
NSBL:NSBL(DMB模拟棒球联盟)数据,分析和研究
05-14
国家统计局
该项目根据MIT许可条款获得许可。
此存储库主要包含一组python脚本,用于为NSBL模拟联盟( )构建和更新我的个人MySQL数据库。
可以从以下链接找到数据库的完整备份(.csv和SQL格式)。
一、barrier指令DSB,DMB,ISB,fence——内存屏障,指令屏障
iot_aaker的博客
12-23
7995
最近工作中遇到一个问题,大致描述一下:
我们SOC用的arm cortex m7内核,在设计时设计人员图方便,将SPI controller的寄存器(即原本应该是APB空间)放在了0x60000000的某一块空间(此空间arm的memory定义区间为external memory),然后同时把SPI flash的存储空间也映射在了0x60000000的这一块区间内。后者将spi flash memory映射在此区间内其实时合理的。但是将spi controller的寄存器也放在这块空间,验...
ARM内存屏障指令(DMB,DSB,ISB)
propor的专栏
06-14
913
ARM,内存屏障指令
DMB DSB ISB 简介
热门推荐
wangbinyantai的专栏
01-06
1万+
DMB: Data memory barrier
理解DMB指令,先看下面例子,在core 0和core1上同时跑两个不同的指令(如下表所示)
core 0
core 1
Write A;
Write B;
Load B;
Load A;
这里core0在执行两个指令,写A B两个值的时候,可能会发生乱序也可能Write A时发生Ca
ARM进阶:内存屏障(DMB/DSB/ISB)的20个使用例子详解
主要分享硬件、嵌入式软件部分知识
08-04
1775
在ARM体系架构中,内存屏障是一种用来确保程序在多核或多线程环境下按照预期顺序执行的机制。ARM定义了三种内存屏障指令,分别是DMB(数据内存屏障)、DSB(数据同步屏障)和ISB(指令同步屏障)。DMB指令用于确保内存访问的顺序性。在多核处理器中,不同核的缓存可能会引起数据一致性的问题,DMB指令在多核之间添加屏障,确保指令的执行顺序与内存访问的顺序一致,避免数据的读写乱序。DSB指令用于确保指令的完成和数据的同步。它保证在DSB指令之前的所有指令都已经完成执行,然后再执行DSB指令之后的指令。
I&C开发成功用于DMB的RF和Baseband一体化芯片
12-03
Mobile TV领域非制造工厂I&C Technology开发成功了用于DMB(Digital Multimedia Broadcasting,数字多媒体广播)的半导体RF Chip和Baseband Chip的一体化(One Chip),并透露8月份开始进行量产。 收听DMB必须装载在...
Frontier低功耗接收单芯片支持T-DMB和DAB-IP
12-02
Frontier Silicon推出了一款用于T-DMB和DAB-IP广播的单芯片接收器,扩大了该公司移动电视系列解决方案。这种被称为Paradiso 1T (FS1032)的新型集成电路采用增强系统级封装(SiP)技术且融合了Frontier Silicon独特的...
RFID技术中的I&C最新DMB单芯片集成了RF和Baseband模块
11-21
Mobile TV领域非制造工厂I&C Technology开发成功了用于DMB(Digital Multimedia Broadcasting,数字多媒体广播)的半导体RF Chip和Baseband Chip的一体化(One Chip),并透露8月份开始进行量产。 收听DMB必须装载在...
鸿蒙Harmony应用开发—ArkTS声明式开发(通用属性:形状裁剪)
m0_64420071的博客
03-02
891
ArkTS声明式开发(通用属性:形状裁剪)
鸿蒙Harmony应用开发—ArkTS声明式开发(事件独占控制)
m0_64420071的博客
03-06
837
ArkTS声明式开发(事件独占控制)
鸿蒙Harmony应用开发—ArkTS声明式开发(手势处理:绑定手势方法)
最新发布
m0_64420071的博客
03-06
681
ArkTS声明式开发-手势处理:绑定手势方法
Rio: Order-Preserving and CPU-Efficient Remote Storage Access——论文泛读
重新开始写博客
03-04
900
针对网络存储系统由于顺序执行导致CPU和IO性能下降。本文提出Rio,一个保序网络存储堆栈。允许异步处理有序写入、合并连续有序请求、使用顺序保留技术来强制执行持久性顺序。原理是添加了特殊结构,嵌入在原始请求中,使乱序执行的请求随时可以重建原始顺序。提出两个建议:I/O堆栈应该利用现代NIC和SSD的异步接口(即多个深层硬件队列和异步DMA引擎),以充分利用其高带宽;
鸿蒙Harmony应用开发—ArkTS声明式开发(通用属性:图片边框设置)
m0_64420071的博客
03-01
1269
ArkTS声明式开发(通用属性:图片边框设置)
鸿蒙Harmony应用开发—ArkTS声明式开发(通用属性:鼠标光标控制)
m0_64420071的博客
03-06
671
ArkTS声明式开发-通用属性:鼠标光标控制
鸿蒙Harmony应用开发—ArkTS声明式开发(通用属性:图形变换)
m0_64420071的博客
03-02
1042
ArkTS声明式开发(通用属性:图形变换)
DSB, DMB, ISB
11-04
DSB、DMB和ISB是ARM处理器中的三种同步指令。它们的作用分别是:
- DSB(Data Synchronization Barrier):强制CPU等待它之前的所有指令执行完毕,确保所有内存访问都已完成。
- DMB(Data Memory Barrier):确保所有在DMB指令之前的内存访问都已完成,然后才能执行DMB指令之后的内存访问。
- ISB(Instruction Synchronization Barrier):清空处理器流水线,确保ISB指令之后的所有指令都从缓存或内存中重新获取,以避免指令重排等问题。
这三种同步指令在ARM处理器中都有重要的作用,可以保证程序的正确性和稳定性。
“相关推荐”对你有帮助么?
非常没帮助
没帮助
一般
有帮助
非常有帮助
提交
tilblackout
CSDN认证博客专家
CSDN认证企业博客
码龄7年
嵌入式领域优质创作者
152
原创
1376
周排名
8935
总排名
33万+
访问
等级
2776
积分
7091
粉丝
781
获赞
119
评论
2816
收藏
私信
关注
热门文章
死区时间的分析与设置
17658
Git合并操作之merge、rebase、squash详解
15376
LVGL学习(3):页面切换原理和页面管理实现
9370
BLE学习(2):广播包报文格式详解
8757
C语言正余弦函数定点查表算法原理及实现
8170
分类专栏
嵌入式硬件
1篇
嵌入式Linux
14篇
LVGL
6篇
嵌入式
23篇
ARM
20篇
RT1170
11篇
Linux
6篇
RTOS
4篇
网络编程
13篇
git
3篇
C++
10篇
Peripheral
6篇
BLE
6篇
algorithm
6篇
FOC
7篇
LwIP
4篇
模拟电路
4篇
最新评论
ARM基础(6):内存屏障指令之DMB、DSB和ISB详解
anglaberber:
写的真不错
OpenCV NAO机器人辅助捡球丢球
A870994:
作者有git仓库吗 能看一下代码吗
LVGL学习(3):页面切换原理和页面管理实现
tilblackout:
网上找了个可以运行的codeblocks LVGL工程,把没用的代码删了,然后按照GUI GUIDER的代码结构修改了一下,后面就只需要往工程里添加一下文件就行了。
LVGL学习(3):页面切换原理和页面管理实现
ceh0315:
大佬,我看你用的nxp的guider,这个是怎么移植到codeblocks上的啊?我之前画了一个界面,始终移植不上去,现在只能用lvgl手搓
CORDIC算法 arctan反正切计算原理及C语言定点实现
tilblackout:
代码肯定没有错,我已经用于FOC算法跑过了。输入的数据要是标幺值,输出的也是对应的标幺值。
您愿意向朋友推荐“博客详情页”吗?
强烈不推荐
不推荐
一般般
推荐
强烈推荐
提交
最新文章
嵌入式硬件设计实例:基于STM32的流水灯原理图和PCB设计
Linux内核学习(1):目录结构、配置、编译和常用Shell命令
U-Boot学习(7):内核启动之bootz启动zImage源码分析
2024年12篇
2023年75篇
2022年43篇
2021年19篇
2020年4篇
目录
目录
分类专栏
嵌入式硬件
1篇
嵌入式Linux
14篇
LVGL
6篇
嵌入式
23篇
ARM
20篇
RT1170
11篇
Linux
6篇
RTOS
4篇
网络编程
13篇
git
3篇
C++
10篇
Peripheral
6篇
BLE
6篇
algorithm
6篇
FOC
7篇
LwIP
4篇
模拟电路
4篇
目录
评论 2
被折叠的 条评论
为什么被折叠?
到【灌水乐园】发言
查看更多评论
添加红包
祝福语
请填写红包祝福语或标题
红包数量
个
红包个数最小为10个
红包总金额
元
红包金额最低5元
余额支付
当前余额3.43元
前往充值 >
需支付:10.00元
取消
确定
下一步
知道了
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝
规则
hope_wisdom 发出的红包
打赏作者
tilblackout
你的鼓励将是我创作的最大动力
¥1
¥2
¥4
¥6
¥10
¥20
扫码支付:¥1
获取中
扫码支付
您的余额不足,请更换扫码支付或充值
打赏作者
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额
0
抵扣说明:
1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。 2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。
余额充值
ARM进阶:内存屏障(DMB/DSB/ISB)的20个使用例子详解___dsb();-CSDN博客
>ARM进阶:内存屏障(DMB/DSB/ISB)的20个使用例子详解___dsb();-CSDN博客
ARM进阶:内存屏障(DMB/DSB/ISB)的20个使用例子详解
tilblackout
已于 2023-08-04 00:26:16 修改
阅读量1.7k
收藏
22
点赞数
2
分类专栏:
ARM
文章标签:
arm开发
于 2023-08-04 00:25:45 首次发布
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/tilblackout/article/details/132030663
版权
ARM
专栏收录该内容
20 篇文章
30 订阅
订阅专栏
在上一节内存屏障指令之DMB、DSB和ISB详解中,介绍了一下内存屏障的三个指令的作用并举了一些例子,对于内存屏障指令的使用时机,与处理器架构(比如Cortex-M和Cortex-A)和处理器的系统实现(同样的架构,有不同的实现,如STM32、NXP都有基于Cortex-M4的单片机)都有关系。
本节将通过20个例子继续深入理解内存屏障,主要从以下两方面来介绍: (1)处理器架构要求:指在硬件体系结构中定义的规范和要求。它描述了处理器的指令集、寄存器、中断控制、内存访问、流水线结构等硬件特性。这些规范通常由处理器设计者或者架构定义组织(如ARM,x86等)确定。架构要求是通用的,适用于所有基于该架构的处理器。
(2)系统实现要求:指在具体处理器实现中,根据架构要求来实现这些规范的具体方法。每个处理器制造商可以根据架构规范,设计和生产自己的处理器,但他们的实现必须遵循架构规范。实现要求可能因处理器型号、版本和制造商而异。
文章目录
1 内存中普通数据的访问2 设备(外设)间的访问3 位带访问4 SCS外设访问5 通过NVIC使能中断6 通过NVIC关闭中断7 用CPS和MSR指令使能中断8 用CPS和MSR指令关闭中断9 禁用外设中断10 更改中断的优先级11 向量表配置-VTOR12 向量表条目配置13 内存映射的改变14 进入睡眠模式15 自启16 CONTROL寄存器17 MPU编程18 多主系统19 信号量和互斥锁(单核和多核)20 自修改代码总结
1 内存中普通数据的访问
这种情况下没有必要在每次内存访问之间都使用内存屏障:
处理器架构:只要不影响程序的运行,处理器就可以对数据传输重新排序系统实现:在Cortex-M处理器中,数据传输是按照编程的顺序进行的
2 设备(外设)间的访问
在外设编程或外设访问期间,不需要在每一步之间使用内存屏障指令:
处理器架构:对同一设备的访问必须按照程序的顺序进行系统实现:Cortex-M处理器不会重排序数据传输
如果编程顺序涉及许多不同的设备:
处理器架构:当访问不同的设备并且两个设备之间的编程顺序可能影响结果时,需要内存屏障。这是因为总线结构可能具有通往每个设备的不同总线分支,并且不同总线分支可能具有不同的延迟。系统实现:Cortex-M处理器不会对数据传输进行重新排序,因此当访问不同的设备时不需要内存屏障
3 位带访问
Cortex-M3和Cortex-M4处理器上的位带访问是一个特殊的特性。它可以让内存映射的两个部分成为位可寻址的:
处理器架构:位带特性不是ARMv7或ARMv6体系结构的一部分,因此对于使用内存屏障进行位带访问没有体系结构定义的要求系统实现:Cortex-M3和Cortex-M4处理器处理位带访问、位带区域以及位带别名区域,以编程顺序。没有必要使用内存屏障
ARM Cortex-M0和Cortex-M0+处理器没有位带特性。可以使用bus wrapper向Cortex-M0和Cortex-M0+处理器添加位带特性。在这种情况下,bus wrapper必须保持正确的内存顺序。
4 SCS外设访问
SCS外设访问,例如NVIC和调试访问,通常不需要使用内存屏障指令:不需要在每个SCS访问之间插入内存屏障指令,也不需要在SCS访问和设备内存访问之间插入内存屏障指令。
处理器架构:SCS所在的内存区域的MPU默认配置为强有序,自带DMB的作用(如下图所示) 系统实现:不需要在每个SCS访问之间插入内存屏障指令,也不需要在SCS访问和设备内存访问之间插入内存屏障指令
处理器架构要求
如果需要立即看到SCS寄存器写入的效果,则需要DSB不需要在相邻的两次访问SCS之间添加内存屏障指令如果下一条指令必须在前一条指令产生作用后执行,此时需要调用DSB指令,例子如下:
SCB->SCR |= SCB_SCR_SLEEPDEEP_Msk; /* Enable deepsleep */
__DSB(); /* Ensure effect of last store takes effect */
__WFI(); /* Enter sleep mode */
---------------------
void Device_IRQHandler(void) {
software_flag = 1; /* Update software variable used in thread */
SCB->SCR &= ~SCB_SCR_SLEEPONEXIT_Msk; /* Disable sleeponexit */
__DSB(); /* Ensure effect of last store takes effect */
return;
}
注意,当程序访问的是Normal内存时,SCS访问时,系统架构层面的DMB不能保证内存排序。如果程序的操作依赖于对SCS的访问与对普通内存的访问之间的顺序,那么就需要使用内存屏障指令,比如DMB或DSB。下面是一个例子:
STR R0, [R1] ; Access to a Normal Memory location
DMB ; Add DMB ensures ordering for ALL memory types
STR R3, [R2] ; Access to a SCS location
DMB ; Add DMB ensures ordering for ALL memory types
STR R0, [R1] ; Access to a Normal Memory location
如果[R1]指向的是设备内存区域或强有序内存区域,则不需要DMB
系统实现要求 在现有的Cortex-M处理器中,忽略DMB或DSB指令不会导致错误,因为这些处理器中的SCS已经包含DSB行为:
在Cortex-M0、M0+处理器中,这种行为在访问完成后立即发生。在SCS访问后,并不严格要求DSB。在Cortex-M3和M4处理器中,内存屏障的作用在访问SCS后立即生效。对于SCS内存的访问,除了特殊情况下的SLEEPONEXIT更新外,通常不严格要求使用DSB指令。
如果异常处理程序在异常返回之前禁用了SCS中的SLEEPONEXIT特性,则在SCR写入之后,在异常返回之前,需要DSB指令。参考前面的Device_IRQHandler例子。
看一下在系统实现层面,对SCS访问的表现: 图中说得很清楚,每次访问SCS(包括NVIC)都具有对设备/强序访问的自动添加数据同步屏障DSB的连带作用。所以对于前面处理器架构要求中的例子,DSB可以去掉:
SCB->SCR |= SCB_SCR_SLEEPDEEP_Msk; /* Enable deepsleep */
__WFI(); /* Enter sleep mode */
注意:
现有的Cortex-M处理器不会重新排序任何数据传输,因此不需要使用DMB指令对于Cortex-M3和Cortex-M4处理器,如果SCS加载/存储后的指令是NOP指令,或者是条件失败(condition failed)指令,则NOP指令或条件失败指令可以与SCS加载/存储指令并行执行
5 通过NVIC使能中断
通常,NVIC操作不需要使用内存屏障指令,代码如下所示:
device_config(); // Setup peripheral
NVIC_ClearingPending(device_IRQn); // clear pending status
NVIC_SetPriority(device_IRQn, priority); // set priority level
NVIC_EnableIRQ(device_IRQn); // Enable interrupt
当一个中断事件发生时,它可以先进入pending状态,而不管中断是否使能
前面有提到,从架构上看,每次访问SCS(NVIC属于SCS)时,对于设备内存或强有序内存的访问访问,相邻两次的操作之前都会插入DMB。 而从Cortex-M处理器的系统实现来看,每次访问SCS(NVIC属于SCS)时,对于设备内存或强有序内存的访问访问,相邻两次的操作之前都会插入DSB。 对于Cortex-M处理器来说,由于其流水线特性,如果中断已经处于挂起状态,处理器可以在执行中断服务程序之前在NVIC中启用中断后执行最多两个额外的指令。如下图所示: 处理器架构要求 不同的应用有不同的要求:
在一般的NVIC操作中,无需使用内存屏障NVIC和外设之间的操作间,无需使用内存屏障如果一个已经挂起的中断需要在使能NVIC后马上被响应,需要添加一个DSB,紧接着还要添加一个ISB
如果中断后的指令依赖于挂起的中断的结果,就应该添加内存屏障指令。处理中断的例子如下所示:
LDR R0, =0xE000E100 ; NVIC_SETENA address
MOVS R1, #0x1
STR R1, [R0] ; Enable IRQ #0
DSB ; Ensure write is completed
; (architecturally required, but not strictly
; required for existing Cortex-M processors)
ISB ; Ensure IRQ #0 is executed
CMP R8, #1 ; Value of R8 dependent on the execution
; result of IRQ #0 handler
如果省略了上面的内存屏障指令,CMP将在中断发生之前执行,如下图所示: 系统实现要求 不同的应用有不同的要求:
在一般的NVIC操作中,无需使用内存屏障如果一个已经挂起的中断需要在使能NVIC后马上被响应,需要添加一个ISB指令
注意:由于对NVIC(SCS)的访问本身就具有DSB内存屏障,因此省略DSB指令仍然可以立即识别已启用和挂起的中断。
6 通过NVIC关闭中断
由于Cortex-M的流水线架构,可以在进入中断序列(中断事件发生时,处理器执行的一系列操作和指令)的同时写入NVIC来禁用中断。因此,中断处理程序有可能会在NVIC禁用中断后立即执行。 处理器架构要求 根据不同的应用需求,需要使用内存屏障:
在禁用IRQ时,一般的NVIC编程不需要使用内存屏障在NVIC编程与外设编程之间,也不需要使用内存屏障如果需要确保在NVIC禁用中断后不会触发中断,可以添加DSB指令,然后再添加ISB指令
下面是一个切换中断处理函数(修改向量表)的例子:
#define MEMORY_PTR(addr) (*((volatile unsigned long *)(addr)))
NVIC_DisableIRQ(device_IRQn);
__DSB();
__ISB();
// Change vector to a different one
MEMORY_PTR(SCB->VTOR+0x40+(device_IRQn<<2))=(void) device_Handler;
系统实现要求 根据不同的应用需求,需要使用内存屏障:
在正常的NVIC编程中禁用IRQ时,不需要使用内存屏障在NVIC编程和外设编程之间,也不需要使用内存屏障如果需要确保在NVIC禁用中断后不会触发中断,可以添加ISB指令
7 用CPS和MSR指令使能中断
在正常的应用程序中,在使用CPS指令启用中断后,不需要添加任何屏障指令:
_enable_irq(); /* 实际上是执行CPSIE I来清除PRIMASK */
如果一个中断已经处于挂起状态,在调用CPSIE I后,处理器将处理该中断。然而,在处理器进入异常处理程序之前,可能会执行额外的指令:
对于Cortex-M3或Cortex-M4,处理器在进入中断服务程序之前最多可以执行两条额外的指令对于Cortex-M0,处理器在进入中断服务程序之前最多可以执行一条附加指令
如下图所示: 处理器架构要求
如果有必要确保在执行后续操作之前识别到挂起的中断,则应该在CPSIE i之后使用ISB指令,如下图所示: 在两个临界区任务之间,如果你希望允许一个挂起的中断发生,可以使用ISB指令来实现。代码如下所示:
__enable_irq(); // CPSIE I : Enable interrupt
__ISB(); // Allow pended interrupts to be recognized
__disable_irq(); // CPSID I : Disable interrupt
还有一个典型的例子是: 时序图如下:
当使用MSR指令启用中断时,要求同上
系统实现要求 在Cortex-M处理器中:
如果有必要确保在执行后续操作之前识别挂起的中断,则应该在CPSIE i之后使用ISB指令。这与处理器架构要求相同有一个例外是CPSIE后面跟着CPSID,但在Cortex-M处理器中,可以不用在CPSIE和CPSID之间插入ISB。代码如下:
时序图如下:
在系统实现需求中,不需要在__enable_irq()和__disable_irq()之间添加内存屏障指令。但是,在处理器架构要求中,如果需要在CPSIE和CPSID指令之间识别中断,则需要使用ISB指令。
当使用MSR指令启用中断时,要求同上
根据处理器架构要求,在某些情况下,如果需要确保中断能够在正确地被识别,则需要添加ISB指令。这是因为在一些特定的处理器架构中,中断的使能和禁用可能需要额外的同步来保证其正确性。因此,根据架构要求,使用ISB指令是一种确保正确行为的方法。在系统实现要求中未添加内存屏障的情况下,这个操作在特定架构中已经被合理地处理了,因此不需要额外的内存屏障。在刚刚的代码中,根据具体的系统实现要求,它并不需要在__enable_irq()和__disable_irq()之间添加内存屏障指令。这意味着在特定的处理器实现中,中断使能和禁用的操作已经在硬件层面上得到了适当的同步,无需额外的内存屏障指令。
8 用CPS和MSR指令关闭中断
CPSID指令在指令流中自我同步,无需在CPSID之后插入内存屏障指令。 处理器架构要求 无需使用内存屏障。
系统实现要求 无需使用内存屏障。
当使用MSR指令关闭中断时,要求同上
9 禁用外设中断
当在外设上禁用一个中断时,由于系统中存在多种可能的延迟源,可能需要额外的时间。下图显示了多种不同的延时源: 即使在禁用外设之后,也可能会在短时间内收到来自禁用外设的中断请求。
处理器架构要求 无要求,一切由下面的系统实现要求决定。
系统实现要求 延迟取决于设备。对于大多数情况,如果IRQ同步器中的延迟很小,可以使用以下步骤来禁用中断:
通过写入其控制寄存器CONTROL来禁用外设中断读取外设的控制寄存器,以确保其已更新在NVIC中禁用IRQ清除NVIC中的IRQ挂起状态读取IRQ挂起状态。如果IRQ挂起被设置了,清除外设中的IRQ状态,然后再次清除NVIC中的IRQ挂起状态。必须重复此步骤,直到NVIC IRQ挂起状态保持清除。
这个步骤序列适用于大多数简单的微控制器设备,可以成功地禁用中断。然而,由于系统内可能发生的各种延迟因素,建议联系芯片供应商或制造商获取支持。
10 更改中断的优先级
优先级的设置由SCS中NVIC的Priority Level寄存器决定。对于Cortex-M3或Cortex-M4处理器,优先级级别可以动态地进行更改。然而对于ARMv6-M处理器,例如Cortex-M0或Cortex-M0+,不支持对已启用的中断或异常的优先级进行动态更改。在启用中断之前,就应该设置优先级。
处理器架构要求 由于SCS是强有序内存,所以NVIC配置不需要内存屏障。但是,在更改中断优先级后,如果中断已启用并且需要中断按照新的优先级级别执行,应该在其后插入DSB和ISB指令。
注意:在ARMv6-M处理器上,只有在中断被禁用时才应该更改中断的优先级级别,否则结果是不可预测的
如果下一个指令是CPSIE或MSR,根据处理器架构要求,应该插入一个DSB指令,然后再插入一个ISB指令(如果想让一个挂起的中断马上被识别到,就调用ISB,否则可以不调用)。这样的操作顺序可以确保中断状态的正确切换和指令的顺序执行,以防止中断状态的不一致或指令乱序执行问题。
系统实现要求 在Cortex-M处理器中,访问中断优先级寄存器本身就有DSB屏障了,因为SCS是强有序内存。在Cortex-M3或Cortex-M4处理器中:
如果需要立即识别优先级的更改,需要使用ISB指令如果不需要在随后的操作之前立即识别优先级的更改,则不需要插入内存屏障指令如果下一个操作是SVC异常,则不需要插入内存屏障指令 对于Cortex-M3或Cortex-M4处理器,如果优先级级别的更改可能导致新的中断嵌套(比当前正在执行的中断优先级高),并且我们希望立即执行此中断,则需要插入ISB指令。否则,由于流水线的原因,最多可能会多执行两条指令。
11 向量表配置-VTOR
在Cortex-M3和Cortex-M4处理器中,向量表的位置由SCS中VTOR(Vector Table Offset Register)的设置决定。
处理器架构要求 从架构上讲,在更改VTOR后,如果要立即产生异常并使用最新的向量表设置,则应该使用DSB指令。 系统实现要求 在Cortex-M3、Cortex-M4和Cortex-M0+处理器中,对SCS的访问本身就具有DSB屏障,因此不需要插入DSB指令。
Cortex-M0处理器没有VTOR
12 向量表条目配置
这里指的是更新向量表中的各个条目(entry)。
处理器架构要求 如果向量表位于RAM(如SRAM/SDRAM)中,无论是通过VTOR重新定位还是通过设备相关的内存重映射机制进行重新定位,从架构上讲,在更新向量表条目后,如果要立即使能异常,则需要使用内存屏障指令。如下图所示: 如果下一条指令是访问RAM,则还需要一个DMB指令: 也就是说如果向量表保存在普通内存而不是强有序内存中,需要考虑内存屏障操作。 系统实现要求 在Cortex-M处理器中,省略DSB或DMB指令在修改向量条目时不会引发任何问题,因为异常条目序列在最后一个内存访问完成之前不会启动。
13 内存映射的改变
许多微控制器都包含了一种特定于设备的内存重映射功能,允许在运行时通过编程配置寄存器来更改内存映射,这个寄存器应放置在设备内存(device memory)中。在更改内存映射配置期间是否需要内存屏障指令取决于以下因素:
受影响的内存空间是否涵盖程序代码,即是否包括指令。处理器与内存配置寄存器之间的特定于设备的数据路径,例如写缓冲区(CPU和寄存器之间需要经过写缓冲区)。 处理器架构要求 这里讨论的要求适用以下条件:除了处理器内部的任何内部写缓冲区外,没有影响内存重映射控制寄存器的设备特定写缓冲区内存映射切换中没有额外的硬件延迟
从架构上讲,在进行内存映射更改的前后,应该插入内存屏障指令:
... ; application code before switching
DSB ; Ensure all memory accesses are completed
STR
DSB ; Ensure the write is completed
ISB ; Flush instruction buffer (optional, only required if
; the memory map change affects program memory)
... ; application code after switching
如果受影响的内存没有在任何程序代码中使用,则在内存映射更改后需要插入DSB指令,但可以省略ISB指令。 系统实现要求 这里讨论的要求同样适用以下条件:
除了处理器内部的任何内部写缓冲区外,没有影响内存重映射控制寄存器的设备特定写缓冲区内存映射切换中没有额外的硬件延迟
在Cortex-M处理器中:
在进行内存映射更改之前,不需要DSB或DMB指令,因为这些处理器不允许两个写操作序列重叠在重映射后,需要进行DSB然后ISB的序列,以确保使用最新的内存映射获取程序代码
在这个案例研究中,做出了两个假设。如果这些假设无效,例如,如果处理器与内存控制寄存器之间的数据路径包含额外的系统级写缓冲区,那么内存屏障指令不能保证传输完成。在这种情况下:
可以从先前访问的区域执行读取操作,以确保写缓冲区被清空。如果已向系统的各个部分发出了多个写传输,可能需要多次读取操作以确保所有写缓冲区都被清空。或者,微控制器或SoC可能具有状态寄存器,指示是否存在任何正在进行的传输,并在内存重映射完成时进行通知。如果需要,这允许程序代码考虑内存重映射逻辑上的额外硬件延迟。
具体的差异还是得详细咨询不同芯片制造商。
14 进入睡眠模式
在Cortex-M处理器中,可以使用WFI和WFE指令进入睡眠模式。
处理器架构要求 从架构上来说,应该在执行WFI或WFE指令之前使用DSB指令:
系统实现要求 对于不包含系统级写缓冲区的简单设计,在进入Cortex-M3(r2p0或更高版本)、Cortex-M4、Cortex-M0+和Cortex-M0处理器的睡眠模式之前,不需要使用内存屏障指令。这由处理器自身处理。如果内部总线包含一个位于处理器之外的系统级写缓冲区,则情况就更复杂了。在这种情况下,仅使用DSB指令可能是不够的,因为系统控制逻辑可能会在缓冲写完成之前关闭时钟。 时钟信号被关闭可能不会导致错误,这取决于系统级设计、使用的休眠操作以及进入休眠模式前正在访问的外设。建议联系芯片供应商或制造商获取设备详细信息。通常可以通过向写缓冲器添加一个虚拟读操作以确保写缓冲器被清空来解决这个问题。下图显示了一个可能的解决方法:
15 自启
Cortex-M处理器具有自启(self-reset)功能。可以通过AIRCR寄存器中的SYSRESETREQ位触发系统复位。在CMSIS库中,可以使用C函数NVIC_SystemReset(void)来使用这个功能。
处理器架构要求 在自启之前,需要使用DSB指令来确保所有未完成的传输都已完成,同时可以使用CPSID I关闭中断,这个是可选的,它可以防止在自启过程中触发一个已启用的中断请求。 系统实现要求 在Cortex-M处理器上,如果没有使用CPSID指令,DSB指令是可选的。因为对SCS的访问已经具有DSB屏障,在写操作完成之前,自启无法开始。如下图所示: 如果使用了CPSID指令,则应插入DSB指令,以确保CPSID在前一个传输完成后才执行。这样,如果前面的传输有导致imprecise bus fault,它会在禁用中断之前发生。
在ARMv6-M上没有bus fault异常,因此在Cortex-M0处理器上不可用
如果系统在总线级别存在写缓冲区时,可以通过在写缓冲区中进行虚拟读操作来确保在执行CPSID指令和进行自启之前,系统级别的写缓冲区已被清空。如下图所示: 如果你使用的是CMSIS 2.0或更高版本,则NVIC_SystemReset(void)函数已经包含了DSB指令。
16 CONTROL寄存器
CONTROL寄存器是Cortex-M处理器中实现的特殊寄存器之一,它可以通过MSR和MRS指令访问。
处理器架构要求 从架构上来说,在修改CONTROL寄存器后,应使用ISB指令。 下面是一个从特权执行切换到非特权执行的代码。
Cortex-M0中不支持此操作
MOVS R0, #0x1
MSR CONTROL, R0 ; Switch to non-privileged state
ISB ; Instruction Synchronization Barrier
...
ISB确保以正确的特权级别取指,如下图所示: 我们还可以使用CONTROL寄存器来选择在线程模式下使用哪个堆栈指针。
系统实现要求 在Cortex-M处理器中,写入CONTROL寄存器后不执行ISB指令不会导致程序错误,除非你更改特权级别,且之前的权限级别已经预取接下来的指令。当且仅当你需要使用正确权限级别获取后续指令时,才需要ISB指令。
17 MPU编程
MPU是Cortex-M0+、Cortex-M3和Cortex-M4处理器的可选功能。
处理器架构要求
MPU配置寄存器位于SCS中,因此在MPU编程的每个步骤之间不需要插入内存屏障指令强有序内存不会强制执行与正常内存访问相关的顺序。 在架构设计中,MPU编程序列之前需要执行DMB,以及在MPU编程完成后使用DSB来确保所有设置都被所有的总线可见如果MPU设置的更改影响程序内存,还应添加一个ISB指令,以确保使用更新的MPU设置重新获取指令
如果在异常处理程序中执行MPU编程步骤,则不需要ISB指令,因为异常进入和退出边界已经具有ISB。例如,在运行RTOS的应用程序中,可以在PendSV异常处理程序内进行上下文切换期间更新用户线程的MPU区域设置。在PendSV和用户线程之间切换异常退出序列,确保MPU设置生效。这适用于当前Cortex-M处理器的架构行为和系统实现。
系统实现要求
在Cortex-M0+、Cortex-M3和Cortex-M4处理器上,在进入MPU编程代码之前省略DMB指令不会引起问题;在完成MPU编程代码之后省略DSB指令也不会引起问题。如果对MPU设置的更改只影响保存数据的内存而不影响保存程序内存,则在Cortex-M处理器上不需要ISB指令。如果需要使用新的MPU设置来取后续指令,则需要ISB指令。
18 多主系统
如果你希望你的代码在多个系统中都能正常运行,即考虑代码在不同架构下的可移植性,那么使用内存屏障指令是很有必要的。
处理器架构要求 当处理共享数据并且需要确保它们在内存中的顺序不被改变或混乱时,需要使用DMB或DSB指令。例如,则在启动DMA操作之前需要使用DMB指令。
也可以使用DSB代替DMB
如果没有DMB,在架构上两个存储区可能会被重新排序或重叠,比如DMA可能在数据更新完成之前开始。另一个多主机示例是两个处理器之间共享内存中的信息通信。当向在不同处理器上运行的另一个程序传递数据时,通常会将数据写入共享内存,然后在共享内存中设置一个软件标志。在这种情况下,应使用DMB或DSB指令来确保两个内存访问之间的内存顺序正确: 两个处理器之间的交互不限于共享内存。另一种可能的交互方式是事件通信(如消息队列)。在这种情况下,可能需要使用DSB指令来确保内存传输和事件之间的正确顺序被保留。
系统实现要求 在前面处理器架构要求的前两张图中去掉DMB或DSB指令时,并不会产生错误,因为Cortex-M处理器不会重新排序内存传输且不允许两个写传输重叠执行。
在Cortex-M3和Cortex-M4处理器中,处理器架构要求中的最后一张图需要使用DSB指令。但在Cortex-M0处理器中,省略DMB或DSB指令不会导致这三个示例中的任何错误,因为Cortex-M0处理器中没有写缓冲区。
19 信号量和互斥锁(单核和多核)
信号量和互斥量操作在许多操作系统中是必不可少的。它们可以在单处理器环境或多处理器环境中使用。
在多处理器环境中,信号量操作需要将软件变量放置在多个处理器之间共享内存中。为了确保正确的操作,应该使用内存屏障指令。如果在多处理器系统中存在缓存,则必须确保使用正确的缓存配置,以使共享内存中的数据在所有处理器之间一致。
处理器架构要求 在信号量和互斥量操作中应使用DMB指令。下面的例子展示了获取锁的简单代码,获取锁后需要使用DMB指令:
/* Note: __LDREXW和__STREXW是CMSIS函数 */
void get_lock(volatile int *Lock_Variable)
{
int status = 0;
do {
while (__LDREXW(&Lock_Variable) != 0); // Wait until Lock_Variable is free
status = __STREXW(1, &Lock_Variable); // Try to set Lock_Variable
} while (status!=0); //retry until lock successfully
__DMB();
return;
}
同样地,释放锁的代码在开始时应该有一个内存屏障:
void free_lock(volatile int *Lock_Variable)
{
__DMB(); // Ensure memory operations completed before
Lock_Variable = 0;// releasing lock
return;
}
这样做是为了避免在释放锁之前,由于流水线的原因,其它线程就“提前”释放了锁,从而可以访问共享资源。
系统实现要求
在使用Cortex-M3和Cortex-M4处理器的微控制器设备上,在信号量和互斥操作中省略DMB指令不会导致错误。但在下面的情况下可能会出错:
处理器具有缓存软件在多核系统中使用。
ARM建议在操作系统设计中的信号量和互斥操作中使用DMB指令。
Cortex-M0和Cortex-M0+处理器没有互斥访问的指令
20 自修改代码
通常我们的代码是静态的,不能被修改。但其实允许程序在运行时修改自己的代码,修改之后的代码会被立即执行,从而改变代码的行为。这种情况一般用于:反作弊(提高程序的复杂性和安全性)、加密和解密(提高数据安全性)。
如果程序包含自修改代码,如果修改后的程序代码要在修改后不久执行,就需要使用内存屏障。由于程序代码可以被预取,应该执行DSB指令,然后执行ISB指令以确保流水线被刷新。
处理器架构要求 架构需求是在修改程序内存后使用DSB指令后紧跟一个ISB指令。
STR
DSB ; Ensure store is completed before flushing pipeline
ISB ; Flush pipeline
B
下图显示了满足自修改代码的处理器架构和实现要求所需的内存屏障指令。 如果系统中存在缓存,则应该缓存刷新操作来确保更新指令缓存。
系统实现要求 总的来说,在修改程序内存后,需要先使用DSB然后使用ISB。如果处理器或系统中没有写缓冲区或缓存,例如基于Cortex-M0的微控制器,则可以省略DSB。
Cortex-M3和Cortex-M4处理器可以预取多达六条指令。如果应用程序在修改程序内存中的指令后不久执行该指令,可能会使用之前的指令。如果指令在修改后一段时间内未使用,程序可能可以正常工作,但不能完全保证。
某些Cortex-M3和Cortex-M4设计可能具有特定于实现的程序缓存以加速程序存储器访问。在修改程序代码后可能需要额外的步骤来确保程序缓存被清除。
总结
在ARM体系架构中,内存屏障是一种用来确保程序在多核或多线程环境下按照预期顺序执行的机制。ARM定义了三种内存屏障指令,分别是DMB(数据内存屏障)、DSB(数据同步屏障)和ISB(指令同步屏障)。
DMB指令用于确保内存访问的顺序性。在多核处理器中,不同核的缓存可能会引起数据一致性的问题,DMB指令在多核之间添加屏障,确保指令的执行顺序与内存访问的顺序一致,避免数据的读写乱序。
DSB指令用于确保指令的完成和数据的同步。它保证在DSB指令之前的所有指令都已经完成执行,然后再执行DSB指令之后的指令。这样可以避免指令的乱序执行和数据的读写乱序,确保执行的顺序性。
ISB指令用于确保指令的同步。它会刷新所有的指令缓存和流水线,使指令序列的执行从ISB指令之后重新开始。这样可以保证在ISB指令之前的所有指令都已经执行完毕,并且清除了所有执行过程中的缓存,使得指令的执行结果与预期一致。
综上所述,ARM的内存屏障机制通过DMB/DSB/ISB指令确保程序在多核或多线程环境下的正确顺序执行。这些指令提供了内存和指令的同步和顺序性保证,保证了程序的正确性和可靠性。
关注博主即可阅读全文
优惠劵
tilblackout
关注
关注
2
点赞
踩
22
收藏
觉得还不错?
一键收藏
打赏
知道了
0
评论
ARM进阶:内存屏障(DMB/DSB/ISB)的20个使用例子详解
在ARM体系架构中,内存屏障是一种用来确保程序在多核或多线程环境下按照预期顺序执行的机制。ARM定义了三种内存屏障指令,分别是DMB(数据内存屏障)、DSB(数据同步屏障)和ISB(指令同步屏障)。DMB指令用于确保内存访问的顺序性。在多核处理器中,不同核的缓存可能会引起数据一致性的问题,DMB指令在多核之间添加屏障,确保指令的执行顺序与内存访问的顺序一致,避免数据的读写乱序。DSB指令用于确保指令的完成和数据的同步。它保证在DSB指令之前的所有指令都已经完成执行,然后再执行DSB指令之后的指令。
复制链接
扫一扫
专栏目录
【ARM Cache 系列文章 5 – 内存屏障ISB/DSB/DMB】
CodingCos的博客
11-06
2129
举个例子,如果dmb前后的两次访存指令访问的都是同一个终点(比如都是ddr,或者都是spi的fifo),它在能保证两次访问放射顺序的同时,其实就能保证实际的完成顺序了。DMB不能保证它前面的指令在它后面的指令之前完成,只能保证后面的指令能观察到前面的指令执行了(即在LSU的执行顺序是能得到保证的),可能你会问这样的屏障有什么实际的作用呢?DMB指令保证DMB指令前后的内存访问指令的执行次序,内存访问包括load、store、data cache维护指令, 像add指令DMB是管不到的。
美信推用于DAB/T-DMB接收的三频段调谐器
01-19
Maxim日前推出MAX2170/MAX2171RF调谐器,可用于三频段、双模移动电视和数字广播。该器件可接收VHF频带III、L频段广播以及FM。两个器件均设计用于接收数字音频广播(DAB)以及地面数字多媒体广播(T-DMB),具有少的外部元件。低噪声L频段前端(3dB噪声系数)无需外部低噪声放大器电路,从而降低了成本并缩小了尺寸。当调谐到VHF频率时,片上跟踪滤波器将抑制带外干扰;该跟踪滤波器同时也作为FM频段选择滤波器使用。
MAX2170/MAX2171工作在2.7V至3.3V电源电压下,在L频段低功耗模式下消耗150mW(典型值)的功率。除了晶振和某些应用所需的L频段
参与评论
您还未登录,请先
登录
后发表或查看评论
嵌入式系统/ARM技术中的关于视频压缩技术的系统考虑
10-21
1 前言
随着信息世界的变短发展,数字视频产品需求近些年出现猛增。主流应用包括视频通信、安全监控与工业自动化,而最热门的要算娱乐应用,如 DVD、HDTV、卫星电视、高清(HD)机顶盒、因特网视频流、数码相机与 HD 摄像机、视频光盘库(video jukebox)、高端显示器(LCD、等离子显示器、DLP)以及个人摄像机等。众多精彩的新应用目前也处于设计或前期部署中,例如针对家庭与手持设备及地面/卫星标准(DVB-T、DVB-H、DMB)的高清 DVD(蓝光/HD-DVD)和数字视频广播、高清视频电话、数码相机以及IP机顶盒。由于手持终端计算能力的提高以及电池技术与高速无线连接的发展,
嵌入式系统/ARM技术中的便携式设备的移动电视功能实现方案
10-23
移动电视俗称手机电视。它以数字技术为支撑,通过地面或卫星电视信号广播、地面设备接收的方式播放和接收电视节目,目前多通过手机、多媒体播放器、车载、USB接收器等终端设备实现电视信号接收。它最大的特点是在处于移动状态的交通工具上保持电视信号的稳定和清晰。移动电视可以采用无线数字广播电视网(DMB),也可以采用蜂窝移动通信网,甚至Wi-Fi、WiMax等。在我国,多采用DMB和蜂窝移动通信网(GPRS或CDMA)。现在移动电视还增加了由我国自主研发的CMMB数字移动电视技术,在2008年奥运会期间已经提供了相关业务,系统采用卫星和地面网络相结合的"天地一体、星网结合、统一标准、全国漫游"方式,实现全
__DSB()指令的作用
missiler的博客
08-04
9780
@[TOC](__DSB() 指令的作用)
在一些ARM程序代码中,会用到__DSB() 指令,特别是在一些中断处理函数中。例如:
//中断定时器PIT中断处理函数
void PIT_LED_HANDLER(void)
{
/* Clear interrupt flag.*/
PIT_ClearStatusFlags(PIT, kPIT_Chnl_0, kPIT_TimerFlag);
pitIsrFlag = true;
__DSB();
}
程序通过中断信号进入中
ARM基础(6):内存屏障指令之DMB、DSB和ISB详解
主要分享硬件、嵌入式软件部分知识
07-30
3407
本文详细说明了DMB、DSB和ISB三个指令的含义和使用时机。但大多数简单处理器不会对内存传输进行重新排序,因此,体系结构的需求和处理器的实现需求是不同的。例如,大多数应用程序可以在现有的Cortex-M处理器上正确运行,而无需使用任何内存屏障指令。
DBG-DMB-DSB-ISB.zip_cannotmqq_dmb dsb dsb 区别_dsb() isb()_dsb指令使用
09-19
ARM处理器汇编指令描述,DBG、DMB、DSB 和 ISB指令
__DSB() __ISB()命令
sdut_guol的专栏
12-23
5656
__DSB()__ISB()命令
等待指令和数据同步,例如*ocramAddr = 0xCCU;执行完成后,实际单片机可能还未完成执行,使用__DSB()__ISB()命令可以确保该行代码执行完成
static void OCRAM_Access(void)
{
uint32_t *ocramAddr = (uint32_t *)APP_FLEXRAM_OCRAM_START_ADDR;
/* enable FLEXRAM OCRAM access error interrupt..
指令隔离DMB,DSB,ISB
leekay123的博客
12-05
3178
像ARM7TDMI这样经典的ARM处理器会按照程序的顺序来执行指令或访问数据。而最新的ARM处理器会对执行指令和访问数据的顺序进行优化。举个例子,ARM v6/v7的处理器会对以下指令顺序进行优化。
LDR r0, [r1] ; 从普通/可Cache的内存中读取,并导致cache未命中STR r2, [r3] ; 写入普通/不可Cache的内存
假设第一条LDR...
DSB,ISB,DMB指令
IC_SOC_ARM
03-02
1602
DBG、DMB、DSB 和 ISB调试指令、数据内存屏障指令、数据同步屏障指令和指令同步屏障指令。语法DBG{cond} {#option}DMB{cond} {option}DSB{cond} {option}ISB{cond} {option}其中:cond
是一个可选的条件代码(请参阅条件执行)。option
对提示操作的可选限制。用法这些是提示指令。 是否实现这些指令是可选的。 只要其中
卓胜微电子发布DAB/T-DMB解调芯片MXD0120
11-27
卓胜微电子日前推出一款基于DAB/T-DMB标准的移动数字电视解调芯片MXD0120。功耗和面积是移动设备最重视的关键指标,采用功耗低,面积小的芯片意味着移动设备可以更小巧,可连续观看更长时间的电视节目。该芯片能够...
RAM汇编指令DMB、DSB、ISB、SEV等
u013073067的博客
04-15
1万+
最近用keil调试STM32时,在代码中遇到了一些汇编指令,如DMB、DSB、ISB、SEV,现总结如下:
DMB、DSB、ISB、SEV等指令都属于RAM汇编指令,在《ARM Cortex-M0权威指南》和《ARM Cortex-M3权威指南》中,都有这些指令。读者可以参考这两本书的附录部分。其他RAM系列的权威指南应该也有这些指令,我这里只有这两本权威指南,用到其他系列时,读者可自行查证。
...
AM、FM、DSB、SSB、ISB信号及其频谱
热门推荐
流水灯
01-10
2万+
代码:https://github.com/LHesperus/signal-processing/tree/master/Modulated%20signal
AM信号及其频谱
FM信号及其频谱
DSB信号及其频谱
SSB信号及其频谱
ISB信号及其频谱
...
【STM32】IAR配置Cortex-M0的APP程序中断向量
u010440719的博客
10-27
1274
IAR配置Cortex-M0的APP程序中断向量1. 定义APP起始地址2. 重映射中断向量表3. 配置工程Linker信息4. 定义Bin文件信息地址5. 验证Bin文件信息正确性6. 结束语友情链接(第1篇文章,诚挚感谢!)
1. 定义APP起始地址
根据MCU的Flash空间大小,以及IAP、APP程序大小合理分配Flash空间,下面以STM32F091单片机为例:
IAP程序地址: 0x08000000 ~ 0x08004FFF (20k)
APP程序地址:0x08005000 ~ 0x080127
一、barrier指令DSB,DMB,ISB,fence——内存屏障,指令屏障
iot_aaker的博客
12-23
7995
最近工作中遇到一个问题,大致描述一下:
我们SOC用的arm cortex m7内核,在设计时设计人员图方便,将SPI controller的寄存器(即原本应该是APB空间)放在了0x60000000的某一块空间(此空间arm的memory定义区间为external memory),然后同时把SPI flash的存储空间也映射在了0x60000000的这一块区间内。后者将spi flash memory映射在此区间内其实时合理的。但是将spi controller的寄存器也放在这块空间,验...
ARM 汇编特殊操作指令
devilzcl的博客
04-23
675
一、操作 CP15 协处理器
【例】:MRC p15, 0, r0, c0, c0, 0 // 将 CP15 中 c0 寄存器的值读取到 r0 寄存器
MRC:将 CP15 协处理器中的寄存器数据读到 ARM 寄存器中
MCR:将 ARM 寄存器的数据写入到 CP15 协处理器寄存器中
CP15 协处理器的访问通过如下指令完成:
opc1 : 协处理器要执行的操作码
Rt : A...
DBG、DMB、DSB 和 ISB
邓永坚的blog
07-27
2531
调试指令、数据内存屏障指令、数据同步屏障指令和指令同步屏障指令。
DBG
调试提示可向调试系统及其相关系统发送提示。 有关这些系统如何使用此指令的信息,请参这些系统的文档。
DMB
数据内存屏障可作为内存屏障使用。 它可确保会先检测到程序中位于 DMB 指令前的所有显式内存访问指令,然后再检测到程序中位于DMB 指令后的显式内存访问指令。它不影响其他指令
ARM内存屏障指令(DMB,DSB,ISB)
propor的专栏
06-14
913
ARM,内存屏障指令
鸿蒙Harmony应用开发—ArkTS声明式开发(通用属性:形状裁剪)
最新发布
m0_64420071的博客
03-02
891
ArkTS声明式开发(通用属性:形状裁剪)
DSB, DMB, ISB
11-04
DSB、DMB和ISB是ARM处理器中的三种同步指令。它们的作用分别是:
- DSB(Data Synchronization Barrier):强制CPU等待它之前的所有指令执行完毕,确保所有内存访问都已完成。
- DMB(Data Memory Barrier):确保所有在DMB指令之前的内存访问都已完成,然后才能执行DMB指令之后的内存访问。
- ISB(Instruction Synchronization Barrier):清空处理器流水线,确保ISB指令之后的所有指令都从缓存或内存中重新获取,以避免指令重排等问题。
这三种同步指令在ARM处理器中都有重要的作用,可以保证程序的正确性和稳定性。
“相关推荐”对你有帮助么?
非常没帮助
没帮助
一般
有帮助
非常有帮助
提交
tilblackout
CSDN认证博客专家
CSDN认证企业博客
码龄7年
嵌入式领域优质创作者
152
原创
1376
周排名
8935
总排名
33万+
访问
等级
2776
积分
7091
粉丝
781
获赞
119
评论
2816
收藏
私信
关注
热门文章
死区时间的分析与设置
17658
Git合并操作之merge、rebase、squash详解
15376
LVGL学习(3):页面切换原理和页面管理实现
9370
BLE学习(2):广播包报文格式详解
8757
C语言正余弦函数定点查表算法原理及实现
8170
分类专栏
嵌入式硬件
1篇
嵌入式Linux
14篇
LVGL
6篇
嵌入式
23篇
ARM
20篇
RT1170
11篇
Linux
6篇
RTOS
4篇
网络编程
13篇
git
3篇
C++
10篇
Peripheral
6篇
BLE
6篇
algorithm
6篇
FOC
7篇
LwIP
4篇
模拟电路
4篇
最新评论
ARM基础(6):内存屏障指令之DMB、DSB和ISB详解
anglaberber:
写的真不错
OpenCV NAO机器人辅助捡球丢球
A870994:
作者有git仓库吗 能看一下代码吗
LVGL学习(3):页面切换原理和页面管理实现
tilblackout:
网上找了个可以运行的codeblocks LVGL工程,把没用的代码删了,然后按照GUI GUIDER的代码结构修改了一下,后面就只需要往工程里添加一下文件就行了。
LVGL学习(3):页面切换原理和页面管理实现
ceh0315:
大佬,我看你用的nxp的guider,这个是怎么移植到codeblocks上的啊?我之前画了一个界面,始终移植不上去,现在只能用lvgl手搓
CORDIC算法 arctan反正切计算原理及C语言定点实现
tilblackout:
代码肯定没有错,我已经用于FOC算法跑过了。输入的数据要是标幺值,输出的也是对应的标幺值。
您愿意向朋友推荐“博客详情页”吗?
强烈不推荐
不推荐
一般般
推荐
强烈推荐
提交
最新文章
嵌入式硬件设计实例:基于STM32的流水灯原理图和PCB设计
Linux内核学习(1):目录结构、配置、编译和常用Shell命令
U-Boot学习(7):内核启动之bootz启动zImage源码分析
2024年12篇
2023年75篇
2022年43篇
2021年19篇
2020年4篇
目录
目录
分类专栏
嵌入式硬件
1篇
嵌入式Linux
14篇
LVGL
6篇
嵌入式
23篇
ARM
20篇
RT1170
11篇
Linux
6篇
RTOS
4篇
网络编程
13篇
git
3篇
C++
10篇
Peripheral
6篇
BLE
6篇
algorithm
6篇
FOC
7篇
LwIP
4篇
模拟电路
4篇
目录
评论
被折叠的 条评论
为什么被折叠?
到【灌水乐园】发言
查看更多评论
添加红包
祝福语
请填写红包祝福语或标题
红包数量
个
红包个数最小为10个
红包总金额
元
红包金额最低5元
余额支付
当前余额3.43元
前往充值 >
需支付:10.00元
取消
确定
下一步
知道了
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝
规则
hope_wisdom 发出的红包
打赏作者
tilblackout
你的鼓励将是我创作的最大动力
¥1
¥2
¥4
¥6
¥10
¥20
扫码支付:¥1
获取中
扫码支付
您的余额不足,请更换扫码支付或充值
打赏作者
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额
0
抵扣说明:
1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。 2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。
余额充值
DMB(數字多媒體廣播)_百度百科
DMB(數字多媒體廣播)_百度百科
Beta
進入詞條
清除歷史記錄關閉
DMB是一個多義詞,請在下列義項上選擇瀏覽(共2個義項)
▪化工產品
▪數字多媒體廣播
反饋
分享
複製鏈接
請複製以下鏈接發送給好友
https://baike.baidu.hk/item/DMB/922874
複製
複製成功
DMB
(數字多媒體廣播)
鎖定
DMB全稱為數字多媒體廣播(Digital Multimedia Broadcasting),是在數字音頻廣播DAB(Digital Audio Broadcasting)基礎上發展起來的面向未來的新一代廣播系統。在第三代廣播-DAB廣播已將傳統AM、FM摸擬廣播聲音質量提高至CD級別的基礎上,DMB又將單一的聲音廣播業務推向了多媒體領域:即在發送高質量聲音節目的同時,還提供了影視娛樂節目、智能交通導航、電子報紙雜誌、金融股市信息、互連網信息、城市綜合信息等可視數據業務,廣泛應用在公交車、出租車、輕軌、地鐵、火車、輪渡、機場及各種流動人羣等移動載體上或家庭、辦公室裏。
中文名
數字多媒體廣播
外文名
Digital Multimedia Broadcasting
英文簡稱
DMB
類 別
廣播系統
目錄
1
簡介
2
程序特點
3
主要優點
4
編碼方式
5
傳輸途徑
6
潛在市場
DMB簡介
目前世界上DAB系統的發展大致可分為,歐規Eureka-147、美國IBOC(In-Band On-Channel)及法國DRM(Digital Radio Mondiale),還有部份國家自行發展的DAB系統,而我國採用的為歐規Eureka-147系統(Eureka 147譯為尤里卡147)。注:尤里卡是歐洲國家共同組成的一個技術研究合作團體的組織名稱,該技術團體多年來一直從事多種技術項目的開發工作。在“尤里卡”組織的龐大技術開發項目中,DAB項目的初始化開發,被列名為第147項。因此,DAB項目又被人們習慣稱為“尤里卡147”計劃。從事該項計劃的人員來自不同國家的廣播業、網絡運營商,家用電器電子生產商和研究院校等。經過各方面的共同努力,“尤里卡147”計劃發展至今,已經形成和頒佈了一系列完整的DAB技術標準,它正在不斷地更新和被世界範圍內採納和推廣應用。
[1]
DMB程序特點
DMB廣播最突出的優點在於它是一種數字廣播,可以實現高質量的數據傳輸(DVD質量的視頻、CD質量的音頻)。這是因為它將各種信號在數字狀態下進行各種編碼、調製、傳遞等處理,不僅可以方便地進行各種數值運算及各種邏輯編碼運算,而且由於數字信號在進行各種處理過程中,只有“1”和“0”兩種狀態,所以傳遞媒介自身的特徵,包括噪聲、非線形失真等,均不能改變數字信號的品質;另外,作為一種數字廣播,它還有着很高的功率效率(發射功率降低很多,節約能源、降低DMB建台費用)、頻譜效率(比如一個電視頻道8MHz帶寬裏,可安排24套節目)等優點。DMB廣播另一個突出的優點是可在高速移動環境下穩定地提供數據、文字、圖形與視頻等多元化服務。早在十年前DAB開始制定時,就以200公里小時的需求為主要目標,在COFDM技術的基礎上,採用了時間交織和分等級防錯保護等技術,使得DAB具有抗多徑干擾/快速衰落以及移動接收能力強,數據傳送能力高的特點。換句話説,DAB首先就是為手持移動而生,它的移動特性幾乎達到了完美的境地。
[1]
DMB主要優點
相對於傳統的模擬廣播DAB系統,其主要優點是:1.不論固定、便攜或移動接收,DAB都能提供CD的接收質量。在行駛的汽車經常遇到的信號衰落已不復存在。對於固定接收而言,不必使用定向的室外天線;移動和便攜接收使用拉桿就足夠了。2.接收機操作方便、簡單,拋棄了現今採用的繁瑣的頻率尋找,而只是在接收機輸入一個“節目號數”。3.節目的附加信息,例如音樂/語言發射的識別以及節目類型等信息的傳送都是可能的。4.DAB可實現可變的動態控制,可以與實現的監聽條件相適應——無論在汽車、居室還是在室外,接收機可自動調整最佳聆聽的信號動態,使之與周圍環境相適應。5.傳送聲音廣播節目的同時,DAB的數據信道有能力提供來傳送其它的附加信息,例如交通廣播信息、交通誘導系統或對簽約的用户羣的數據傳輸。6.對於廣播機構來説,DAB的優點在於,在同步網運行時,可以非常經濟地利用頻譜。用數字同步網,可以傳輸的節目套數為FM系統的大約3倍是可能的。數字多媒體廣播(DMB)是從數字音頻廣播的基礎上發展而來的,是一種無線高速信息傳輸技術,它充分地利用了DAB(digital audio broadcasting:數字音頻廣播)技術優勢(能在高速移動環境下可靠接收信號),在功能上將傳輸單一的音頻信息擴展為數據、文字、圖形與視頻等多種載體,它代表着廣播電視的發展方向,為廣播電視大眾傳播、小眾傳播、個人傳播的多元化服務創造了一個優良的平台。隨着技術的成熟,特別是接收機功能的完善,價格的下降,有力地促進了DMB的發展,廣東已經完成了從DAB向DMB的技術過渡,並在珠江三角洲成功進行了DMB試播。DMB嶄新的技術優勢,已受到社會各界特別是廣大消費者的關注,逐步展現出廣闊的市場應用前景。將DMB形成產業,推向市場,服務於民眾,是我們的當務之急。DMB是一項系統工程,它的推廣應用決不是單靠廣播電視部門與設備製造部門所能勝任的,必須得到各級政府的支持,聯合社會相關部門的力量,建立新型高效的營運機制,才能儘快地把DMB推向市場,形成新的經濟增長點。同廣電其它行業一樣,DMB產業可分兩大部份,即信息網絡覆蓋與接收機產業,兩者緊密相連,缺一不可。接收機產業在我國尚處於空白,是因為用户買了接收機,接收不到信號而等於買了一堆“廢鐵”。因此信息網絡覆蓋業要先走一步來帶動接收機的消費,培育接收機產業市場。
[2]
DMB編碼方式
DMB廣播系統對信息源的音頻部分一般採用AAC、WMA.9格式的編碼,通常使用80kbps-128kbps的帶寬即可滿足DAB立體聲節目的收聽要求;視頻部分採用MPEG-4(或者H.264)格式的編碼,通常使用用650kbps的位速率即可滿足公交車上安裝15寸-20寸屏幕收看的要求,用300kbps的位速率即可滿足小車安裝9寸以下屏幕或PDA等設備收看的要求;數據類編碼為授權接收,CA加在源編碼內。
[1]
DMB傳輸途徑
DMB技術按照傳輸途徑可分為四類:有線傳輸、地面微波傳輸送(DMB-Terrestrial)、衞星傳輸(DMB-Satellite)和衞星地面混合傳輸。這四種數字傳輸途徑的信源編碼方式相同,都是MPEG的複用數據包,但是其信道編碼採用了不同的調製方式。其中有線傳輸技術適合固定場所的接收,如家庭等,不具備移動媒體特徵,不能應用於MP4/PMP、手機及其他便攜設備。地面波DMB和衞星DMB支持MP4/PMP、手機及其他便攜設備的移動傳輸。地面波DMB是由中心控制枱將信號送到發射台,再由發射台將信號放大發射,用户直接接收。經國家廣電總局批准,廣東與上海、北京在對移動多媒體技術進行試驗的基礎上,將率先開通DMB電視試商用業務。目前廣東省已有廣州、佛山、中山五桂山三個發射台,整個網絡將覆蓋廣東全省,按照計劃在今年5月就推出商業性DMB服務;北京也計劃在5月推出商業性服務,將覆蓋大約1,500萬用户。衞星DMB在韓國日本發展比較快,目前已經開始商業運營。節目內容提供商為DMB中心提供節目,後者向為移動廣播專門定製的DMB專用衞星傳輸內容信息,各種移動終端接收衞星廣播中心發送的信號;在城市樓羣密集的屏蔽地帶,通過中繼器(Gap-filler),使各種設備能正常接收發送信號。與地面波DMB和有線傳輸技術相比,它可以適應更大範圍的覆蓋要求,不受地面網絡的限制,具有傳輸節目量大、節目畫質、音質更佳的特點,是一種高效﹑廉價的傳輸方式。現在公交車,地鐵安裝顯示器收的是dmb,有許多台可開展的服務內容。
[1]
音頻廣播業務DMB的多媒體特性將會打破當前傳統廣播節目單一聲音業務的模式。廣播節目在播出聲音的同時,還能夠傳送與節目相關的圖文信息,如主持人的資料、圖片、歌曲的背景資料和節目預告等等,從而為聽眾提供了聲音以外的視覺效果。DMB技術優異的音頻效果及其附屬功能的應用,將會成為今後廣播節目形式的主流,一旦接收機的價格接近大眾的經濟承受能力,DMB將逐漸取代傳統的AM、FM廣播,佔領巨大的音頻服務市場,廣播業者也將因此獲得巨大的利益。但是現在成本過高,價格遠遠高於傳統AM-FM收音機。他的市場推廣還需要一段時間。
[2]
視頻業務2001年的5月,廣州已經成功地進行了採用DMB技術在1.5MHz的帶寬內傳輸電視節目,經高速移動接收測試,聲音和圖象質量接近SDTV(標準清晰度電視)的水平。DMB的移動接收電視功能,可以為在城市或郊外處於移動或靜止狀態中的人羣提供與現有模擬電視圖象質量相當的實時新聞、大型活動直播、各類信息和MTV等的影視娛樂節目服務,從而突破電視只能固定接收的層面,並且頻帶佔用率只是模擬電視的四分之一。這種新的電視廣播方式,將開拓出高速移動接收標準清晰度電視節目的市場,為地面電視廣播開闢新的選徑。
[2]
交通導航DMB提供的城鄉電子地圖、實時路面交通情況和圖文車輛調度信息等,可以為駕駛人士提供交通導航服務,開發交通信息服務市場。廣東省珠江三角洲地區有上百萬輛汽車,其中約有十萬台出租車,另外,還有移動的船隻、列車和每天進出港澳地區的流動車輛,這些都是DMB的服務對象。
[2]
金融股市DMB傳送的實時股票行情信息、金融信息和經濟信息,以其聲音和圖文並茂、高傳送速率和大信息量的優勢壓倒傳統的經濟信息手呼機和移動電話市場,為户外的移動用户提供經濟信息服務。
[2]
Internet下載採用DMB卡式電路板,移動計算機可以在固定或移動環境下接收到DMB的信號。由於DMB還可以提供互聯網下載式的單向傳輸服務,所以用户可以在移動的狀態下接收互聯網的網絡信息。
[2]
DMB潛在市場
1.可能的應用羣體(1)移動接收羣體DMB的優勢在於可以在地面高速移動的狀態下高質量地接收音、視[頻節目和數據信息。因此,眾多交通工具的使用者、户外活動者將是DMB的移動用户羣體。(2)固定接收羣體DMB信息不但可以移動接收,而且可以在室內外的固定場合採用移動式或固定式接收機、PC機等高質量接收。因此,廣大廣播電視和各種數據信息的傳統固定用户也是DMB的用户羣體。
[2]
參考資料
1.
觀察:誘人的大蛋糕 DMB數字多媒體廣播
.太平洋電腦網.2006-08-18[引用日期2012-09-18]
2.
數字多媒體廣播(DMB)簡介
.中國廣州網.2005-08-06[引用日期2012-09-18]
圖集
DMB的概述圖(1張)
詞條統計
瀏覽次數:次
編輯次數:30次歷史版本
最近更新:
杨家将1206
(2022-03-09)
1
簡介
2
程序特點
3
主要優點
4
編碼方式
5
傳輸途徑
6
潛在市場
百科協議 隱私協議 意見反饋
Beta
進入詞條
清除歷史記錄關閉
反饋
登錄
二苯甲酰基甲烷(DMB)_化工百科
二苯甲酰基甲烷(DMB)_化工百科
化工百科
首页
产品供应商后台
了解会员服务
登陆
免费注册
搜供应商
搜百科
二苯甲酰基甲烷(DMB) 购买咨询
二苯甲酰甲烷(Dibenzoylmethane)
CAS: 120-46-7
化学式: C15H12O2
主页 产品其他催化剂与配体 二苯甲酰基甲烷(DMB)
二苯甲酰甲烷,化学式为C17H14O,是一种有机化合物。以下是关于二苯甲酰甲烷的性质、用途、制法和安全信息的介绍:
性质:
- 外观:白色结晶粉末或结晶体。
- 溶解性:不溶于水,可溶于有机溶剂如乙醇、苯等。
- 熔点:约105-106℃。
- 稳定性:稳定,但遇强氧化剂会发生反应。
用途:
- 二苯甲酰甲烷是一种常用的荧光染料,在化学分析、生物医学研究和荧光显微镜观察等领域得到广泛应用。
- 它也用作染料和指示剂,可用于染色纺织品、染色砂石等。
制法:
- 二苯甲酰甲烷可通过二苯甲酮和苯甲醛反应制得。反应过程中,将二苯甲酮和苯甲醛在酸性条件下加热,反应生成二苯甲酰甲烷。
安全信息:
- 二苯甲酰甲烷对眼睛和皮肤有刺激作用,接触后应立即用大量水冲洗。使用时应佩戴适当的防护手套和眼镜。
- 在储存和使用时要避免与强氧化剂接触,以免引起危险反应。
- 建议储存在阴凉、干燥的地方,远离火源和易燃物质。
最后更新:2023-12-21 00:21:33
中文名 二苯甲酰甲烷英文名 Dibenzoylmethane别名 二苯甲酰甲烷二苯甲醯甲烷二苯甲酰基甲烷ω-苯甲酰基苯乙酮1,3-二苯基丙二酮二苯甲酰基甲烷(DBM)二苯甲酰基甲烷(DMB)1,3-二苯基丙二酮 DBM1,3-二苯基-1,3-丙二酮英文别名 DBMDppd-Hrhodiastab83Dibenzoylmethanephenylphenacylketone1,3-DiphenylpropanedionePhenyl-hydroxystyrylketone1,3-diphenyl-3-propanedione1,3-Diphenyl-1,3-propanedione,3-Diphenyl-propane-1,3-dione1,3-Diphenylpropane-1,3-dione1,3-Diphenyl-1,3-propanediamine(2Z)-3-hydroxy-1,3-diphenylprop-2-en-1-oneCAS 120-46-7EINECS 204-398-9化学式 C15H12O2分子量 224.25InChI InChI=1/C15H12O2/c16-14(12-7-3-1-4-8-12)11-15(17)13-9-5-2-6-10-13/h1-11,16H/b14-11-InChIKey NZZIMKJIVMHWJC-UHFFFAOYSA-N密度 0.800 g/cm3熔点 77-79°C(lit.)沸点 219-221°C18mm Hg(lit.)闪点 219-221°C/18mm水溶性 It is Soluble in ether, chloroform, and aqueous sodium hydroxide. Insoluble in water.蒸汽压 0.01Pa at 20℃溶解度 氯仿 (微溶) 、甲醇 (微溶,超声处理) 折射率 1.6600 (estimate)酸度系数 8.95±0.10(Predicted)存储条件 Store below +30°C.稳定性 稳定。与强氧化剂不相容。外观 晶体颜色 Light yellow to yellowMerck 14,3009BRN 514910物化性质 无色斜方形片状结晶。熔点81℃,沸点219℃(2.4kPa)。易溶于氯醇、氯仿,能溶于氢氧化钠溶液,不溶于碳酸钠溶液,极微溶于水。MDL号 MFCD00003085体外研究 Dibenzoylmethane (10, 20, 30, 40, 50 μM; 6 hours) treatment concentration-dependently increases the mRNA level of HO-1 but has no effect on the mRNA level of Nrf2 in HepG2 cells. Dibenzoylmethane induces HO-1 and Nrf2 protein expression, and the induction diminishes after 12 h. Dibenzoylmethane (10, 20, 30, 40, 50 μM; 2 hours) concentration-dependently increases the phosphorylated protein levels of Erk1/2, p38MAPK, JNK, AMPK, and Akt in HepG2 cells. Dibenzoylmethane does not show significant cytotoxicity. 体内研究 Dibenzoylmethane (200, 500 mg/kg/day; ip; for three consecutive days) pretreatment significantly reduces both the area and the severity of necrosis, as well as the leukocyte infiltration, at a dose of 200 mg/kg in wild-type and Nrf2 knockout mice. Dibenzoylmethane protectes against CCl4-induced (1:49,v/v, 10 ml/kg) liver damage in wild-type mice. 危险品标志 Xi - 刺激性物品
风险术语 36/37/38 - 刺激眼睛、呼吸系统和皮肤。
安全术语 S22 - 切勿吸入粉尘。
S24/25 - 避免与皮肤和眼睛接触。
WGK Germany 3RTECS TZ1930000TSCA Yes海关编号 29143900Hazard Note Irritant下游产品 3,5-二苯基吡唑 1,2-双(对甲苯基磺酰基)肼
二苯甲酰基甲烷(DMB) - 介绍易溶于氯醇、氯仿,能溶于氢氧化钠溶液,不溶于碳酸钠溶液,极微溶于水。最后更新:2022-10-16 17:12:33
查看二苯甲酰基甲烷(DMB)结构式
供应商列表
山东西亚化学有限公司现货供应产品名: 二苯甲酰甲烷
购买
询盘CAS: 120-46-7产地: 山东包装: 100g,25g,500g规格: ≥99.0% AR|≥98.0% (GC)|≥98.0% (GC)价格: 145.00,53.00,286.00库存: 现货电话: 400-990-3999手机: 13395399280电子邮件: 861669111@qq.comQQ: 1903368307 微信: 13355009207 前衍化学科技(武汉)有限公司产品名: 二苯甲酰基甲烷
询盘CAS: 120-46-7产地: 湖北电话: 13247110337手机: 13247110337电子邮件: 2205437118@qq.comQQ: 2205437118 微信: 13247110337产品描述: 前衍化学是化学品的一站式供采平台,致力于通过数字化+专业服务让化学品交易更高效。前衍核心团队已有10年以上行业服务经验,平台2019年正式成立以来,已为5万+单 更多 广州远达新材料有限公司产品名: 二苯甲酰基甲烷
询盘CAS: 120-46-7产地: 广东包装: 1kg/25kg/200kg, purity>=99%价格: 电联或QQ微信咨询电话: 19849939632手机: 19849939632(微信同号)电子邮件: 2470479589@qq.comQQ: 2470479589 微信: +86 19849939632产品描述: 长期现货可分装可零售 湖北隆信化工实业有限公司现货供应产品名: 二苯甲酰基甲烷
询盘CAS: 120-46-7产地: 国产包装: 100g 500g 1kg 20kg价格: 电联库存: 是电话: 15335994747手机: 15335994747电子邮件: ycwlb056@yeah.netQQ: 3521670276 产品描述: 吡啶溴化氢盐是我司主打产品之一,且随货可提供检验分析单,少量样品可以免费提供,公司优势是厂家直发二苯甲酰基甲烷 合肥天健化工有限公司产品名: 二苯甲酰甲烷
询盘CAS: 120-46-7产地: 安徽电话: 0086-551-65418679手机: 15856988503电子邮件: sales@tnjchem.com info@tnjchem.comQQ: 2881500842 微信: 0086 189 4982 3763产品目录: 点此进入 上海麦克林生化科技股份有限公司提供多种规格现货供应产品名: 二苯甲酰甲烷
购买
询盘CAS: 120-46-7产地: 上海包装: 500g价格: 298库存: 3-4周电话: 13918391375/17821173903手机: 13918391375/17821173903电子邮件: wangrui@macklin.cnQQ: 2853951919 微信: 13918391375/17821173903 浙江杭宇医药科技有限公司产品名: 二苯甲酰甲烷
询盘CAS: 120-46-7产地: 浙江电话: 18134193529手机: +86 18134193529电子邮件: 18134193529@163.com 乐研试剂产品名: 二苯甲酰甲烷
购买
询盘CAS: 120-46-7产地: 上海价格: 电联,邮件电话: 021-20772923*1172 (24小时)手机: 400-821-0725电子邮件: chenyiming@leyan.comQQ: 1823703538 产品描述: 乐研试剂:7万+现货 500+研发人员 当天发货免运费,涵盖分子砌块/医药中间体/催化剂与配体等,一站式定制合成服务 www.leyan.com 上海源叶生物科技有限公司现货供应产品名: 二苯甲酰甲烷
购买
询盘CAS: 120-46-7产地: 上海规格: ≥98%价格: 25g 30,100g 80,500g 260库存: 现货电话: 18301782025手机: 18301782025电子邮件: 3008007403@qq.comQQ: 3008007403 微信: 18301782025产品描述: 二苯甲酰甲烷 ≥98% 源叶 货号:S41427 安徽佳先功能助剂股份有限公司产品名: 二苯甲酰甲烷
询盘CAS: 120-46-7产地: 安徽电话: 0552-4950475;4089522电子邮件: sales@jxchem.com.cn产品描述: 作为钙/锌羟酸盐稳定体系的共稳定剂,用来制造PVC矿泉水瓶
山东西亚化学有限公司现货供应产品名: 二苯甲酰甲烷
购买
询盘CAS: 120-46-7产地: 山东包装: 100g,25g,500g规格: ≥99.0% AR|≥98.0% (GC)|≥98.0% (GC)价格: 145.00,53.00,286.00库存: 现货电话: 400-990-3999手机: 13395399280电子邮件: 861669111@qq.comQQ: 1903368307 微信: 13355009207 前衍化学科技(武汉)有限公司产品名: 二苯甲酰基甲烷
询盘CAS: 120-46-7产地: 湖北电话: 13247110337手机: 13247110337电子邮件: 2205437118@qq.comQQ: 2205437118 微信: 13247110337产品描述: 前衍化学是化学品的一站式供采平台,致力于通过数字化+专业服务让化学品交易更高效。前衍核心团队已有10年以上行业服务经验,平台2019年正式成立以来,已为5万+单 更多 广州远达新材料有限公司产品名: 二苯甲酰基甲烷
询盘CAS: 120-46-7产地: 广东包装: 1kg/25kg/200kg, purity>=99%价格: 电联或QQ微信咨询电话: 19849939632手机: 19849939632(微信同号)电子邮件: 2470479589@qq.comQQ: 2470479589 微信: +86 19849939632产品描述: 长期现货可分装可零售 湖北隆信化工实业有限公司现货供应产品名: 二苯甲酰基甲烷
询盘CAS: 120-46-7产地: 国产包装: 100g 500g 1kg 20kg价格: 电联库存: 是电话: 15335994747手机: 15335994747电子邮件: ycwlb056@yeah.netQQ: 3521670276 产品描述: 吡啶溴化氢盐是我司主打产品之一,且随货可提供检验分析单,少量样品可以免费提供,公司优势是厂家直发二苯甲酰基甲烷 合肥天健化工有限公司产品名: 二苯甲酰甲烷
询盘CAS: 120-46-7产地: 安徽电话: 0086-551-65418679手机: 15856988503电子邮件: sales@tnjchem.com info@tnjchem.comQQ: 2881500842 微信: 0086 189 4982 3763产品目录: 点此进入 上海麦克林生化科技股份有限公司提供多种规格现货供应产品名: 二苯甲酰甲烷
购买
询盘CAS: 120-46-7产地: 上海包装: 500g价格: 298库存: 3-4周电话: 13918391375/17821173903手机: 13918391375/17821173903电子邮件: wangrui@macklin.cnQQ: 2853951919 微信: 13918391375/17821173903 浙江杭宇医药科技有限公司产品名: 二苯甲酰甲烷
询盘CAS: 120-46-7产地: 浙江电话: 18134193529手机: +86 18134193529电子邮件: 18134193529@163.com 乐研试剂产品名: 二苯甲酰甲烷
购买
询盘CAS: 120-46-7产地: 上海价格: 电联,邮件电话: 021-20772923*1172 (24小时)手机: 400-821-0725电子邮件: chenyiming@leyan.comQQ: 1823703538 产品描述: 乐研试剂:7万+现货 500+研发人员 当天发货免运费,涵盖分子砌块/医药中间体/催化剂与配体等,一站式定制合成服务 www.leyan.com 上海源叶生物科技有限公司现货供应产品名: 二苯甲酰甲烷
购买
询盘CAS: 120-46-7产地: 上海规格: ≥98%价格: 25g 30,100g 80,500g 260库存: 现货电话: 18301782025手机: 18301782025电子邮件: 3008007403@qq.comQQ: 3008007403 微信: 18301782025产品描述: 二苯甲酰甲烷 ≥98% 源叶 货号:S41427 安徽佳先功能助剂股份有限公司产品名: 二苯甲酰甲烷
询盘CAS: 120-46-7产地: 安徽电话: 0552-4950475;4089522电子邮件: sales@jxchem.com.cn产品描述: 作为钙/锌羟酸盐稳定体系的共稳定剂,用来制造PVC矿泉水瓶
二苯甲酰基甲烷(DMB)的下游产品
3,5-二苯基吡唑 1,2-双(对甲苯基磺酰基)肼
您刚刚浏览过
二苯甲酰基甲烷(DMB)
你知道吗?
点击右上角的地图标志可以切换至英文页面
使用化工百科前必读
首页
注册
登录
会员介绍
联系方式
化工百科英文站
原理和实战解析Linux中如何正确地使用内存屏障(上) - 哔哩哔哩
战解析Linux中如何正确地使用内存屏障(上) - 哔哩哔哩 原理和实战解析Linux中如何正确地使用内存屏障(上)补给站Linux内核关注专栏/原理和实战解析Linux中如何正确地使用内存屏障(上)原理和实战解析Linux中如何正确地使用内存屏障(上)
2022年10月28日 09:40--浏览 ·
--喜欢 ·
--评论
补给站Linux内核粉丝:5114文章:723
关注圈里流传着一句话“珍爱生命,远离屏障”,这足以说明内存屏障是一个相当晦涩和难以准确把握的东西。使用过弱的屏障,会导致软件不稳定。使用过强的屏障,会引起性能问题。所以工程上,追求恰到好处、不偏不倚的屏障。本文力求用最浅显的语言,讲清楚内存屏障最晦涩的道理,本文也会给出五个工程案例,这些案例皆见于开源的代码,不涉及任何组织和个人未公开的技术。一、引子我国古代著名程序猿韩愈曾经写下一个名为《春雪》的函数:新年都未有芳华,二月初惊见草芽。白雪却嫌春色晚,故穿庭树作飞花。这段代码讲述了一个关于memory reorder的故事,在计算机世界里面,冬天和春天并没有明确的界限,明明已经是春天了,但是还飘着冬天的雪。下面我们看另外一段程序:我们能确保c = 4吗?实际上,任何一个角度都确定不了。比如CPU0上面a = 3是“下雪”,flag = 1是“春天”,a=3看似在flag=1之前,实际可能由于memory reorder的原因发生在flag = 1之后,所以flag即便已经等于1,a也不一定等于3。我们再退一万步讲,哪怕CPU0上面确实确保了春天不下雪,flag=1的时候a 100%就等于了3,那CPU1那边就万无一失了吗?答案也是否定的,因为,在CPU1上面,即便我们的代码是if(flag==1),接下来才做c=a+1,我们也不能确保a的load一定发生在flag==1之后。别忘了,CPU1会投机执行,比如碰到if(flag==1)这种条件,CPU可能直接忽略,不管三七二十一,还是可能先执行 load a, a+1的动作,然后反过来发现flag等于1,然后我认为我的投机是成功的;即便投机失败,CPU只需要保证load a, a+1的这些指令不retired就好。所以CPU1的load a, a+1完全可能发生在flag确切地等于1之前,因此即便CPU0保序了,CPU1仍然不能确保c=4。我们看看CPU1在投机成功时候的行为逻辑和思想情感:flag==1吗?不知道啊!我现在还没读出flag呢!管它呢,先假装flag==1吧,投机一把,执行load a, 把a+1看看4.flag==1吗?哇,它真地等于1,太爽了,load a和a+1已经做完了。如果投机失败了呢?flag==1吗?不知道啊!我现在还没读出flag呢!管它呢,先假装flag==1吧,投机一把,执行load a, 把a+1看看flag==1吗?Oh,shit,它不等于1,load a, a+1白做了.....这就是弱序系统的典型特点。请问CPU为什么要这么“混乱”?这正是现代CPU为了保证高效执行厉害的地方,但是也引入软件使用上的复杂度。这种复杂度,类似于宋代著名程序媛李清照的函数《声声慢·寻寻觅觅》:“寻寻觅觅,冷冷清清,凄凄惨惨戚戚。乍暖还寒时候,最难将息。三杯两盏淡酒,怎敌他、晚来风急?雁过也,正伤心,却是旧时相识。满地黄花堆积,憔悴损,如今有谁堪摘?守着窗儿,独自怎生得黑。梧桐更兼细雨,到黄昏、点点滴滴。这次第,怎一个愁字了得!”请问李清照童鞋说的究竟是春天还是秋天还是春天呢?据说至今也没有人能够解密。仅凭“乍暖还寒”一定会觉得是初春,但是你再继续看到“雁过也”、“满地黄花堆积”,这显然又不是春天的景象。罢了罢了,这一切都不重要了,重要的是,四季并不分明,四季没有明确的界限。这是我们要牢记的第一个point!二、屏障正是因为四季没有明确的界限,所以当我们希望看到明确的顺序的时候,我们希望引入一道屏障。让冬天跑不到春天,让春天跑不过去冬天。典型的ARM64有这么几种屏障:a. DMB:Data Memory Barrierb. DSB:Data Synchronization Barrierc. ISB:Instruction Synchronization Barrierd. LDAR(Load-Acquire)/STLR(Store-Release)我们随便打开ARM的手册,看一个DMB的定义:The Data Memory Barrier (DMB) prevents the reordering of specified explicit data accesses across the barrier instruction. All explicit data load or store instructions, which are executed by the PE in program order before the DMB, are observed by all Observers within a specified Shareability domain before the data accesses after the DMB in program order.码农的内心是崩溃的,人生已经这么悲催了,你为什么还要拿这样的绕口令来折磨我?什么叫“are observed by all Observers”?下面我们给大家讲述2只狗狗出家门的故事:上图的2只狗,首先在一个inner shareable domain里面,比如是自己的家门里面;然后是在一个outer shareable domain里面,比如是小区的出口;最后在太阳系里面。这2只小狗,出每一道门,都有observer可以看见它,有的observer是inner的(observer1),有的observer是outer的(observer2),有的observer属于full system,比如天上的嫦娥(observer3)。现在我们提出如下需求:a. 黄狗狗出门后白狗狗出门。b. 黄狗狗和白狗狗出门后,放烟雾消杀。当我们提出这样的需求的时候,我们看3样东西:1. 我们首先要看需要保证顺序的2个事物的特征在需求1里面,是2只特征一样的东西,都是狗狗;在需求2里面,两个事物之间一个是狗狗,一个是消杀的烟雾,显然不是同类。狗狗在硬件和Linux软件层面上,可以理解为针对内存的memory load/store指令;放烟雾,这种不属于memory的load/store,比如你执行的是tlbi、add加法或者写的是ARM64系统寄存器(MSR指令),则显然不属于memory load/store。这里就涉及到DMB和DSB的一个本质区别,DMB针对的是memory的load/store之间;DSB强调的是同类或不同类事物的先后完成。所以对于这个场景,我们正确的屏障是:load黄狗狗dmb ??load白狗狗dsb ??MSR 消毒烟雾第一个是dmb,第2个是dsb。上面dmb和dsb后面都加了两个“?”,证明这里有情况,什么情况?接着看。2. 其次我们要看保序的observer在哪里比如是家门口的小姑娘observer1(ISH,inner shareable)、还是小区门口的小姑娘observer2(OSH,outer shareable),还是天上的嫦娥呢(SY, Full System)?如果只是observer1看到黄狗狗先出门,白狗狗再出门,延迟显然更小。在越大的访问范围保序,硬件的延迟越大。假设我们现在的保序需求是:a. 小区门口(outer shareable)的observer2先看到黄狗狗出来,再看到白狗狗出来;b. 家门口(inner shareable)的observer1先看到两只狗狗出来,再看到放烟雾。对于这个场景,我们正确的屏障是:load黄狗狗dmb OSH?load白狗狗dsb ISH?MSR 消毒烟雾在DMB后面我们跟的是OSH,在DSB后面我们跟的是ISH,是因为observer的位置不一样。注意,能用小observer的不用大observer。小区门口的observer,没有透视眼+望远镜,是看不到你家门口的狗狗的。在一个典型的ARM64系统里面,运行Linux的各个CPU在一个inner;而GPU,DMA和CPU则同位于一个outer;当然还有可能孤悬海外的一个Cortex-M3的MCU,尽管可以和CPU以某种方式通信,但是不太参与inner以及outer里面的总线interconnect。3. 最后我们保序的方向是什么前面我们只关心狗狗的出门(load),假设两只狗狗都是进门(store)呢?或者我们现在要求黄狗狗先进门,白狗狗再出门呢?这个时候,我们要约束屏障的方向。比如下面的代码,约束了observer1(inner)先看到黄狗狗出门,再看到白狗狗出门:load黄狗狗dmb ISHLDload白狗狗比如下面的代码,约束了observer2(outer)先看到黄狗狗进门,再看到白狗狗进门:store黄狗狗dmb OSHSTstore白狗狗这里我们看到一个用的是LD,一个用的是ST。我们再来看几个栗子,它们都是干什么的:a. A(load); dmb ISHLD; B; C(load/store)保证Inner内,A和C的顺序,只要A是load,无论C是load还是store;如果B既不是load也不是store,而是别的性质的事情,则dmb完全管不到B;b. A(load); dsb ISHLD; B; C(load/store)保证Inner内,A和C的顺序,只要A是load,无论C是load还是store;无论B是什么事情,inner都先到干完了A,再干B(注意这里是dsb啊,亲)。c. A(store); dmb ISHLD; B; C(store)A,B,C三个东西完全乱序,因为dmb约束不了性质不同的B,“LD”约束不了A和C的store顺序。d. A(store); dmb ISHST; B; C(store)ST约束了A和C 2个东西在inner这里看起来是顺序的,因为dmb约束不了B,所以B和A、C之间乱序。注意上述4个屏障,由于都是ISH,故都不能保证observer2和observer3的顺序,在observer2和3眼里,上述所有屏障,A、B、C都是乱序的。另外,如果无论什么方向,我们都要保序,我们可以去掉LD和ST,这样的保序方向是any-any。到这里我们要牢记3个point:谁和谁保序;在哪里保序;朝哪个方向保序。由此,我们可以清楚地看到DMB和DSB的区别,一个是保序内存load,store;一个是保序内存load,store + 其他指令。ISB的性质会有很大的不同,ISB主要用于刷新处理器中的pipeline,因此可确保在 ISB 指令完成后,才从内存系统中fetch位于该指令后的其他指令。比如你更新了代码段的PTE,需要重新取指。而LDAR(Load-Acquire)/STLR(Store-Release)则是比较新的one-way barrier。如下图,LDAR之前的LDR、STR可以跑到LDAR之后,但是不能跑到STLR之后;STLR之后的LDR,STR可以跑到STLR之前,但是不能跑到LDAR之前。所以STLR堵住了前面的往后面跑,LDAR堵住了后面的往前面跑。下面夹在LDAR和STLR之间的LDR,STR由于两边都是单向车道,而且都与它的行进方向相反,所以它夹在死胡同里,哪里也去不了。注意,LDAR和STLR与前面的dmb, dsb有本质的不同,它本身是要跟地址的。比如现在家里有3只狗狗:假设我们现在的要求是黄狗狗一定要在红尾哈巴狗之后出门,而白狗狗什么时候出我们都不在乎,则代码逻辑为:ldr 白狗狗ldar 红尾哈巴狗ldr 黄狗狗黄狗狗被红尾哈巴狗的ldar挡住了,而白狗狗没有被任何东西挡住,它可以:第一个出门红尾哈巴狗出门后,黄狗狗出门前出门最后一个出门。三、API在Linux内核,有4组经典API:SMP屏障此屏障主要用于运行Linux的多个核之间对内存访问的保序,所以它主要是dmb,它是ish,通过ld、st来区分保序的方向。DMA屏障此屏障主要用于运行Linux的多个核与DMA引擎之间的保序,所以它主要是dmb,它是osh,通过ld、st来区分保序的方向。屏障非常严格的完成屏障,mb()保证了前面的指令的完成,前面的指令不必是load,store,比如可以是TLBI。dsb(ld)、dsb(st)则要弱一点,分别保证前面的load,store执行完了才执行后面的指令。load_acquire/store_release逻辑通常是一种成对的__smp_load_acquire()、__smp_store_release()逻辑,特别适合2个或者多个CPU之间的链式保序。在ARM64里面用的是stlr,ldar实现如下:比如,下面的代码逻辑,保证了CPU0、CPU1、CPU2这3个CPU在链条上保序访问:中间循环了一个链条逻辑,从而保证了这三个CPU中间内存访问的一些保序:下面我们进入五个工程实战,“熟读唐诗三百首,不会吟诗也会吟”,最后我们会形成针对内存屏障正确用法的语感,而全然忘记语法。篇幅有限,下文继续讲解原文作者:内核工匠本文禁止转载或摘编
分享到:
投诉或建议评论----
DMB_化工百科
DMB_化工百科
化工百科
首页
产品供应商后台
了解会员服务
登陆
免费注册
搜供应商
搜百科
DMB
4,4'-二氨基-3,3'-二甲基联苯(3,3'-Dimethylbiphenyl-4,4'-diamine)
CAS: 119-93-7
化学式: C14H14N2O2S
主页 产品中间体医药中间体 DMB
管制品类:危险化学品目录
中文名 4,4'-二氨基-3,3'-二甲基联苯英文名 3,3'-Dimethylbiphenyl-4,4'-diamine别名 联甲苯胺邻联甲苯胺托力丁倍司联邻甲苯胺邻二氨基二甲基联苯3,3-二甲基联苯胺3,3'-二甲基联苯胺3,3'-二甲基-4,4'-二氨基联苯4,4'-二氨基-3,3'-二甲基联苯英文别名 DMBOTBASEO.T. BASEo-Tolidine2-TolidineC.I. 372302-Tolidina[2-TolidinOrthotolidineFast Dark Blue Base R3,3'-DimethylbenzidineAzoic diazo component 113C.I. Azoic Diazo Component 1133,3'-dimethyl-4,4'-biphenyldiamineo-Tolidine(3,3'-Dimethylbenzidine)3,3'-dimethyl-4,4'-diaminobiphenyl3,3'-Dimethylbiphenyl-4,4'-diamine1'-biphenyl)-4,4'-diamine,3,3'-dimethyl-(1'-biphenyl]-4,4'-diamine,3,3'-dimethyl-(1'-Biphenyl)-4,4'-diamine-3,3'-dimethyl-3,3'-dimethyl-[1,1'-biphenyl]-4,4'-diamine3,3'-dimethyl-[1,1'-biphenyl]-4,4'- diamine(1,1'-biphenyl)-4,4'-diamine-3,3'-dimethyl-CAS 119-93-7EINECS 204-358-0化学式 C14H14N2O2S分子量 274.34InChI InChI=1/C14H16N2/c1-9-7-11(3-5-13(9)15)12-4-6-14(16)10(2)8-12/h3-8H,15-16H2,1-2H3密度 1.106g/cm3熔点 125-132℃沸点 361°C at 760 mmHg闪点 205.1°C水溶性 Slightly soluble in water.蒸汽压 2.14E-05mmHg at 25°C折射率 1.638存储条件 Room Temprature物化性质 性状 白色至微红色晶体或结晶粉末。 熔点 125-132°C 沸点 300.5°C 闪点 244°C 溶解性 微溶于水,溶于乙醇、乙醚和稀酸。 危险品标志 T - 有毒物品
N - 危害环境的物品
风险术语 R22 - 吞食有害。
R45 - 可能致癌。
R51/53 - 对水生生物有毒,可能对水体环境产生长期不良影响。
R68 - 可能有不可逆后果的危险。
安全术语 S45 - 若发生事故或感不适,立即就医(可能的话,出示其标签)。
S53 - 避免接触,使用前须获得特别指示说明。
S61 - 避免释放至环境中。参考特别说明/安全数据说明书。
危险品运输编号 UN 3082 9/PG 3上游原料 邻硝基甲苯 2-氨基-8-萘酚-6-磺酸 邻联甲苯胺 下游产品 双乙酰乙酰-3,3'-二甲基联苯胺 指示蓝4R 参考资料 展开查看 1. 孙莲, 新疆医科大学药学院化学教研室, 孙莲,等. 新疆药桑叶中1-脱氧野尻霉素定性及定量分析[J]. 中国现代中药, 2016, 18(10):1291-1295.
DMB - 性质可信数据白色至微红色晶体或结晶粉末。熔点129~131℃。340℃分解。微溶于水,溶于乙醇、乙醚和稀酸。可燃。
最后更新:2024-01-02 23:10:35DMB - 制发可信数据用锌粉(或硅铁粉)在苛性钠介质中将邻硝基甲苯还原为2,2'--甲基对称二苯肼,然后在22.5%的硫酸及焦亚硫酸钠(或盐酸)存在下,重排生成3,3'-=甲基联苯胺硫酸盐(或盐酸盐),再加30%液碱,脱酸而得成品。称二苯肼,然后在22.5%的硫酸及焦亚硫酸钠(或盐酸)存在下,重排生成3,3'-=甲基联苯胺硫酸盐(或盐酸盐),再加30%液碱,脱酸而得成品。
最后更新:2022-01-01 10:52:55DMB - 性质4,4'-二氨基-3,3'-二甲基联苯是一种有机化合物,化学式为C16H18N2。它是一种无色结晶固体,常见的形式是棱柱状晶体或粉末状。它的分子量为238.33 g/mol。
该化合物具有较强的疏水性,不溶于水,但溶于一些有机溶剂,如乙醇、二甲酮和乙醚等。它具有较低的融点和沸点。
4,4'-二氨基-3,3'-二甲基联苯是一种二官能团化合物,它含有两个氨基基团和两个甲基基团。这使得它具有一定的反应性。例如,它可以和一些酸或碱反应形成盐类,也可以和一些电子不饱和化合物发生亲电取代反应。
此外,4,4'-二氨基-3,3'-二甲基联苯还具有一定的荧光性质。它在紫外光激发下可以发射出绿色荧光,因此广泛应用于荧光探针、荧光染料等领域。
最后更新:2024-01-02 23:10:35DMB - 用途与合成方法4,4'-二氨基-3,3'-二甲基联苯,也被称为 "MBI",是一种重要的有机化合物。它具有广泛的应用和合成方法。
在应用方面,MBI 是一种重要的有机发光材料。它可用于制备有机发光二极管(OLED)和有机电致冷材料。MBI 具有高度的发光效率和较长的寿命,因此在光电子学和光学器件中有着重要的应用。
此外,MBI 也可以作为一种磁性材料。它具有较强的自旋耦合效应,可以用于制备磁性聚合物、电子器件和储能材料等。
关于合成方法,MBI 的合成主要有两种常用的方法。
一种方法是通过苄胺的硝酸银盐与 2,2,6,6-四甲基苄醛反应得到MBI。具体步骤为:首先将苄胺硝酸银盐与碱反应生成相应的亚胺盐,然后与二甲基苄醛在适当的溶剂中反应,最后经过脱水和结晶得到纯品。
另一种方法是通过氨甲基苯并环(a-氨基-磺酸溴化物)和乙酸乙酯经由溴化反应合成MBI。具体步骤为:首先将氨甲基苯并环与三氯化磷反应生成氯化物,然后通过铜催化的氮化反应与溴乙酸乙酯反应,最后经过水杂化反应和结晶得到纯品。
这些方法在合成MBI时都能够得到较好的产率和纯度,提供了可行的途径来合成该化合物。最后更新:2024-01-02 23:10:35DMB - 安全信息4,4'-二氨基-3,3'-二甲基联苯是一种化学物质,也称为DMAB. 它是一种有机化合物,化学式为C16H18N2,相对分子质量为238.33克/摩尔。以下是关于4,4'-二氨基-3,3'-二甲基联苯的一些安全信息:
1. 吸入:避免吸入其气体、烟雾或粉尘。若不慎吸入,应立即将患者转移到空气清新处,并在医生的指导下进行治疗。
2. 食入:避免食入。如果不慎食入,请立即向医生求助,并出示产品的包装或标签。
3. 接触皮肤:应避免接触皮肤。如果接触到化合物,应立即用大量清水冲洗至少15分钟,并寻求医疗帮助。
4. 接触眼睛:避免接触眼睛。如果发生接触,应立即用大量清水冲洗眼睛至少15分钟,同时佩戴防护眼镜,并寻求医疗帮助。
5. 环境安全:避免该物质进入水源或土壤。对于泄漏物或废弃物的处置,应遵循当地法规。
6. 储存:应将4,4'-二氨基-3,3'-二甲基联苯储存在干燥、通风良好的地方,远离热源和火源。
最后更新:2024-01-02 23:10:35DMB - 安全性可信数据
本品为联苯胺的衍生物。有毒。能刺激皮肤和黏膜。可致敏并可引起膀胱癌。应避免其与皮肤直接接触。生产设备要密闭,防止粉尘污染空气。操作人员应穿戴防护用具。
用铁桶内衬暗色塑料袋包装。贮存于阴凉、通风、干燥处。按有毒易燃化学品规定贮运。
最后更新:2022-01-01 10:52:55
查看DMB结构式
化工百科提示:
该产品属于管制类产品-危险化学品,个人不得非法销售或购买。公司或单位需取得相关部门发放的许可证并按法律规定进行登记备案。物流、仓储均需具有相应资质的物流公司和仓储公司,严禁使用快递运输。
厂家联系方式仅供具备采购资质的公司或团体在线下联络时参考使用,产品不在网上销售。
供应商列表
长沙长唐进出口有限公司的联系方式产品名: 联苯甲胺电话: 15717493165手机: 15717493165电子邮件: 314639330@qq.com山东西亚化学有限公司的联系方式产品名: 3,3'-二甲基联苯胺电话: 400-990-3999手机: 13395399280电子邮件: 861669111@qq.com前衍化学科技(武汉)有限公司的联系方式产品名: 4,4'-二氨基-3,3'-二甲基联苯电话: 13247110337手机: 13247110337电子邮件: 2205437118@qq.com广东翁江化学试剂有限公司的联系方式产品名: 4,4'-二氨基-3,3'-二甲基联苯手机: 13927877242电子邮件: 3007432262@qq.com前衍化学科技(武汉)有限公司的联系方式产品名: 4,4'-二氨基-3,3'-二甲基联苯手机: 13247110337电子邮件: 2205437118@qq.com河北贞田食品添加剂有限公司的联系方式产品名: 4,4'-二氨基-3,3'-二甲基联苯电话: 0319-5925599手机: 13373390591电子邮件: 13313091926@163.com上海麦克林生化科技股份有限公司的联系方式产品名: 联邻甲苯胺电话: 13918391375/17821173903手机: 13918391375/17821173903电子邮件: wangrui@macklin.cn浙江杭宇医药科技有限公司的联系方式产品名: 4,4'-二氨基-3,3'-二甲基联苯电话: 18134193529手机: +86 18134193529电子邮件: 18134193529@163.com
长沙长唐进出口有限公司的联系方式产品名: 联苯甲胺电话: 15717493165手机: 15717493165电子邮件: 314639330@qq.com山东西亚化学有限公司的联系方式产品名: 3,3'-二甲基联苯胺电话: 400-990-3999手机: 13395399280电子邮件: 861669111@qq.com前衍化学科技(武汉)有限公司的联系方式产品名: 4,4'-二氨基-3,3'-二甲基联苯电话: 13247110337手机: 13247110337电子邮件: 2205437118@qq.com广东翁江化学试剂有限公司的联系方式产品名: 4,4'-二氨基-3,3'-二甲基联苯手机: 13927877242电子邮件: 3007432262@qq.com前衍化学科技(武汉)有限公司的联系方式产品名: 4,4'-二氨基-3,3'-二甲基联苯手机: 13247110337电子邮件: 2205437118@qq.com河北贞田食品添加剂有限公司的联系方式产品名: 4,4'-二氨基-3,3'-二甲基联苯电话: 0319-5925599手机: 13373390591电子邮件: 13313091926@163.com上海麦克林生化科技股份有限公司的联系方式产品名: 联邻甲苯胺电话: 13918391375/17821173903手机: 13918391375/17821173903电子邮件: wangrui@macklin.cn浙江杭宇医药科技有限公司的联系方式产品名: 4,4'-二氨基-3,3'-二甲基联苯电话: 18134193529手机: +86 18134193529电子邮件: 18134193529@163.com
DMB的上游原料
邻硝基甲苯 2-氨基-8-萘酚-6-磺酸 邻联甲苯胺
DMB的下游产品
直接湖蓝5B C.I.酸性红114 伊文思蓝
您刚刚浏览过
DMB
你知道吗?
点击右上角的地图标志可以切换至英文页面
使用化工百科前必读
首页
注册
登录
会员介绍
联系方式
化工百科英文站