有不同的内存段,例如.bss,.text,.data,.rodata,....
我无法知道哪些位于RAM中,哪些位于FLASH存储器中,很多来源都在(RAM和ROM)存储器的两个部分都提到过它们。
请提供RAM和闪存的内存段的公平说明。
ATMEL工作室编译器
ATMEGA 32平台
答案 0 :(得分:2)
它们位于项目的链接描述文件定义它们所在的位置。
某些目标在ROM中定位并执行代码,而其他目标可能在启动时将代码从ROM复制到RAM并从RAM执行 - 通常出于性能原因,在更快的处理器上。因此.text和.rodata可以位于R / W或R / O存储器中。但是,根据定义,.bss和.data不能位于R / O内存中。
答案 1 :(得分:2)
希望您了解这些部分名称的典型用法。 .text是代码,.rodata只读数据,.data是非零读/写数据(全局变量,例如已经在编译时初始化),。bss读/写数据假定为零,未初始化。 (未初始化的全局变量)。
所以.text和.rodata是只读的,所以它们可以在flash或ram中使用。 .data和.bss是读/写的,所以它们需要在ram中使用,但是为了将这些信息放入ram中,当电源关闭时它必须处于非易失性位置,然后复制到ram。因此,在微控制器中,.data信息将存在于闪存中,并且引导代码需要将该数据复制到ram中的主页,代码期望在其中找到它。对于.bss,你不需要所有那些零,你只需要起始地址和字节数,引导程序可以将该内存归零。
所以他们都可以/同时生活在两者中。但典型的用例是在Flash中使用只读的用户,在ram中读取/写入USED。
答案 2 :(得分:0)
无法写入ROM,但可以写入RAM。 ROM 保存 (BIOS) 基本输入/输出系统,但 RAM 保存运行的程序和使用的数据。 ROM 比 RAM 小得多。 ROM 是非易失性(永久性),但 RAM 是易失性的。