关键问题
此问题影响旨在在闪存中执行的代码
使用 alt_load()
将可改写部分复制到 RAM 中。
如果 .bss
要从
闪存到 RAM 使用 alt_load()
, 软件构建工具
确认该部分适用于 RAM,但不知道该部分适用于
闪存,它将被编程在。该工具生成一个
编程文件,没有任何代码大小错误迹象。
如果您的目标内存,此问题更有可能影响您
是MAX 10 开芯片闪存,相对较小。此问题
仅在您使用时才会影响您 alt_load()
。
您可以通过查找来手动确定代码是否适合 在 .objdaj 文件的开头,在创建时 您正在构建应用程序。此文件包含的信息 您可以使用来确定每个部分是否适合您的闪存 内存,如下例所示。
.objd文件在应用程序的应用程序中创建
应用程序的顶级目录。您可以从
通过在应用程序中键入命令行 make app
目录。
.objdaj文件的顶部附近是一个列表 与以下部分类似的部分:
Sections: | ||||||
Idx | Name | Size | VMA | LMA | File off | Algn |
0 | .entry | 00000020 | 00028000 | 00028000 | 00001000 | 2**5 |
| | CONTENTS, ALLOC, LOAD, READONLY, CODE | ||||
1 | .exceptions | 00000220 | 00028020 | 00028020 | 00001020 | 2**2 |
| | CONTENTS, ALLOC, LOAD, READONLY, CODE | ||||
2 | .text | 00006504 | 00028240 | 00028240 | 00001240 | 2**2 |
| | CONTENTS, ALLOC, LOAD, READONLY, CODE | ||||
3 | .rodata | 0000005c | 00040000 | 0002e744 | 00008000 | 2**2 |
| | CONTENTS, ALLOC, LOAD, READONLY, DATA | ||||
4 | .rwdata | 00001b78 | 0004005c | 0002e7a0 | 0000805c | 2**2 |
| | CONTENTS, ALLOC, LOAD, DATA, SMALL_DATA | ||||
5 | .bss | 00000154 | 00041bd4 | 00030318 | 00009bd4 | 2**2 |
| | ALLOC, SMALL_DATA |
每个部分都有大小、VMA 和 LMA 的值。VMA 是 运行时地址,LMA 是负载地址。如果没有部分 复制, VMA = LMA。如果复制了一个部分,则会从 LMA 复制 至 VMA。
在这种情况下,即使用 alt_load()
.entry
,以及 .text
未复制 (VMA = LMA)。 .rodata
, .rwdata
,
并 .bss
从闪存地址 (LMA) 复制到 RAM
地址 (VMA)。
此示例中的闪存有一系列与0x30000 0x28000。
该 .rwdata
部分编程为从启动闪存
在 VMA = 0x2e7a0,并扩展到 VMA 大小 = 0x2e7a0 0x1b78 =
0x30518。因此,它不适合闪存。