MATLAB模拟动力系统:程序空间中的变量与常量管理

需积分: 49 31 下载量 42 浏览量 更新于2024-08-09 收藏 3.92MB PDF 举报
"MPLAB XC16 C 编译器用户指南 - 程序空间中的变量和常量处理" MPLAB XC16 C 编译器支持在程序空间中处理变量,尤其是针对16位内核系列处理器,利用硬件特性程序空间可视性(PSV),允许从程序闪存内访问数据。这一功能通过特殊功能寄存器(SFR)如PSVPAG或DSRPAG实现,将32K闪存页映射到数据地址空间的高32K区域。默认情况下,编译器仅支持直接访问被称为auto_psv空间的一个PSV页,并且使用16位数据指针。 当启用选项`-mconst-in-code`时,编译器会将`const`限定的非auto类型变量放入程序存储器,而所有`const`限定的auto变量则与其他auto变量一同放在堆栈上。无论何时,尝试修改`const`限定的变量都会导致编译错误,因为这些变量是只读的。未初始化的`const`对象同样被视为只读,它们与其他未初始化的RAM变量一起分配空间,但不能被写入。 程序存储器中的对象分配和访问有多种方式。默认情况下,编译器自动将字符串和初始化的`const`变量放置在auto_psv段中,该段映射到PSV窗口。如果使用`-mconst-in-data`选项,编译器则不会使用PSV窗口,这些对象会被分配到基于RAM的变量一起。访问额外的闪存页面可以通过受管PSV访问技术实现,具体细节可在相关章节中找到。 对于程序存储器对象,主要分为字符串和常量对象。默认存储模型中,PSV页固定为1页,即auto_psv存储空间。访问单个自动PSV页非常高效,因为它不需要任何额外的页处理。当需要访问多个闪存页时,需要使用特定的访问方法。 这个用户指南还强调,虽然Microchip的产品通常具有良好的代码保护功能,但代码保护并不能保证100%的安全性,因为可能会有恶意尝试破坏这些保护措施。Microchip持续改进其产品的代码保护功能,并鼓励与重视代码完整性的客户合作。 MPLAB XC16 C 编译器提供了灵活的手段来处理程序空间中的变量和常量,允许开发者在不同存储区域优化常量数据的存放,同时注意保护代码的安全性。开发者应根据具体项目需求选择合适的编译选项和访问机制。