C51 Version 9.05 Product Update
What's New in C51 Version 9.05
- [C51 Compiler]
- Improved: access to bit-field members with size 1 bit. The compiler uses bit instructions to access such bit-field members objects that are defined with the bdata memory type. This is now extended also to structs that are defined with the extern attribute.
- Corrected: Common sub-expression elimination can deliver incorrect values when array pointers are used. Example:
int foo (unsigned char dat[]) {
int len1, len2, ofs;
ofs = 5;
len1 = dat[ofs];
if(len1 > 0x10) return -1;
ofs += len1 + 1; // modify 'ofs'
len2 = dat[ofs]; // 'dat[ofs]' not reloaded, instead value of 'len1' is used
return len2;
}
- Corrected: Wrong code with pointer arithmetic and conversions to long. Example:
unsigned char *p;
unsigned int code a1[10];
unsigned char xdata a2[500;
void foo (void) {
unsigned long r1 = (unsigned long)(p - (a2 + a1[0])); // wrong
unsigned long r2 = (unsigned long)(p - (unsigned long)(a2 + a1[0])); // work around
}
- Corrected: Pointer arithmetic with conversion to 'unsigned long' rejected. Example:
unsigned char xdata *ptr1;
unsigned char xdata *ptr2;
unsigned long i4;
void foo (void) {
i4 = (ptr1 - ptr2); // pointer conversion rejected, instead an error was issued
}
- [LX51 Linker/Locater]
- Corrected: When Linker Code Packing is used with a banking application,segments or the content of segments may get lost. This problem was introduced with C51 Version 9.03.
- [New Supported Devices]
- CoreRiver ADCore200, ADCore210, ADCore220, AmpCore100, ChargerCore2.0, GC230, GC400, GC410, GC81L541A0, GC81L581A0, GC81L591A0, GC89L541A0, GC89L581A0, GC89L591A0, and HallCore110 davices.
- Nuvoton N78E055A, N78E059A, N78E366A, N78E517A, N79E234, N79E235, N79E342, N79E352, N79E822, N79E823, N79E824, N79E825, N79E843, N79E844, N79E845, N79E853, N79E854, N79E855, N79E875, W78E051D, W78E052D, W78E054D, W78E058D, and W78E516D devices.
- Silabs C8051T620, C8051T621, C8051T622, C8051T623, C8051T320, C8051T321, C8051T322, C8051T323, C8051T326, C8051T327, C8051F380, C8051F381, C8051F382, C8051F383, C8051F384, C8051F385, C8051F386, and C8051F387, devices.
- [µVision4]
This C51 release comes with µVision V4.22.00.
What's New in C51 Version 9.03
- [Cx51 Compiler]
- [LX51 Compiler]
- Improved: When using Linker Code Packing the gaps in the BANKAREA are not optimized.
- Corrected: Potential SEGMENT OVERLAPS when using Linker Code Packing on a banking application.
- [New Device Support]
- Atmel AT80C51RD2, AT89LP213, AT89LP216, AT89LP52, and AT89LP6440 devices.
- Infineon XC878LM-13F, XC878CLM-13F, XC878LM-16F, XC878CLM-16F, XC874-13F, XC874LM-13F, XC874CM-13F XC874CLM-13F, XC874-16F, XC874LM-16F, XC874CM-16F, XC874CLM-16F, and XC836MT-1F devices.
- NXP P87C51FA, P87C51FB, P89CV51RB2, P89CV51RC2, P89CV51RD2, P89LPC779, and P87V660X2 devices.
- Silabs C8051F348, C8051F349, C8051T606, C8051T630, C8051T631, C8051T632, C8051T633, C8051T634, C8051T635, C8051F540, C8051F541, C8051F542, C8051F543, C8051F544, C8051F545, C8051F546, C8051F547, C8051F550, C8051F551, C8051F552, C8051F553, C8051F554, C8051F555, C8051F556, C8051F557, C8051F560, C8051F561, C8051F562, C8051F563, C8051F564, C8051F565, C8051F566, C8051F567, C8051F568, C8051F569, C8051F570, C8051F571, C8051F572, C8051F573, C8051F574, C8051F575, C8051F34A, C8051F34B, C8051F34C, C8051F34D, C8051F716, C8051F717, C8051F980, C8051F981, C8051F982, C8051F983, C8051F985, C8051F986, C8051F987, C8051F988, C8051F989, C8051F990, C8051F991, C8051F996, C8051F997, C8051F800, C8051F801, C8051F802, C8051F803, C8051F804, C8051F805, C8051F806, C8051F807, C8051F808, C8051F809, C8051F810, C8051F811, C8051F812, C8051F813, C8051F814, C8051F815, C8051F816, C8051F817, C8051F818, C8051F819, C8051F820, C8051F821, C8051F822, C8051F823, C8051F824, C8051F825, C8051F826, C8051F827, C8051F828, C8051F829, C8051F830, C8051F831, C8051F832, C8051F833, C8051F834, C8051F835, C8051F901, C8051F902, C8051F911, C8051F912, Si1000, Si1001, Si1002, Si1003, Si1004, Si1005, Si1010, Si1011, Si1012, Si1013, Si1014, Si1015, C8051F520A, C8051F521A, C8051F523A, C8051F524A, C8051F526A, C8051F527A, C8051F530A, C8051F531A, C8051F533A, C8051F534A, C8051F536A, and C8051F537A devices.
- Teridian Semiconductors 78M6612, 78M6618, and 71M6543 devices.
- Texas Instruments CC2530F32, CC2530F64, CC2530F128, CC2530F256, CC2531F128, CC2531F256, CC2533F32, CC2533F64, CC2533F96, CC2540F128, and CC2540F256 devices.
- [µVision]
This C51 release comes with µVision V4.14.16.
C51 Version 9.02a
The C51 Version 9.02a product update replaces components of your current Tool Set with the latest versions.
- [Cx51 Compiler]
Improved: access to bit-field members with size 1 bit. The compiler uses bit instructions to access such bit-field members. When objects are defined with the bdata memory type, direct bit addressing is used.
Example:
struct bf { unsigned char b0:1; unsigned char b1:1; };
struct bf a;
struct bf bdata b;
:
if (a.b0 && b.b1) b.b1 = 0;
- [Cx51 Compiler]
Corrected: multiplication long = int * int is potentially incorrect in Dallas 390 mode.
- [Cx51 Compiler]
Corrected: explicit cast to unsigned char was ignored with complex address arithmetic.
Example:
unsigned char far table[256];
unsigned char i, v;
:
v = table[(unsigned char)(16+i+20)]; // index now truncated to 8-bit
- [Cx51 Compiler]
Corrected: when using conditional operators (? :) in complex parameter lists, there is a potential for unbalanced PUSH / POP instructions. This typically creates a application program crash at the function call.
- [C Run-Time Library]
Corrected: the function toint did not detect the value range 0x59 - 0x40 as invalid. Now the function returns -1 for these values.
- [C Run-Time Library]
Corrected: timing of Multiplication Division Unit (MDU) in Evatronix R8051XC2 device is faster and now reflected in the C Library. The MDU timing for int/long multiplication and long division is adjusted.
- [New Supported Devices]
Infineon XC835MT-2F , XC836-2F , XC836M-1F , XC836M-2F , XC836MT-2F , and XC836T-2F devices.
- [Device Simulation]
Corrected: SiLabs C8051F41x devices: SMBus simulation when using I2C generator.
- [Device Simulation]
Corrected: SiLabs C8051F12x devices: automatic page switch for interrupts and timing of timer 2/3/4.
- [Device Simulation]
Corrected: SiLabs C8051F12x devices: on I²C the receive of more than 256 bytes now generates a stop.
- [Device Simulation]
Corrected: SiLabs C8051F36x devices: crossbar did not connect the right I/O signals under some circumstances.
- [Device Simulation]
Corrected: Evatronix T8051: CPU instruction timing.
C51 v9.01
- [New Supported Devices]
Infineon XC822T-0F, XC822M-1F, XC822MT-1F, XC824MT-1F, and XC824M-1F devices.
- [Device Support]
Added: debug support for Infineon XC82X devices.
- [Cx51 Compiler]
Corrected: when MODDA is used and int numbers are multiplied and assigned to long, the result was potentially incorrect.
C51 v9.00
- [µVision4]
C51 now includes the new µVision4 IDE.
- [New Supported Devices]
Evatronix R8051XC(1 DPTR), R8051XC2(1 DPTR), R8051XC2(2 DPTR), R8051XC2(8 DPTR), R8051XC2-A(1 DPTR), R8051XC2-A(2 DPTR), R8051XC2-A(8 DPTR), R8051XC2-AF, R8051XC2-B(1 DPTR), R8051XC2-B(2 DPTR), R8051XC2-B(8 DPTR), and R8051XC2-BF devices.
- [New Supported Devices]
- Nordic nRFLU1P-F16 and nRFLU1P-F32 devices.
- [New Supported Devices]
- NXP P89LPC9361 device.
- [New Supported Devices]
- Silabs C8051F580, C8051F581, C8051F582, C8051F583, C8051F584, C8051F585, C8051F586, C8051F587, C8051F588, C8051F589, C8051F590, and C8051F591 devices.
- [Device Support]
Corrected device settings for Infineon XC888-6FF, XC888CM-8FF, XC888LM-6FF, XC886-6FF, XC866L-1FR, XC866L-2FR, XC866L-4FR, and XC864-1FRI devices.
- [Device Support]
Corrected: device settings for Nordic Semiconductor nRF24E1, nRF24E2, nRF9E5, nRF24LU1, and nRF24LE1 devices.
- [Cx51 Compiler]
Corrected: constant folding of two negative array index values. For example:
unsigned char arr[512];
unsigned int i;
i = arr[i-1-5]; // incorrect in C51 V8: arr[i-4] instead of arr[i-6]
- Corrected: when using the NOAREGS directive, complex arithmetic with nested calls may create incorrect results. For example:
#pragma NOAREGS
int result;
extern char f(unsigned char idx);
result = (f(1)*0x100+f(0)) - (f(3)*0x100+f(2)); // incorrect result. POP destroys value in ACC
- [Lx51 Linker]
Corrected: when using OPTIMIZE(10) or above, there was a potential that common code blocks are called incorrectly. Therefore programs may have operated incorrectly.
- [BL51 Linker/Locater]
Corrected: when using RTX51 user interrupt functions were overlapping with RTX ISR vectors which resulted in a linker warning.
- [BL51 Linker/Locater]
Corrected: data overlaying may not work when the last input module contains an interrupt function; the linker incorrectly issues WARNING 16: main uncalled.
Contact Us
|
|
Supplier Information
|
About Keil:
Keil, an ARM company, makes C compilers, macro assemblers, real-time kernels, debuggers, simulators, integrated environments, and evaluation boards for ARM7/ARM9™/Cortex-M3, XC16x/C16x/ST10, 251, and 8051 processor-based microcontroller families. Products available from Keil include embedded development tools, evaluation software, product updates, application notes, example code and technical support.
|
|