Keil Logo

What's New in C51 Version 9.55

C51 Version 9.55 Release

Release Date: 14th March 2016

  • [Cx51 Compiler]
    • Corrected: WARNING C182: pointer to different objects sometimes incorrect. Example:
      int xxx[6];
      int (*ptr)[6];
      
      void main(void) {
        ptr = &xxx;      /* The compiler erroneously throws the WARNING C182: pointer to different objects for this assignment. */
      }
      
    • Corrected: constant strings may be stored in the memory class CODE instead of CONST.. For example:
      code char str1[] = "aaaaa";
      code char str2[] = "bbbbb";
      char * arC;
      
      void main(void) {
        arC = str1;
        arC = "xxxxx";
      }
      
      Wrong storage location for "aaaaa", "bbbbb", and "xxxxx".                          Correct storage location for "aaaaa", "bbbbb", and "xxxxx".
      
      ?PR?main?MAIN        SEGMENT CODE                                                  ?PR?main?MAIN        SEGMENT CODE
      ?CO?MAIN             SEGMENT CODE   ---------+                                     ?CO?MAIN             SEGMENT CONST   ---------+
      ?DT?MAIN             SEGMENT DATA            |                                     ?DT?MAIN             SEGMENT DATA             |
          EXTRN   CODE (?C_STARTUP)                |                                        EXTRN   CODE (?C_STARTUP)                  |
          PUBLIC  arC                              |                                        PUBLIC  arC                                |
          PUBLIC  str2                             |                                        PUBLIC  str2                               |
          PUBLIC  str1                             |                                        PUBLIC  str1                               |
          PUBLIC  main                             |                                        PUBLIC  main                               |
                                                   |                                                                                   |
          RSEG  ?DT?MAIN                           |                                        RSEG  ?DT?MAIN                             |
                  arC:   DS   3                    |                                                  arC:   DS   3                    |
          RSEG  ?CO?MAIN   <-----------------------+ Program Code                           RSEG  ?CO?MAIN     <-----------------------+ Constant
      ?SC_0:                                                                             ?SC_0:
          DB  'x' ,'x' ,'x' ,'x' ,'x' ,000H                                                 DB  'x' ,'x' ,'x' ,'x' ,'x' ,000H
      str1:                                                                              str1:
          DB  'a' ,'a' ,'a' ,'a' ,'a' ,000H                                                 DB  'a' ,'a' ,'a' ,'a' ,'a' ,000H
      str2:                                                                              str2:
          DB  'b' ,'b' ,'b' ,'b' ,'b' ,000H                                                 DB  'b' ,'b' ,'b' ,'b' ,'b' ,000H
      
      
      
      
      
  • [LX51 Linker/Locater]
    • Added: in the LX51 map file a new section LINKER CODE PACKING CROSS-REFERENCE shows the usage of common code blocks from the various program segments. For example:
      .....
         21:   if (*line == '+' || *line == '-')  sign = (*line++ == '+');
      002593 EF                MOV      A,R7
      002594 642B              XRL      A,#02BH
      002596 6005              JZ       ?C0009?CSAMPLE2
      002598 D102              ACALL    ?L?COM0001              <--------------------+
      00259A B42D0D            CJNE     A,#02DH,?C0008?CSAMPLE2                      |
      00259D         ?C0009?CSAMPLE2:                                                |
      00259D D131              ACALL    ?L?COM0002              <--------+           |
      00259F 7165              ACALL    ?C?CLDPTR                        |           |
      0025A1 B42B03            CJNE     A,#02BH,?C0010?CSAMPLE2          |           |
      .....                                                              |           |
                                                                         |           |
      ----- FUNCTION ?L?COM0001 (BEGIN) -----                   <--------------------+
      002602 90102C            MOV      DPTR,#line                       |           |
      002605 E0                MOVX     A,@DPTR                          |           |
      002606 FB                MOV      R3,A                             |           |
      002607 A3                INC      DPTR                             |           |
      002608 E0                MOVX     A,@DPTR                          |           |
      002609 FA                MOV      R2,A                             |           |
      00260A A3                INC      DPTR                             |           |
      00260B E0                MOVX     A,@DPTR                          |           |
      00260C F9                MOV      R1,A                             |           |
      00260D 6165              AJMP     ?C?CLDPTR                        |           |
      ----- FUNCTION ?L?COM0001 (END) -------                            |           |
                                                                         |           |
      ----- FUNCTION ?L?COM0002 (BEGIN) -----                   <--------+           |
      002631 90102C            MOV      DPTR,#line                       |           |
      002634 E0                MOVX     A,@DPTR                          |           |
      002635 FB                MOV      R3,A                             |           |
      002636 A3                INC      DPTR                             |           |
      002637 E4                CLR      A                                |           |
      002638 75F001            MOV      B,#01H                           |           |
      00263B 71B8              ACALL    ?C?ILDIX                         |           |
      00263D A9F0              MOV      R1,B                             |           |
      00263F FA                MOV      R2,A                             |           |
      002640 22                RET                                       |           |
      ----- FUNCTION ?L?COM0002 (END) -------                            |           |
                                                                         |           |
                                                                         |           |
      LINKER CODE PACKING CROSS-REFERENCE LISTING                        |           |
                                                                         |           |
      NAME . . . . CLASS SIZE  TYPE   SEGMENT NAMES(ADDR)                |           |
      ===================================================                |           |
                                                                         |           v
      ?L?COM0001 . CODE  000DH PART   ?L?COM0001  ?PR?_ATOI?CSAMPLE2(10025B1H)  ?PR?_ATOI?CSAMPLE2(1002598H)
                                                                         |
                                                                         v
      ?L?COM0002 . CODE  0010H PART   ?L?COM0002  ?PR?_ATOI?CSAMPLE2(100259DH)  ?PR?_GETLINE?CSAMPLE2(100261CH)
      ...
      ...
      
    • Corrected: When using the SEGMENTS directive to order segments, the order was violated (incorrect size optimization). For example:
      Assembler source:
      
      C2 SEGMENT ECODE
              RSEG C2
              T2: DB  0x7F
      
      C1 SEGMENT ECODE SEG
              RSEG C1
              T1: DB  0x7F
      
      C3 SEGMENT ECODE SEG
              RSEG C3
              T3: DB  0x7F
                                                                                                                            defined segment order
                                                                                                                           |---------------------|
      LX51.EXE T1.obj TO T1.abs PRINT CLASSES(CODE(C:0X4000-C:0X8000),ECODE (C:0X4000-C:0X28000),XDATA (X:0X0000-X:0X09FF)) SEGMENTS (C3, C1, C2)
      
      
      START     STOP      LENGTH    ALIGN  RELOC    MEMORY CLASS   SEGMENT NAME
      =========================================================================
      010000H   010007H   000008H   SEG    UNIT     ECODE          C3            -----+--- Wrong segment order.
      010008H   010008H   000001H   BYTE   UNIT     ECODE          C2                 |
      010009H   01FFFFH   00FFF7H   ---    ---      **GAP**                           |
      020000H   020000H   000001H   SEG    UNIT     ECODE          C1            -----+
      
      
      
      
      START     STOP      LENGTH    ALIGN  RELOC    MEMORY CLASS   SEGMENT NAME
      =========================================================================
      010000H   010007H   000008H   SEG    UNIT     ECODE          C3            -----+--- Correct segment order.
      010008H   01FFFFH   00FFF8H   ---    ---      **GAP**                           |
      020000H   020000H   000001H   SEG    UNIT     ECODE          C1                 |
      020001H   020001H   000001H   BYTE   UNIT     ECODE          C2            -----+
      
      
    • Corrected: Using the LAST in the SEGMENTS directive was ignored for linker code packing segments. For example:
      LX51 TC_0.obj, TC_1.obj TO T PRINT CLASSES (EDATA (0X0000-0X03FF), XDATA (X:0X0000-X:0X113F)) SEGMENTS (?PR?TEST2?TC_1,?PR?TEST?TC_1(LAST))
                                                                                                                                             |
      wrong:                                                                                                                                 |
      START     STOP      LENGTH    ALIGN  RELOC    MEMORY CLASS   SEGMENT NAME                                                              |
      =========================================================================                                                              |
      ....                                                                                                                                   |
      000087H   00008EH   000008H   BYTE   UNIT     CODE           ?L?COM0007                                                                |
      00008FH   000096H   000008H   BYTE   UNIT     CODE           ?PR?MAIN?TC_0                                                             |
      000097H   ---       000000H   BYTE   UNIT     CODE           ?PR?TEST2?TC_1                                                            |
      000097H   0000AFH   000019H   BYTE   UNIT     CODE           ?PR?TEST?TC_1             <-----------------------------------------------+
      0000B0H   00011CH   00006DH   BYTE   UNIT     CODE           ?PR?_TESTDUMMYCODE?TC_1                                                   |
      00011DH   00012CH   000010H   BYTE   UNIT     CODE           ?L?COM0002                                                                |
      00012DH   000147H   00001BH   BYTE   UNIT     CODE           ?L?COM0001                                                                |
      000148H   000149H   000002H   BYTE   UNIT     CODE           ?PR?FAIL?TC_1                                                             |
                                                                                                                                             |
      correct:                                                                                                                               |
      START     STOP      LENGTH    ALIGN  RELOC    MEMORY CLASS   SEGMENT NAME                                                              |
      =========================================================================                                                              |
      ....                                                                                                                                   |
      000081H   000088H   000008H   BYTE   UNIT     CODE           ?L?COM0006                                                                |
      000089H   000090H   000008H   BYTE   UNIT     CODE           ?L?COM0007                                                                |
      000091H   000098H   000008H   BYTE   UNIT     CODE           ?PR?MAIN?TC_0                                                             |
      000099H   00009AH   000002H   BYTE   UNIT     CODE           ?PR?FAIL?TC_1                                                             |
      00009BH   000107H   00006DH   BYTE   UNIT     CODE           ?PR?_TESTDUMMYCODE?TC_1                                                   |
      000108H   000117H   000010H   BYTE   UNIT     CODE           ?L?COM0002                                                                |
      000118H   000132H   00001BH   BYTE   UNIT     CODE           ?L?COM0001                                                                |
      000133H   00014BH   000019H   BYTE   UNIT     CODE           ?PR?TEST?TC_1             <-----------------------------------------------+
      
      
    • Corrected: CONST When using the SEGMENTS directive to specify an address, the segment address was moved during linker code packing. For example:
      C-Code snippet:
      #pragma userclass(code = XXX)
      const char code xxx[30] _at_ 0x1234;
      
      LX51 CSAMPLE2.obj TO CSample CLASSES (CODE(C:0X2000-C:0X2FFF), CONST(C:0X2000-C:0X2FFF), ECODE(C:0X2000-C:0X2FFF), HCONST(C:0X2000-C:0X2FFF))
      
      wrong:
      START     STOP      LENGTH    ALIGN  RELOC    MEMORY CLASS   SEGMENT NAME
      =========================================================================
      000000H   000002H   000003H   ---    OFFS..   CODE           ?CO??C_STARTUP?0
      000003H   000019H   000017H   BYTE   UNIT     CODE_XXX       ?PR?GETNUMBER?CSAMPLE2
      00001AH   0000A3H   00008AH   BYTE   UNIT     CODE_XXX       ?PR?_ATOI?CSAMPLE2
      0000A4H   0000B4H   000011H   BYTE   UNIT     CODE_XXX       ?PR?_GETLINE?CSAMPLE2
      0000B5H   0000B6H   000002H   ---    ---      **GAP**
      0000B7H   0000D4H   00001EH   BYTE   OFFS..   CODE_XXX       ?CO?CSAMPLE2?0
      0000D5H   001FFFH   001F2BH   ---    ---      **GAP**
      002000H   002364H   000365H   BYTE   UNIT     CODE           ?PR?PRINTF?PRINTF
      
      correct:
      START     STOP      LENGTH    ALIGN  RELOC    MEMORY CLASS   SEGMENT NAME
      =========================================================================
      000000H   000002H   000003H   ---    OFFS..   CODE           ?CO??C_STARTUP?0
      000003H   000019H   000017H   BYTE   UNIT     CODE_XXX       ?PR?GETNUMBER?CSAMPLE2
      00001AH   0000A3H   00008AH   BYTE   UNIT     CODE_XXX       ?PR?_ATOI?CSAMPLE2
      0000A4H   0000B4H   000011H   BYTE   UNIT     CODE_XXX       ?PR?_GETLINE?CSAMPLE2
      0000B5H   001233H   00117FH   ---    ---      **GAP**
      001234H   001251H   00001EH   BYTE   OFFS..   CODE_XXX       ?CO?CSAMPLE2?0
      001252H   001FFFH   000DAEH   ---    ---      **GAP**
      002000H   002364H   000365H   BYTE   UNIT     CODE           ?PR?PRINTF?PRINTF
      
    • Corrected: Do not show empty segments as overlapping. For example:
      START     STOP      LENGTH    ALIGN  RELOC    MEMORY CLASS   SEGMENT NAME
      =========================================================================
      
      010000H   010007H   000008H   SEG    UNIT     ECODE          C3
      010008H   010008H   000001H   BYTE   UNIT     ECODE          C2
      *** OVERLAP ***                                                  <--- There is no real overlap because the next segment is empty
      010008H   ---       000000H   BYTE   UNIT     ECODE          C1
      
  • [µVisionVision]
    • This C51 release comes with µVision V5.14.2.1.
  Arm logo
Important information

This site uses cookies to store information on your computer. By continuing to use our site, you consent to our cookies.

Change Settings

Privacy Policy Update

Arm’s Privacy Policy has been updated. By continuing to use our site, you consent to Arm’s Privacy Policy. Please review our Privacy Policy to learn more about our collection, use and transfers
of your data.