The output of MCS-51 development software is formatted in Intel OMF-51 (object module format). Such files not only contain information regarding code and data assignments, but also carry information regarding public/external fixups and debug objects. Specific limitations to the OMF-51 are listed below:
OMF51 Limits Per Module | |
Absolute segments | Unspecified |
Relocatable segments | 255 |
Publics | Unspecified |
Externals | 256 |
Local symbols and line numbers | Unspecified |
The restriction of 256 external declarations per module can sometimes pose problems for programmers who use a single global include file which contains all external declarations for all modules in a program. With this technique, every module makes the same external declarations regardless if the symbols are actually referenced in the code or not. But due to the 256 limitation, it is sometimes necessary to divide the single include file into multiple files to fit specific modules. The XREF symbol table of ASM51 list files is useful in determining which externals are declared, but not actually referenced in code. The XREF feature of PL/M51 is not quite as helpful.
MBOL TABLE SIZES FOR ASM51, PL/M51, AND RL51
Symbol capacity in MCS-51 languages is proportional to name length. Using symbol names short in length will allow for usage of more symbols. Symbols are stored in the host machine's internal memory. Disk-based virtual symbols tables are not used.
ASM51
The symbol table capacity for ASM51 in version 2.3 is limited to about 1300 six-character symbols. For programs assembled with the NOMACRO control, the symbol table can contain 2400 six-character symbols. By specifying a percent value with the MACRO control, percent symbol table space can be balancedbetween the assembler and macro-assembler.
PL/M51
PL/M51 version 1.4 has a symbol table capacity of approximately 1600 ten-character names. Included in this count are all 'literal' definitions.
RL51
RL51 version 3.2 can support up to about 10,000 ten-character symbols with 512K DOS memory and 15,000 ten-character symbols with 640K DOS memory.
CONCLUSION
Although symbol capacities of MCS-51 development software can sometimes pose restrictions, most problems can be avoided by using modular program techniques. RL51 has a large symbol capacity and should be used to combine program subsections (modules) together along with their symbols. For ASM51, this means dividing up tasks into smaller functional units and using relocatable segments. The same methodology applies to PL/M51 as well. But keep in mind that with PL/M51 overlaying of data and bit variables is maximized when modules outside the main module never call each other. Such calls are deduced by RL51 via public and external references.