.l51). In EDE this option is enabled by default when code
bank switching and map file generation are enabled. It can be explicitly
disabled in the Project | Project options | Linker | Bank Switching tab:
'Include references and calls between code banks in the linker map file'
New assembler BANK control
The assembler now supports the BANK control. You can use this control
to get the code bank in which the variable is located. Example:
RV SEGMENT CODE
RSEG RV
MOV DPL,#LOW(func)
MOV DPH,#HIGH(func)
MOV P1,#BANK(func)
EXTRN CODE(func)
END
EDE
The default menu layout has been changed, resulting in a more intuitive
menu structure. The former 'EDE' menu has been removed, while a new 'Build'
menu was added. All dialogs that used to be part of the 'EDE' menu have
been subdivided over the 'Project', 'Build' and 'Help' menus. Other dialogs
have been classified differently as well and moved to other menu entries.
If you prefer the menu structure as found in the previous 8051 version,
then you have the option to switch back to the old style by selecting 'TASKING
Classic Style' in the Customize | Menu Layout ... dialog.
New Compiler optimizations
Several new compiler optimizations have been added to the compiler. These
optimizations include amongst others:
-
bitfield handling
-
integer arithmetic
-
sfr word handling
-
invert operator
The compiler now recognizes expressions of type '(x << 8)|y' to merge
2 characters into an integer. Using this type of expression will result in
highly optimized code. This optimization can also be used to merge 2 byte
SFRs into an integer. Below an example how to achieve this, advantage of
this method over implementation of an _sfrword language extension is
the ability to merge 2 SFRs that are not on adjacent addresses.
#define SFRWORD(low,high) (volatile
unsigned int)((high << 8) | low)
_sfrbyte CRCL _at(0x85);
_sfrbyte CRCH _at(0x90);
_inline volatile unsigned int GetCRC(
void )
{
return SFRWORD(CRCL,CRCH);
}
unsigned int x;
void main( void )
{
x = GetCRC();
}
Support for new 8051 derivatives
Several new 8051 derivatives including complete new families are now supported
throughout the toolchain. The following families are now supported:
- Ali Corporation 8051 family
- Analog Devices 8051 family
- AMD 8051 family
- Atmel 8051 family
- Chipcon 8051 family
- CML Microcircuits family
- Cygnal 8051 family
- Cypress 8051 family
- Dallas 8051 family
- Domosys 8051 family
- Goal Semiconductor 8051 family
- Honeywell 8051 family
- Hynix 8051 family
- Infineon Technologies C500/C800 family
- Intel MCS 51 family
- ISSI 8051 family
- Maxim 8051 family
- Mentor Graphics 8051 family
- Micronas 8051 family
- Myson/Century 8051 family
- OKI 8051 family
- Philips 80C51 family
- Sharp 8051 family
- Silicon Storage Technology FlashFlex51
- STMicroelectronics 8051 family
- Siliconians 8051 family
- SMSC 8051 family
- TDK 8051 family
- TI 8051 family
- Triscend 80C51 family
- UTMC 80C51 family
- Winbond 8051 family
- Xicor 8051 family
Extended OMF51 output format
The OMF51 formatter tool is now capable of generating several extensions
to the original Intel OMF51 output format. Extensions include:
-
Type information
-
Symbolic Debug
-
Bank switch information
These extensions will be accepted by most debuggers/emulators available
today. Besides the even more powerfull IEEE-695 format is still available.
ROM Monitor rewritten to C
The TASKING ROM monitor that can be used to debug a target without
requiring an emulator has been rewritten in C. The original ROM monitor was
written in assembly, but due to the large number of differences between
targets became very complex to maintain. Besides the assembly monitor
required resources in many different locations, e.g. for variables it used the bit
space, the internal data space, one of the register banks and the external data
space. The new ROM monitor written entirely in C (even though using some
inline assembly) only uses part of the external data space for its internal
variables. Both the assembly as well as the C monitor are delivered with
the product. The new C ROM monitor can be found in the 'mon' directory,
the assembly ROM monitor can be found in the 'mon-asm' directory.
For projects running under a ROM monitor it is required to stay away from
the resources used by the ROM monitor. E.g. it is essential not to place
any code on the serial vector since that is used implicitly by the ROM
monitor. So for every new project the correct areas have to be reserved.
To easen this task for each ROM monitor an option file is present in
the 'cmon' directory that can be loaded after a new project is generated.
You can load an option file (*.opt) under Project | Load Options.
TASKING Flash/Load Tools
This new version supports flash utilities for the Cygnal 8051 family
(through the Cygnal JTAG wiggler) and for the Phytec 8051 target boards.
Also a loader utility is supported for the Infineon C868 Starter Kit. Both
flash and load utilities can be selected under Project | Project Options...
| Flasher. When a flasher/loader is selected the 'flash' button in the
'build' toolbar is enabled. Pressing this button will directly flash an
absolute IEEE-695, OMF51, Intel Hex or Motorola S-Records file to the
target.
Crossview Pro
Menus and Buttons
The CrossView Pro menus have been restructured to make it easier to find
all the features supported by the debugger. The toolbars of all windows
have been redesigned and now have small buttons by default. It is still
possible to select an enlarged version of the buttons from the File | Options
... | Desktop dialog.
Download and Compare functionality
You can use the new File | Compare Application... dialog to check if an
.abs file matches the downloaded application. This can be useful when you
want to check if the program code has been changed, for example due to
uninitialized pointers. The same check can be accomplished through the
command window with the dcmp command.
Save Profiling Report
It is now possible to save your profiling results. Either you can use the
commands cproinfo and proinfo from the command window or you can press
the Tools | Profiling | Report | Save... button from the GUI to save the
profile report in a file.
General improvements
Further improvements were introduced; for instance you will be warned if
a source is newer than the .abs file.
Static variables within a function can be inspected and a hexadecimal
display option in the Data Window was added.
Furthermore, the performance of the terminal windows has been improved;
scrollling and updating of windows has become much faster.
Added support for Atmel multiple data pointers
Within the Atmel 8051 family 2 types of multiple data pointers are
used. The first using the data pointer selector on SFR 0xA2 (AT8751RC and
AT89C55WD) were already supported, the 2nd type using data pointer selector
on SFR address 0x96 (AT8x53, AT89S53, AT89S4D12, AT89S8252) are now also
fully supported by the 8051 tool set (See also Project | Project Options |
C Compiler | Code Generation dialog)
Added example for the Infineon C868 Starter Kit
For the Infineon C868 Starter Kit an example has been added showing the use
of Pulse Width Modulation. The example project 'pwm868.pjt' in the
'examples\sk868\pwm868' directory uses the PWM capabilities of the C868
to generate different colors using the multicolor LEDs on the Starter Kit board.
Added bypass for DS80C390 erratum #6
From the Dallas DS80C390 errata sheet revision B3 01/19/00:
The DIV AB instruction may return
erroneous results if the A register is accessed immediately preceding the
DIV AB instruction.
The assembler supports an option to bypass this erratum. When enabled
an extra NOP will be inserted before any DIV AB instruction.
Note: the C library is compiled without the assembler bypass option
being enabled. This means that the C library has to be recompiled with
this option enabled. Use the following steps for recompilation:
Select the proper project file for the library to be recompiled. In
case of the standard library for the reentrant memory model this is
'lib/build/clib/c51r.pjt'.
Enable the bypass in the Project | Project Options | C Compiler | Bypasses dialog
Use the 'rebuild' button in the build toolbar to completely rebuild the library
New pragmas page and nopage
To be able to align code segments to a 256 byte boundary the assembler already
supported the PAGE directive. From C this attribute can now be forced using
the new pragma 'page'. To switch off the use of this attribute the pragma
'nopage' can be used.
In the following example, the rom variable 'romdata' will be placed in
a segment with the PAGE attribute.
#pragma page
_rom char rdata[] = { 1, 2, 3, 4 };
#pragma nopage
Note: In some situations the segment definition may be
postponed till later in the code generation process. So it could be
generated after a following '#pragma nopage'. In such situations the
pragma 'optimize t' (tentative declaration) may be required.
Copyright 2002 Altium BV