> (2)为什么编译器不自动地开始使用BANK1,而非要我设置呢?等等类似问题。 因为编译器可以让你把各自独立地编译的目标文件连接起来生成代码,不到连接的时候,你不太可能确认使用资源 是否匹配,而在连接的时候再来重新分配变量到另一个BANK里去已经为时已晚。如果代码产生器在产生代码时,不 去考虑变量在哪一个BANK,那么它产生的代码势必是在每一次RAM访问前,都要加上BANK选择和复位的指令-这完完 全全是不可能接受的。 当某一个模块被编译了,此时试图去猜测BANK0是否溢出了几乎是不可能的。-因为一点点小的函数调用表的变化就 会显著地改变变量分配的需求。 基于这些原因,我们得出结论,除了用户自己来指定BANK之外,没有另外可行的变通方法。(3)我看了使用手册但对什么东西放到哪里了还是不很清楚。 > 你可以指导我究竟RAM是如何被组织的吗? BANK0是被用来放任何(非常量)变量,他们包括: 1)局部变量 2) 静态或全局变量,以及没有指定到其他BANK去的变量 3)中断现场保护用的寄存器 4)临时位置(如果芯片有common RAM,这些通常位于这里,译者注:Common RAM即Share Bank,就是相互地址映射的一段RAM,详见单片机数据手册) 任何一个被明确指定BANK的变量将肯定放到那个BANK里去,局部变量(例如,函数里的不是静态的变量)不能被分 配到其他BANK里去 |
欢迎光临 英锐恩单片机论坛,Microchip单片机,模拟器件,接口电路,麦肯单片机,单片机应用交流 (http://enroobbs.com/) | Powered by Discuz! X3.2 |