代码段( 段)太长,导致无法在线仿真的解决办法——拆分 段
(本人原创,转载请注明出处: 工程师笔记 , 谢谢)
的代码被编译器放在 段中,当代码越长时, 段就越大。
而一个段只能放在一块连续的 空间中。 较大的 空间有 块,
一块是 长度 ,另一块是 ,长度也是 。如果代码非常长,以
至于 段大到超过 ,超过了任何一块连续 的大小,则无法在
中运行,也就无法在线仿真这个程序了。
这对调试是非常不方便的。
最近有个同事编写了一个 多行的程序,所有代码都放在了一个文件
中, 段
长度为 ,超过了 ,只好采取屏蔽掉一部分代码,调试剩下的那部分
的方法。
但这样还是不够方便。
除了硬件上扩展片外 外,还有两个解决的办法,一个是用 !"#
$%&'&$()%* 把一些函数定位到 以外的段,来达到削减 段长度
的目的。另外一个方法就是拆分 段。而拆分又分为两种方式:手动拆分和
自动拆分,两种拆分均可通过配置 文件来实现。
段由许多+ 组成,每个+ 来自一个 源文件。拆分 段只能
以+ 为最小单位,
也就是说+ 是不能再拆分的。 段中最大的一个 + 是
,',,-)%+(与主函数所在文件同名),是主函数所在的文件
,',,-)% 编译而来。把它单独放在一个段 里,余下的+ 放在
另一个段 中。然后把 段和 段分别定位到 和 中。
这就是拆分的基本思路。
当然了,如果 ,',,-)%+ 的大小超过了 ,这样还是解决不了问题,
这时就需要把 ,',,-)% 中的一部分代码转移到别的 文件中,为主函
数所在的 文件瘦身。
推荐的做法是主函数所在的文件中只有主函数,别的函数都按照功能分别放在
不同的 文件中,这样就不会出现某个+ 特别大的情况了。
第一种拆分方法:手动拆分 段
修改后的 文件如下:请注意加深字体颜色部分。
&%.
/
0o#2#!"!#!3#2
11#111111111##!",#4##5,"#4#1111#
11#%(1111111111111##!",#4#67#5,"#4#81111#
11#9'-$&90):##!",#4#6#5,"#4#991111#
11#$';11111111##!",#4#6979#5,"#4#7<1111#