TASKING 8051 Toolchain v7.0r5

Release Note


  • TASKING Developers' Forum
  • TASKING Home Page
  • TASKING 8051 Support Page
  • TASKING 8051 FAQ
  • TASKING 8051 Application Notes

  •  

    Summary

    This release note describes the changes and new features of all TASKING 8051 products since v6.0r1.

    The main reasons for this release are:


     

    Improved library scan mechanism

    By default the linker only scans once through a library. This means that if an object in a library refers another object which already has been scanned before (without being extracted) it will not be scanned again. The linker now supports the MULTIPASS or MP control to rescan libraries to resolve externals using preceding objects. When using EDE this control is by default enabled, it can be disabled by unchecking the 'Use multipass library rescanning' checkbox under Project | Project Options | Linker | Linking.
     

    New compiler #pragma message and assembler $MESSAGE control

    The compiler supports a new #pragma message that can be used to show messages during the build process. For example:
    #pragma message( "Compiling file " __FILE__ )
    #ifdef SHOW_DATE_AND_TIME
    #  pragma message( " date: " __DATE__ ", time: " __TIME__ )
    #endif


    Also the assembler supports the $MESSAGE control for the same purpose. For example:
    $MESSAGE(Assembling)
    $MSG(Using the abbreviated control)



     

    Added '-banks' compiler option

    When using code bank switching several limitations holds regarding references and calls between segments located in different code banks. In order to easen the linker process a special segment naming convention can be selected using the '-banks' compiler option. From EDE this option is by default selected when code bank switching is enabled. It can be explicitly disabled in the Project | Project options | Linker | Bank Switching tab: 'Use alternate bank switch segment name convention'
     

    New linker BANKGRAPH control

    The linker now supports the BANKGRAPH control. You can use this control to include references and calls between different code banks in the linker mapfile (.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: 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:

    Extended OMF51 output format

    The OMF51 formatter tool is now capable of generating several extensions to the original Intel OMF51 output format. Extensions include: 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