DIGI INTERNATIONAL
9350 Excelsior Blvd, Suite 700
Hopkins, MN 55343, USA
+1 (952) 912-3444 | +1 (877) 912-3444
www.digi.com
These are the release notes for Dynamic C 10.
Dynamic C 10 is the IDE (Integrated Development Environment) for Digi International's core modules and single-board computers based on Rabbit 4000, 5000 and 6000 processors.
The IDE includes a graphical editor and debugger, a command-line compiler, and a graphical tool (Rabbit Field Utility) for installing compiled binary firmware to a serially-connected device.
- RCM4000, RCM4010, RCM4050
- RCM4100, RCM4110, RCM4120
- RCM4200, RCM4210
- RCM4300, RCM4310, RCM4320
- RCM4400W
- RCM4510W
- RCM5400W, RCM5450W
- RCM5600W, RCM5650W
- RCM5700, RCM5710, RCM5750, RCM5760
- RCM6600W, RCM6650W
- RCM6700, RCM6710, RCM6720, RCM6730, RCM6750, RCM6760
- BL4S100, BL4S110, BL4S150, BL4S160
- BL4S200, BL4S210, BL5S220, BL4S230
-
Debugger issues
-
When debugging a program using either F7 or F8 into or over a call to
kbhit()will cause the debug cursor to disappear. Pressing F7 or F8 two more times will make the debug cursor reappear following thekbhit()call. -
The breakpoint highlight for the closing brace of a function does not display correctly if the brace is not in the first column of the editor window.
-
The debugger currently only supports 128 breakpoints. Setting more than 128 breakpoints will result in the loss of target communications.
-
The debugger does not support assembly language single stepping over function calls that do not return to the instruction following the call such as "_switch". Any attempt to do so will result in loss of target communication. Stepping into the function in assembly is supported, as is stepping over such functions in C.
-
If an
ipsetoripresinstruction is followed immediately by anrst 0x28, the debug kernel will not step over therst 0x28correctly, but will end up in an unexpected location. When either of these instructions are followed by instructions other thanrst 0x28, the debug kernel behaves correctly. -
The Register Contents debug window (F11) doesn't report the correct LXPC value if it's >= 0xFF. It reports 0x0FF as "LXPC: FFF" and leaves the high nibble off of values >= 0x100 (so 0x123 appears as "LXPC: 023").
-
-
Software modules.
RabbitWeb gives a cryptic error message for buffer overflow when using the
print_select()statement. The workaround is to makeHTTP_MAXBUFFERlarge enough to hold all of theOPTIONstatements generated by theprint_select()statement. -
Complex casts
The compiler will not accept multidimensional array types or derivatives thereof as cast expressions, even if the cast expression is a typedef name. Use a union to work around this problem.
-
Advanced 16-bit memory mode CPU bug
The Rabbit 4000 CPU's advanced 16-bit memory mode has a defect which affects ioe instructions (auxiliary I/O, external I/O) and self-timed chip select. The Dynamic C BIOS has been updated to work around this ioe defect on affected boards, all of the RCM40xx family. If absolute top performance is required and the User is certain their application is unaffected by the ioe bug, the work around can be disabled by adding the
__ALLOW_16BIT_AUXIO_DEFECTmacro into Dynamic C's Project Options Defines Box. See the Rabbit 4000 Users Manual Appendix B (errata section) or TN255 for complete details. -
In separate I/D mode, an array declared as
far char bar[] = {0,1,2,3,...};will not compile correctly when the size of the array exceeds the size of the root constant space and will give an error that the '}' character is missing. The work-around is to specify the size of the array as follows:
far char bar[32000] = {0,1,2,3,...}; -
Highlighting a block of text while in Stop mode
In some cases, depending on the specific text, highlighting a block of text can result in a flyover watch which returns a copy of that text in the hint window.
-
Using
#pragma SIZEOF32can result in asizeofproblem for a large struct.Using
#pragma SIZEOF32allows the argument ofsizeofto be up to 4GB but will return an incorrect value without warning or error if the argument involves a struct of size 32K or larger. When using#pragma SIZEOF32, always restore to the default with#pragma SIZEOF16following the use of sizeof. -
Initialized global and static variables and
#GLOBAL_INITexpressions run with a limited stack (256 bytes). Deeply nested functions (includingprintf()) will cause a loss of target communications. -
Cast ternary operator(s) if both values do not have the same type and type qualifiers - example:
condition ? &aFarChar : (far char *)NULL. In the example, if condition is true andNULLis not cast, a near address is erroneously returned. -
As of 10.66, symbols are distinguished using the first 63 characters of the name. Older versions used 31 characters, the minimum per the ANSI specification. If a long symbol name is used as a library module label (i.e., in a BeginHeader statement), the library's .MD1 file will contain the short version of the name, and the module will not be found. For example:
/*** BeginHeader A12345678911234567892123456789312 ***/ extern int A12345678911234567892123456789312; /*** EndHeader ***/ int A12345678911234567892123456789312;will generate the error
line XXX : ERROR MY_LIB.LIB : Undefined (but used) global label A12345678911234567892123456789312.The workaround is to change the timestamp on the library file (e.g., modify it and save it) and recompile. The .MD1 file will be regenerated with the correct (longer) module label. -
More than one
returnstatement in a cofunction will result in unpredictable behavior. -
For
auto int i, the expression(far*)&ishould be(far int*)&i, but the first form will produce confusing error messages:Invalid expression. Missing character ';'. Missing character ')'. Not a pointer, cannot dereference. -
A
c returnstatement in an assembly block can produce an error likeUndefined (but used) global label .DCLAB__ZW00000190in large programs. The assembly block can be ended followed by thereturnstatement in C followed by the remaining assembly in a new assembly block. -
The active status of hardware breakpoints is not retained when a program restarts. Each breakpoint must be modified in some way such as toggling a checkbox so that the “Update” button becomes active.
-
Setting a hardware breakpoint on some internal I/O addresses can lead to a target communication error. Since setting a breakpoint mask to 0xffffff will include all internal I/O address, the address and mask should be set to include only the intended range of addresses.
-
Programs larger than 512K will not compile to RAM successfully on an RCM5450W core module. Compiling such programs to flash works fine.
-
Number of dimensions in array initializer are not checked against the array declaration.
Dynamic C will compile an initializer with too few dimensions without complaining:
// two few dimensions in initializer const static int a[][3][2] = {{11, 12}, {21, 22}};The results are undefined. If there are too many dimensions in the initializer, Dynamic C will indicate an error
} is missing/expected. -
For functions with both a near and far syntax, function help is available only using the unadorned name. For instance, placing the cursor over
_f_memsetwill not find the function help formemset. In order to find function help for a function prepended with either_n_or_f_, such as_f_memset, separate the main part of the function name before pressingCtrl+h. -
A function that returns a struct by value does not work correctly within a cofunction. A work around is to have the function return a static struct by reference and then dereference the function result on assignment in the cofunction, e.g.:
struct point { int x; int y; }; struct point *foop(void) { static struct point tmp; tmp.x = 3; tmp.y = 4; return &tmp; } cofunc void co_func(void) { struct point tmp; tmp = *foop(); // dereference the result at time of assignment printf("cofunction by reference, x=%d, y=%d\n", tmp.x, tmp.y); } void main(void) { struct point tmp; costate { wfd co_func(); } } -
An index variable used in calling an indexed cofunction cannot be auto. The index variable must have static (local) or global storage, e.g.:
#define INDICES 5 cofunc void my_icofunc[INDICES](void) { ; } void main(void) { static int i; while (1) { for (i = 0; i < INDICES; ++i) { costate { wfd my_icofunc[i](); } } } } -
Auto pointers to CoData structures cannot be used in named costatements. The CoData structure pointer must have static (local) or global storage, e.g.:
#define NUMTASKS 5 void main(void) { auto int i; static CoData task[NUMTASKS]; static CoData *ptr2codata; for (i = 0; i < NUMTASKS; ++i) CoBegin(&task[i]); while (1) { for (i = 0; i < NUMTASKS; ++i) { ptr2codata = &task[i]; costate ptr2codata always_on { ; } } } } -
Dynamic C currently does not allow function pointers to return structures by value. The following code snippet will generate an error:
typedef struct { int a; } my_struct_t; my_struct_t (*func_ptr)(); main() { my_struct_t s; s = func_ptr(); } -
Assembly labels within
#asmblocks inside C functions are treated as if they are local C-labels, rather than existing within their own scopes. In the following code, the expected behavior would be an "unknown label" error on thejptofoosince there is no global labelfoodefined. However, the linker associates the local label with thejpinstruction and the code compiles.Note that this behavior only occurs between
#asmblocks within C functions. It does not exist between stand-alone#asmblocks or between blocks in separate C functions.void func(void) { #asm jp foo ; This jumps to the label in the next block #endasm // Some C code #asm foo: ; The jp above lands here #endasm } -
The
strtodfunction's underflow detection fails when converting strings of the following forms and lengths:".00000000000000000000000000000000000001" ".000000000000000000000000000000000000001" . . . ".00000000000000000000000000000000000000000001" ".1e-38 ".01e-38" . . . ".00000000000000000000000000000000000001e-38" -
Dynamic C's assembler does not support embedded C return statements (e.g.
c return;orc return X;) within an asm block that is within a C function. All such occurrences have been removed from standard libraries (i.e. DMA.LIB, FFT.LIB) and no occurrences exist in standard samples code. Custom assembly code with embedded C return statements as described above should be rewritten such that any explicit or implicit return from the C function is done in standard C code. -
Complex macros inside a one-line for-loop may fail to compile, with an internal error (
Internal error: input stream non-existant. Compiler confused. Look for previous syntax error.) that requires Dynamic C to be restarted.Work-around: replace
for (i = 0; i < max; i++){ complex_macro; }with
for (i = 0; i < max; i++){ complex_macro; } -
When compiling an initialized array of unspecified dimension(s) in a nested scope, Dynamic C does not generate a jump over the initializer data, which results in errant execution of the initializer data. One work around is to avoid declaration of such arrays in nested scope. Another work around is to ensure all initialized arrays in nested scope have fully specified dimensions.
Work-around example: replace
while (1) { char *foo[] = { "123", "abc" }; printf("%s %s\n", foo[0], foo[1]); }with
while (1) { char *foo[2] = { "123", "abc" }; printf("%s %s\n", foo[0], foo[1]); } -
The compiler incorrectly throws an error (
Duplicate 'const' keywords not allowed in this context.) if a function contains multiple, non-pointerconstparameters.Work-around example: replace
void foo(const int bar, const int baz) {}with
typedef const int const_int; void foo(const_int bar, const_int baz) {} -
On platforms with an ASIX Ethernet controller (e.g., RCM42xx, RCM43xx), the network stack can get stuck in an infinite loop after executing the sequence
ifdown()/pd_powerdown()/pd_powerup()/ifup(). Issue present since at least Dynamic C 10.60, and might only happen when callingtcp_tick()while interface is powered down, or callingifup()too soon afterpd_powerup(). If this affects you, contact Digi and reference issue DC-300. -
The compiler incorrectly reports errors and warnings as occurring on line 1 if they are beyond line 32,767 of a file. Limit file sizes by creating .LIB modules loaded with
#use, or .H header files loaded with#include. -
Compiler will report
Cannot load object, report to Rabbit.when trying to compile(0 && j == 0)in the code below:int foo(int i, int j) { return (i == 0 || (0 && j == 0)); }This can occur when using constant macros to short-circuit conditionals at compile time. The workaround is to adapt the conditional using the macro preprocessor. In the example above:
int foo(int i, int j) { return (i == 0 #if FOO || (j == 0) #endif ); } -
The "Start" button may be hidden on the main Rabbit Field Utility screen when using certain Windows Display Scaling values (seen at 125% but not 199%).
-
The command-line compiler fails on project files that contain multiple .C files. As a workaround, compile a single .C file that references either libraries (with the
#usedirective) or .H files (with the#includedirective) for additional code. -
When generating .HEX files, the compiler incorrectly pads the length to a multiple of 32, using bytes from the previous block of 32 bytes. The generated .BIN file is the correct length and contains a complete firmware image.
-
Shared SPI port code (using
SPIgetSemaphore()andSPIsetSemaphore()) was intended for high-speed SPI devices using separate chip select inputs. If sharing the TX/RX signals with an async serial device at a lower baud rates, you will need to set the baud rate to 460800 before releasing the semaphore. It's possible that just setting TAT1R to the correct value will work as well, but changing the baud rate is a reliable workaround.
Reminder: When opening a project in a new version of Dynamic C,
update the "Include Path" tab in the Project Options to use the
new Dynamic C directory. (Or change it to .\include to always
use the current compiler's include directory.)
If updating an existing installation of 10.72D or earlier via the Dynamic C 10
GitHub repository, you should
manually apply the changes in ucos2.patch, found in the Dynamic C
installation directory.
If using I2C with Dynamic C 10.72B on Rabbit 6000 products, you must update
your calls to I2CRead() and I2CWrite() to pass the slave address
in bits 1-7 instead of bits 0-6 of the first parameter. This release
restores compatibility with software-based I2C from Dynamic C 10.72A
and earlier. In addition, the APIs for I2C_ReadFromSlave() and
I2C_WriteToSlave() now include an index parameter so I2C_ReadFromSlave()
can send a START, SLAVE_WRITE, INDEX, START, SLAVE_READ sequence for
efficient reads. If necessary, use the new CC_REV compiler macro to
conditionally compile code so it can work with new and old APIs.
If updating iDigi-enabled applications to Dynamic C 10.72B or later, you
should update all IDIGI/idigi references to CLOUD/cloud and replace
#use "iDigi.lib" with #use "Device_Cloud.lib". All of the iDigi
libraries, APIs and samples were renamed to match the (then) current
"Device Cloud" name for that service. iDigi.lib remains with macros
mapping old names to new ones.
Digi recommends testing the new release in a controlled environment with your application before you deploy firmware to production devices.
Get the help you need via our Technical Support team and online resources. Digi offers multiple support levels and professional services to meet your needs. All Digi customers have access to product documentation. firmware, drivers, knowledge base and peer-to-peer support forums.
Visit us at https://www.digi.com/support to find out more.
Note that the bugfix for DC-466 below is included in the Dynamic C
10.72F installer, but a change to UCOS2.LIB is included as a patch
in the GitHub repository due to licensing issues with the uC/OS-II
code. View ucos2-patch2.patch for instructions on how to apply it.
- None
- DC-466: Preserve ordering of pointer and alternate pointer registers when switching tasks to prevent corruption of AES state on Rabbit 6000.
- Return sock_write() errors in sock_puts() instead of ignoring them.
- In RIO_SBC.LIB's get/set_block APIs, don't limit options to the first pin's configuration.
- Document "Known Issues" #34 and #35.
This is a recommended release.
Note that the bugfix for DC-391 below is included in the Dynamic C
10.72E installer, but included as a patch in the GitHub repository
due to licensing issues with the uC/OS-II code. View ucos2.patch
for instructions on how to apply it.
- Add sample with default calibration constants for BL4S2xx SBCs.
- Add
Samples/RCM4200/Serial_Flash/SFLASH_ERASE.Cto completely erase serial flash.
- DC-319: Only cache ARP info for unicast UDP frames (ignore broadcast/multicast) in anticipation of responding.
- DC-391: Usage of
OS_TASK_OPT_STK_CLRwithOSTaskCreateExt()would erase an extra byte before the stack, and leave out the last byte of the stack (seeucos2.patch). - DC-428: Increase TLS Record Limit from 16KB+53 to 16KB+256 (maximum specified in TLS 1.3).
- GITHUB-16: Fix
X509.LIBbugs parsing BasicConstraints (2.5.29.19). - GITHUB-17: Increase
SSL_MAX_HANDSHAKE_SIZEto allow 4096-bit key in client key exchange. - GITHUB-19: Fix
I2CRead()length calculation inI2C_DEVICES.LIB. - GITHUB-20: Correctly reference far pointer in
httpc_set_extra_headers(). - GITHUB-23: Fix field in
Samples/RemoteProgramUpdate/pages/upload.zhtml. - GITHUB-25: Don't allow expiration of existing ARP entry in
router_add(). Ensures that we don't flush entries for routers added viaifconfig()'sIFS_ROUTER_SET. - Create Function Help (
CTRL-H) forMP_SIZEmacro (SSL/TLS related). - Document command-line compiler errors with project files containing multiple C source files as "Known Issue #33".
- Fix reporting of write errors in
Samples/RemoteProgramUpdate/upload_firmware.c.
This is a required release for Wi-Fi products, and recommended for all others.
The primary focus of this release is to address the Key Reinstallation Attacks (KRACK) against WPA2. Dynamic C includes two versions of wpa_supplicant -- v0.2.8 used when WPA_USE_EAP isn't defined and v0.5.11 for when it is. This release updates to the last stable release of each series and patches them to block the KRACKs.
The release also addresses routing problems present on RCM66xxW modules that enable both Ethernet and Wi-Fi interfaces.
- DC-349: Fix WPA2 KRACK
vulnerability.
- CWE-323 - Reusing a Nonce, Key Pair in Encryption.
- CVE-2017-13077 - reinstallation of the pairwise key in the Four-way handshake
- CVE-2017-13078 - reinstallation of the group key in the Four-way handshake
- CVE-2017-13079 - reinstallation of the integrity group key in the Four-way handshake
- CVE-2017-13080 - reinstallation of the group key in the Group Key handshake
- CVE-2017-13081 - reinstallation of the integrity group key in the Group Key handshake
- CVE-2017-13082 - accepting a retransmitted Fast BSS Transition Reassociation Request and reinstalling the pairwise key while processing it
- CVE-2017-13084 - reinstallation of the STK key in the PeerKey handshake
- CVE-2017-13086 - reinstallation of the Tunneled Direct-Link Setup (TDLS) PeerKey (TPK) key in the TDLS handshake
- CVE-2017-13087 - reinstallation of the group key (GTK) when processing a Wireless Network Management (WNM) Sleep Mode Response frame
- CVE-2017-13088 - reinstallation of the integrity group key (IGTK) when processing a Wireless Network Management (WNM) Sleep Mode Response frame
- DC-255: Updated change from 10.72B release related to IP address
reuse during PPP handshaking. Users can re-enable the disabled
feature by defining
IPCP_ENABLE_IPADDR_REUSE. - DC-337: Store correct value for
freq_divider. Was previously one less than the correct value which would affect baud rate calculations. - DC-344: Fix error when setting default Wi-Fi router when also using Ethernet.
- DC-345: Fix behavior of
IFG_WIFI_MODEoption toifconfig(). - DC-346: Fix default route when using both Ethernet and Wi-Fi.
- DC-357: Document compiler error (aborts compilation of valid code) as "Known Issue #31".
- Document Rabbit Field Utility UI issue when using Display Scaling as "Known Issue #32".
An I2C-related change from 2017-08-30 was erroneously tagged as included in the 10.72C release. The shipping installer for 10.72C did not include the commit and it first appeared in this release.
This is a recommended release.
- Adds support for RCM4320 variant -- an RCM4310 with 1MB of SRAM for firmware (instead of 512KB) and a 4MB serial flash for storage (instead of 1MB).
- Updated
sdflash.libto support SDHC cards from 4GB to 32GB. Note that Dynamic C still does not support FAT32. When using SDHC cards you must format them on the Rabbit with up to four FAT16 partitions, but you can still read and write them on Mac/Windows/Linux. Email Jim.Pause@digi.com if interested in FAT32 support in Dynamic C. - Updated
FAT16.libto work on SDHC cards (larger than 2GB). - Defined a
CC_REVmacro as 'C' for use in compiler version checks. - Added RCM6xxx support for Panel-Mount Keypad/Display Unit (Digi part number 20-101-0502).
- Updated TLS to send Server Name Indication (SNI) in ClientHello. Includes updates to HTTP, SMTP and POP3 client libraries.
- Updated X.509 certificate handling to process
subjectAltNameextension, allowing for improved hostname matching in TLS client connections.
- Addresses compiler errors with
I2C_HW.LIBfor Rabbit 6000 boards. - HTTP client now sends correct Content-Type on non-blocking PUT/POST.
- Moved duplicated
MODBUS_CRC()frommodbus_{master,slave}.libtoCRC16.LIB. - Updated FTP server samples to work with default FileZilla FTP client settings.
- DC-295:
Get_Stack_Size()returns correct size instead of smallest stack size. - DC-304: After DHCP fallback, further DHCP discovery would fail.
- DC-310: Revert commit that incorrectly processed slave address in
I2CRead()andI2CWrite()calls on Rabbit 6000 hardware with DC 10.72B. - DC-317: Correctly set interrupt level when
RS232_INT_LEVEL != 1. - DC-322: Don't hard-code keysize in
AES{en,de}cryptStream_CBC()and_CBC_XMEM()functions. Now works correctly for AES-192/256. - DC-332: Fix Rabbit 6000 link recovery, broken in pre-release 10.72C.
- DC-334: Ignore non-fatal "warning" TLS alerts instead of aborting connection.
- GITHUB-13: Fix return value of
_n_strcpy(). - GITHUB-14: Fix bug in
httpc_skip_headers()for non-blocking connections. - RCM-143: Only call
dhcp_tick()if interface is up. - RCM-143: When Ethernet powered down, link status should always be "down" (changed for Rabbit 6000 and ASIX-based hardware).
- Disabled incomplete I2C slave mode for Rabbit 6000 hardware.
- Please note that while all Rabbit MAC addresses have previously used an OUI (manufacturer code) of 00:90:C2, future products may ship with an alternate OUI. Please be proactive and replace any code that requires that byte sequence.
- Added "Known Issue" about compiler errors/warnings in files that exceed 32,767 lines.
This is a recommended release.
This release builds upon the TLS 1.2 update in Dynamic C 10.72A,
by adding support for SHA384 and SHA512 hashes in TLS communications
and X.509 certificates. It also brings back support for TLS 1.0 in
outbound client connections to support legacy servers that have not
implemented TLS 1.2 yet. Details in function help for TCPCONFIG,
tls_set_flags(), httpc_set_tls(), pop3_set_tls(), and
smtp_set_tls().
There's an important update to ASIX.LIB which should finally
resolve all outstanding link recovery issues.
- Adds support for SHA384/SHA512 hashes:
- New library and updated sample.
- TLS update to support for SHA384 and SHA512 hashes.
- X.509 update to support sha224, sha384 and sha512 signatures.
- Adds support for falling back to TLS 1.0 on outbound (client) TLS connections.
- Adds source code and tools for building binaries in BIOS directory (cold loaders and pilot BIOSes).
- Adds sample for run-from-RAM boards to download a copy of the boot flash via HTTP. Useful for firmware recovery and analysis of flash contents.
- Improves boot time on 6000-based hardware (now < 1 second) when
_FAST_BIOS_LOADmacro defined in Project Options [DC-269]. - Replaces the outdated SSL Certificate Creation GUI (in
Utilities/SSL_Utilities) with command-line OpenSSL version 1.0.2j. Added instructions on using OpenSSL to create certificates, which should allow for more control over key size and choice of hashing algorithm.
- Corrected compilation errors when
X509_VERBOSEorWPA_VERBOSEdefined. - Fix bug in
http_finderrbuf()affecting variable names longer thanSSPEC_MAXSPECcharacters. - DC-216: Update I2C for Rabbit 6000 hardware.
- DC-255: Disabled IP address reuse during negotiation of PPP connections with other active interfaces (e.g. Ethernet or Wi-Fi).
- DC-260: Improve ASIX Ethernet link recovery by allowing more time to establish link after turning PHY back on (8s vs. 2s).
- DC-264: IIS servers require
signature_algorithmsextension in TLS Client Hello. - DC-264: Increase TCP receive buffer size to account for additional TLS 1.2 overhead.
- DC-267: FTP server incorrectly stripped leading slash from absolute pathnames in STOR, MKD and RMD commands.
- DC-275: Disable attempted lease renewal for permanent DHCP leases.
- DC-280: Fix for serial connections with 2 stop bits. First byte was always sent with 1 stop bit.
- DC-281: Correct invalid JSON generated by
web_iter_next()(RabbitWeb). - DC-283: Repeatedly setting a gateway then deleting all routers no longer fills APR cache.
- DC-285: Fix possible overflow when calculating PMKSA reauth timeout for WPA/WPA2 Enterprise Wi-Fi connections.
- DC-287: Fix for FTP client uploading files using a datahandler instead of a fixed-length buffer (broken by DC-129 in Dynamic C 10.72A).
- DC-290: Ensure that
SSL_set_private_key()always returns error upon failure to parse key. - GITHUB-7/DC-265: Handle Ethernet netport interrupt on 6000-based hardware so transmit errors don't hold buffers forever.
- RCM-77: Improve Ethernet link recovery on 5000/6000-based hardware.
- RCM-121: Fix buffer overflow caused by large packets on WPA/TKIP (but not WPA2/CCMP) networks.
- Update samples using
SSL_Cert_tto store certs in far memory and not on the stack. - Optimization from petermcs to reduce code size and speed execution
of
sha256_process()inSHA2.LIB. - DC-268: Changed some function variables in FTP server from "static" to "auto".
- DC-284: Updated
firmware_info_tstructure to include compiler revision.
This is a recommended release.
The big change for this release is that Dynamic C is now an Open Source project on GitHub. It includes source code to the previously-encrypted Wi-Fi and SSL libraries, and the license was changed to MPL 2.0 (Libraries) and ISC (Samples).
This release was made as 10.72A since it does not include changes to
the compiler and only contains modified libraries, samples and
documentation. It uses shortcuts (.lnk files) to launch the compiler
with a command-line parameter of -c A, forcing the compiler to
identify itself as 10.72A and use registry entries for version 10.72A.
The installer is also smaller, due to the removal of an outdated XCTU
installer, the "XBee GPIO GUI" utility/source (designed for sample
programs removed in the 10.70 release), and a Microsoft .NET installer
(dotnetfx.exe) required by that utility.
The latest version of XCTU is on Digi's website.
-
Includes library and utility programs to write a System ID Block to a device's flash (
Utilities/Write_ID). -
Incorporates NAND flash library patch (40002851_A, 2012-12-01) for Micron/Numonyx/ST NAND256W3A (32MB) devices used in new hardware.
-
Incorporates Serial Flash update (40002882_A) for revision E of 45DB641 chips used in new hardware.
-
Add
httpc_set_extra_headers()API toHTTPC.LIBfor user code to add headers to outbound requests. -
Upgrades TLS (Transport Layer Security, aka SSL/HTTPS) implementation from 1.0 to 1.2.
- Is compatible with modern web browsers.
- Removes support for insecure SSLv2, SSLv3 and TLS 1.0 protocols.
- Removes support for insecure RC4 cipher and MD5 digest.
- Automatically enables required AES128_CBC cipher.
- Defaults to 2048-bit RSA keys (previously 1024-bit).
- Adds optional AES256_CBC cipher, SHA256 digests, and support for SHA256 signatures in X.509 (TLS/SSL) certificates.
- Fix conversion of RabbitWeb multi-select 32-bit enum to text. (contributed by titobrasolin).
- Initialize
struct tmin_atodt()before use to avoid random hour/minute/second values affecting result (contributed by titobrasolin). - Fix return value of
asix_ioctl()for unsupported features. Was previously returning uninitialized value from stack instead of 0. - DC-6: Fix rebalancing of HTTPS Rx and Tx transport buffers, enabling HTTPS upload of large files.
- DC-10: Fix PPP baud rate calculations, corrects problem with 9600 baud.
- DC-19: ASIX PHY link-fail recovery now works after extended cable disconnection (20 minutes or more).
- DC-27: Improved
SPI.LIB'sSPIWrRd()function's Rabbit 6000-specific work around. - DC-31:
HTTP.LIB'szhtml_handler()function now correctly handlesHttpState(unsigned)extlenvalues greater than 32767. - DC-55: Fixed multiple stacks (as when using e.g. uC/OS-II multi-tasking) misplacement bug affecting Dynamic C versions 10.62 through 10.72, inclusive.
- DC-78: Fix memory leaks in
idigi_put()andidigi_upload(). - DC-117:
PPP.LIB'sLCPsendEchoReply()now echoes the request's non-zero length data. - DC-129: Fix
FTP_CLIENTuploading files smaller than TCP socket buffer size. - DC-130: SNMP: Correctly store zero-length octet strings and prevent xmem window wraparound (in all data formats).
- DC-215: Fix keepalive handling in
tcp.lib. - DC-200: Update some incorrect macro names (contributed by Richard Pletcher).
- DC-200: Update start of write buffer when adjusting TCP buffer split between read/write. Possible fix for broken HTTPS Upload (contributed by Richard Pletcher).
- DC-207: Correctly render SSI/RabbitWeb (shtml/zhtml) tags spanning multiple 256-byte blocks in files on FAT filesystem.
- DC-217: Add full HDLC support for Rabbits 4000-6000, including sample program.
- DC-220: Added test for non-zero length in
tcp_write(), for retransmission. - DC-224: Fixed corruption of register
ixaround_pb_freecall inSERLINK.LIB. - DC-235: Corrects an error where the HTTP server would fail to find
files on FAT filesystem due to stale data in
SSpecFileUnionstructure allocated from a pool of memory. - DC-241: Function
sdspi_process_command()inSDFLASH.LIBwasn't releasing the SPI semaphore (contributed by Mark Leichty). - DC-248: Update
HTTPS_CLIENT.cto follow URL redirects and correctly printfarhostname fromhttpc_Socket. - GITHUB-1: Correct invalid
strtol()andstrtoul()behavior. - GITHUB-2: Fix
%gformatting error for floats smaller than 0.1. - RCM-7: Don't reset TCP keepalive timer on reused connections.
- RCM-109: Fix issue preventing module from joining WPA mixed-mode (TKIP/CCMP) networks.
This is a recommended release.
-
FCC-labeled versions of RCM6600W family boards are locked to the Americas region code.
-
The following new options are available in the command line Rabbit Field Utility (
Utilities\clRFU.exe):-i pathname Specify application binary image file, -i BinPath -si Print formatted contents of System ID block -ma Print formatted MAC address -bi Print Board ID --boot-flashtype flash_type Specify flash_type as either parallel or serial --boot-memorywidth memory_width Specify memory_width (in bits) as either 8 or 16 --boot-ram-selectenable mb0cr_value Specify mb0cr_value in the range [0,7] /CS0:3 in bits 1:0, /OE0:1 (== /WE0:1) in bit 2Previously, the command line RFU required that its first parameter must be the path name of the binary image to load to the Rabbit target board.
Now, when the new
-i pathnameoption is not specified, it is possible to check Rabbit board information via the new-siand/or-maand/or-bioptions without loading a binary image to the Rabbit target board. -
The Rabbit Field Utility, after successfully loading a binary image onto a Rabbit target board, now automatically starts program execution.
RabbitBios.chas been updated to provide the following three behavior options after the RFU has started program execution:-
Default behavior. When neither
RFU_BIN_RUN_IMMEDIATELYnorRFU_BIN_WAIT_FOR_RUN_MODEare defined, a BIN program image successfully loaded by RFU 4.72 or later will run BIOS code only and then will wait in an idle loop until a hardware reset occurs. Following a hardware reset and with the programming cable disconnected, BIOS code and user code will execute as usual.This mode of operation most closely emulates the behavior of RFU versions prior to 4.72. It can also be useful in test fixture code, for example, where a test fixture can control at least one of the
SMODExlevels as well as theRESETlevel, and manual disconnection of the programming cable is inconvenient or undesirable. -
When
RFU_BIN_RUN_IMMEDIATELYis defined in Dynamic C's Project Options' Defines tab, a BIN program image successfully loaded by RFU 4.72 or later will run both BIOS code and user code immediately after loading, with the programming cable still connected. With the programming cable disconnected, BIOS code and user code will execute as usual.This mode of operation is enforced when Dynamic C's debug kernel is enabled. It can also be useful in test fixture code, for example, where a test fixture can not or does not control the
SMODExlevels and manual disconnection of the programming cable is inconvenient or undesirable. -
When
RFU_BIN_WAIT_FOR_RUN_MODEis defined in Dynamic C's Project Options' Defines tab, a BIN program image successfully loaded by RFU 4.72 or later will run BIOS code and then pause in an idle loop, waiting for the programming cable to be disconnected. As soon as the programming cable is disconnected, user code will begin to execute. With the programming cable disconnected, BIOS code and user code will execute as usual.This mode of operation can be useful in test fixture code, for example, where a test fixture can control at least one of the
SMODExlevels and manual disconnection of the programming cable is inconvenient or undesirable.
-
- The
Lib\Rabbit4000\NandFlash\nflash.libdriver library has been updated with support for Micron/Numonyx/ST NANDxxxW3A nand flash devices. Previously supported nand flash devices, used on RCM4000 and RCM4050 boards, have been discontinued and are no longer available. As of 01-Dec-2012, new production RCM4000 and RCM4050 boards will have a Micron/Numonyx/ST NAND256W3A (32MB) nand flash device installed. Custom applications which use nand flash, whether based on RCM4000, RCM4050 boards or a custom nand flash board design, should be recompiled using Dynamic C 10.72 in order to support the new, increased selection of small-block nand flash devices. - The EXCEPTION(x) macro is no longer used in any standard Dynamic C code and is now deprecated. Please refer to the associated deprecation comments in ERRORS.LIB for more information.
- iDigi access via a PPP serial port can now be hosted on an
alternate parallel port by defining one of
IDIGI_PPP_USE_PORTDorIDIGI_PPP_USE_PORTEbefore#use idigi.lib.
- Defect #41708. Prevented possible program hang and possible
false-positive file transfer success result in
ftp_client.lib. - Defect #41912. When
HTTP_CUSTOM_HEADERSis defined and used, an incorrect buffer offset calculation results in corrupted HTTP header buffer content. - Defect #42073. The
digOutConfig_H()function inBLxS2xx.LIBnow returns the expected 0 result on success. - Defect #43173. Dynamic C's run time error reporting now
consistently reports the return address on the stack when
exception()is called.
Release Notes Part Number: 93000751
