马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?注册
x
本帖最后由 micdot 于 2015-6-16 10:22 编辑
C51V954.EXE (78,754K) Friday, April 24, 2015
以下为C51 Version 9.54 Release
C51 Version 9.54 Release- [LX51 Linker/Locater]
- Corrected: under some circumstances the LX51 ingnores the NOJMPTAB directive and and throws erroneously the following error:*** ERROR L210: I/O ERROR ON INPUT FILE: EXCEPTION 0021H: PATH OR FILE NOT FOUND FILE: C:\KEIL\C51\LIB\L51_BANK.OBJ
- [A51 Macro Assembler] and AX51 Macro Assembler]
- Corrected: under some circumstances the assembler shows wrong line numbers if an $include file cannot be found. The root cause for this behavior is the erroneous line number generation by the preprocessor.
Example:NAME xxxS SEGMENT CODE RSEG S#line ; The preprocessor generates wrong line numbers if an $include file cannot be found.PUT: MOV A,#x ; The assembler shows these wrong line numbers inside the build output window as part of a warning or error message. RET END
- [OHX51 Object to Hex converter]
Modified\corrected:- The OHX51 creates hex records that crosses 64Kbyte boundaries which is not allowed.
For example: defining a HCONST segment ?HC?UCL with a size of 128Kbyte will cross two times the 64Kbyte boundaries at 0x810000 and 0x820000. Mapfile entry for this segment......800020H 82000FH 01FFF0H BYTE UNIT HCONST ?HC?UCL.....The resulting hex file is wrong at these 64Kbyte boundaries. One HEX record (equates to one line) must not cross a 64Kbyte boundaryine HEX record.....00021 :0200000400807A ; switch to segment 0x80.....04119 :10FFFC00215E5F5E48656C6C6F204169726F686151 ; starts at 0xFFFC and crosses the 64K boundary |||||| ||AAAA -> Address LL------> Record length04120 :02000004008179 ; switch to segment 0x8104121 :10000C00215E5F5E48656C6C6F204169726F686140 ; starts at 0x000C...............08218 :10FFF800726F6861215E5F5E48656C6C6F20416955 ; starts at 0xFFF8 and crosses the 64K boundary |||||| ||AAAA -> Address LL------> Record length08219 :02000004008278 ; switch to segment 0x8208220 :08000800726F6861215E5F5E0A ; starts at 0x0008..... - [Device Simulation]
- Corrected: for Silabs C8051F33x based devices the simulation of the watchdog timer triggers unexpectedly a reset.
- [New Supported Devices]
- CAST
T8051XC3, L8051XC1-515, L8051XC1-320, S8051XC3-C(517), and S8051XC3-C(430). - Silabs
EFM8BB10F2G_A_QFN20, EFM8BB10F4G_A_QFN20, EFM8BB10F8G_A_QFN20, EFM8BB10F8G_A_QSOP24,
EFM8BB10F8G_A_SOIC16, EFM8BB21F16G_A_QFN20, EFM8BB21F16G_A_QSOP24, EFM8BB22F16G_A_QFN28,
EFM8SB10F2G_A_QFN20, EFM8SB10F4G_A_QFN20, EFM8SB10F8G_A_QFN20, EFM8SB10F8G_A_QFN24,
EFM8SB10F8G_A_QSOP24, EFM8SB20F16G_A_QFN24, EFM8SB20F32G_A_LQFP32, EFM8SB20F32G_A_QFN24,
EFM8SB20F32G_A_QFN32, EFM8SB20F64G_A_LQFP32, EFM8SB20F64G_A_QFN24, EFM8SB20F64G_A_QFN32,
EFM8UB10F16G_A_QFN20, EFM8UB10F16G_A_QFN28, EFM8UB10F8G_A_QFN20, EFM8UB11F16G_A_QSOP24,
EFM8UB20F32G_A_LQFP32, EFM8UB20F32G_A_QFN32, EFM8UB20F32G_A_TQFP48, EFM8UB20F64G_A_LQFP32,
EFM8UB20F64G_A_QFN32, and EFM8UB20F64G_A_TQFP48.
- [μVision]
- This C51 release comes with μVision V5.14.1.
以下为C51 Version 9.54 的下载附件(这次使用了百度云盘加密共享的方式,不是是否妥当,如果不妥,请告知):
Keil C51v954_baiduyun.rar
(159 Bytes, 下载次数: 180 )
另:C51V9.54的0xFD问题依然存在,现在引述keil官网的解释以及解决方法(http://www.keil.com/support/docs/2618.htm):GENERAL: COMPILER IGNORES 0XFD, 0XFE, 0XFF VALUES IN STRINGS
Information in this article applies to: - C166 Compiler All Versions
- Cx51 Compiler All Versions
- C251 Compiler All Versions
QUESTIONI have a problem with the interpretation of Russian strings in the Keil C51 compiler. Some Russian characters are using the encoding 0xFD. It looks like this encoding is ignored by the compiler and is not included in the program code. Example: code char RussianString[] = "??? ????";Why does this problem exist and how can I avoid this behavior? ANSWERThe character encodings 0xFD, 0xFE, and 0xFF are used internally by the C compiler. The ANSI standard only requires support for ASCII characters in the range 0x00 - 0x7F. You may insert these characters by using HEX encodings in the string as follows: code char RussianString[] = "My Text" "\xFD";A simple text replacement which replaces all 0xFD characters with the string '" "\xFD' should do the job.
大体意思描述一下:0xFD, 0xFE, 和0xFF是作为C编译器的内部来用的,根据ANSI的标准,只需要支持0x00 - 0x7F即可。但是通过十六进制编码(转义字符\x表示)方式来进行字符串处理之后,那么字符串中所有的0xFD就会被字符串'" "\xFD'来代替了。
|