ZHCU876Z July 2001 – October 2023 SM320F28335-EP
当按名称访问全局变量时,编译器使用直接寻址。C28x 支持通过数据页指针寄存器 DP 进行直接寻址。DP 寄存器指向长度为 64 字的页的开头。
为了避免每次直接访问都加载 DP,编译器会对某些数据和段进行“分块”。分块技术可确保对象要么完全包含在单个页中,要么与 64 字页的边界对齐。这种数据页分块技术允许编译器更频繁地使用直接寻址模式。因此,在访问已知存储在单个数据页上的全局变量时,该功能最大程度地减少了对 DP 加载指令的需求。
对于 COFF ABI,所有非常量数据均被分块。
对于 EABI,默认的分块规则是:
然而,由于数据与页边界对齐,数据页分块会导致内存中出现对齐孔。因此,应用程序对代码大小和速度优化的需求与对数据大小优化的需求之间需要进行权衡。可以使用 blocked 和 noblocked 数据属性来控制对具体变量的分块。有关详细信息,请参阅节 6.15.4。
另一种用于管理如何在内存中组织全局变量的技术包括对应该存储在结构中一起的全局变量进行分组。也可以使用 DATA_SECTION(节 6.9.6)和 SET_DATA_SECTION(节 6.9.23)pragma 来管理数据页。
有关 C28x 数据页分块的示例,请参阅 E2E 社区上的 C2000 MCU 编译器中的数据分块功能主题。