为什么单片机程序中要定义地址,有什么作用不定义会出现问题吗这个地址是哪的地址

为什么单片机程序中要定义地址,有什么作用不定义会出现问题吗这个地址是哪的地址,第1张

#define LED_BIT 0x8fff 把这个地址定义为了一个常量 , 你使用这个LED_BIT 的时候就不用再关心地址的问题了。而且以后要修改只需要修改空上常量定义就可以了,不用在代码中到处找。

CPU工作速度较高,但内存存取速度相对较低,则造成CPU等待,降低处理速度,浪费CPU的能力,cache用于做cpu和内存的缓存。

Cache的工作原理是基于程序访问的局部性(通俗说就是把经常用到的数据放在一个高速的cache里面)。

对大量典型程序运行情况的分析结果表明,在一个较短的时间间隔内,由程序产生的地址往往集中在存储器逻辑地址空间的很小范围内。指令地址的分布本来就是连续的,再加上循环程序段和子程序段要重复执行多次。因此,对这些地址的访问就自然地具有时间上集中分布的倾向。

数据分布的这种集中倾向不如指令明显,但对数组的存储和访问以及工作单元的选择都可以使存储器地址相对集中。这种对局部范围的存储器地址频繁访问,而对此范围以外的地址则访问甚少的现象,就称为程序访问的局部性。

根据程序的局部性原理,可以在主存和CPU通用寄存器之间设置一个高速的容量相对较小的存储器,把正在执行的指令地址附近的一部分指令或数据从主存调入这个存储器,供CPU在一段时间内使用。这对提高程序的运行速度有很大的作用。这个介于主存和CPU之间的高速小容量存储器称作高速缓冲存储器(Cache)。

系统正是依据此原理,不断地将与当前指令集相关联的一个不太大的后继指令集从内存读到Cache,然后再与CPU高速传送,从而达到速度匹配。

CPU对存储器进行数据请求时,通常先访问Cache。由于局部性原理不能保证所请求的数据百分之百地在Cache中,这里便存在一个命中率。即CPU在任一时刻从Cache中可靠获取数据的几率。

命中率越高,正确获取数据的可靠性就越大。一般来说,Cache的存储容量比主存的容量小得多,但不能太小,太小会使命中率太低;也没有必要过大,过大不仅会增加成本,而且当容量超过一定值后,命中率随容量的增加将不会有明显地增长。

只要Cache的空间与主存空间在一定范围内保持适当比例的映射关系,Cache的命中率还是相当高的。

一般规定Cache与内存的空间比为4:1000,即128kB Cache可映射32MB内存;256kB Cache可映射64MB内存。在这种情况下,命中率都在90%以上。至于没有命中的数据,CPU只好直接从内存获取。获取的同时,也把它拷进Cache,以备下次访问。

如果是具备 *** 作系统的情况下,C语言,linux为例,程序会根据系统配置和elf格式自动加载进入内存。

起始地址是可执行文件的base_of_image字段指定的值,前提是不开启PIE保护。

而汇编器内部寻址只是一个偏移地址。

所以最终,一条指令的位置 = 起始地址+ 他在模块的偏移。

如果不具备 *** 作系统,纯粹的嵌入式环境下,地址是自己指定的。

以上就是关于为什么单片机程序中要定义地址,有什么作用不定义会出现问题吗这个地址是哪的地址全部的内容,包括:为什么单片机程序中要定义地址,有什么作用不定义会出现问题吗这个地址是哪的地址、关于计算机组成原理的Cache-主存地址映象问题、程序编译时地址如何分配等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9843039.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-02
下一篇 2023-05-02

发表评论

登录后才能评论

评论列表(0条)

保存