STM8 前256字节RAM有专用的访问指令,这个要比其它RAM访问要快一些,为此称为RAM的ZERO PAGE
那么编译器是如何确定把全局变量放在ZERO PAGE呢还是放在其后面。编译器提供了存储器模式选项
这个可以在STVD的project -> settings... -> C Compiler 的Memory Models中选择
以小于64KFLASH的器件为例,可以选择Long Stack和Short Stack两种模式,
如果选Short Stack那么编译器默认将全局变量放在ZeroPage,而如果用户需要将全局变量指定到ZeroPage之后那就需要将变量前加修饰符号@near,如:
@near uint8_t g_Array[100];
如果选Long Stack那么编译器默认将全局变量放在ZeroPage之后空间中,而如果用户需要将全局变量指定到ZeroPage内那就需要将变量前加修饰符号@tiny,如:
@tiny uint8_t g_Array[100];
以STM8S003为例,建议大家使用Long Stack模式,在程序中认为访问比较频繁的变量修饰成@tiny将其放到ZeroPage.
从简单易用的角度看stm8的这一点真不如AVR,总会让入门者先是一头雾水,但理解之后也就无所谓了。
|
|