ROBOTC 3.55.2 BETA Now Available
ROBOTC 3.55.2 BETA is now available for download (link below).Changes from 3.54 to 3.55.1:
• Fix incorrect compiler type checking error when string constant is assigned to a char pointer.
• Eliminate preprocessor string comparisons in Natural Language and replace with "defined(_Target_XXX_) where "_Target_XXX_" are three new system defined preprocessor variables -- "_target_Robot_", "_Target_Emulator_" and "Target_VirtWorld_". Sample programs modified appropriately. Legacy user programs using legacy definitions will still work but will generate a compiler warning about non-standard extension.
• Add registry flag to enable compiler extension to allow preprocessor expressions support for string comparisons. Generate compiler error message if encountered without the flag being set.
• "cast" code generation fix. Previously when cast changed sign of result the 'cast' was applied before expression was converted to 'int' size used during a calculation. So casting a "ubyte" to "int" incorrectly converted it to a "signed char". What should happen is "ubyte" expression gets evaluated into a "int" as part of expression evaluation (all expressions are evaluated at 'int' (or higher) level in "C") and then the cast to "int" has no additional effect.
• NXT/VEX defined as 15000 bytes for Global Variables but Emulator only 7500. Changed Emulator to 15000.
• There are two separate flags for "allow any serial port for communications" -- one for VEX Cortex and one for all other platforms. This was not obvious. Preferences "Environment" tab was only updating flag for non-Cortex; this has been changed to update the appropriate flag based on platform setting. The VEX Cortex flag can also be updated in the "VEX Cortex" tab. Ran through rest of code and made sure they consistently / correctly used these flags.
• Function to extr act numeric "COMxxx". Expanded syntax to support successful parsing of "(COM99)" previously would not accept extraneous characters.
• Add improved Dialog for selecting Communications Port. It uses a list box to display information about the port. Add check box to select any communications port.
• Compiler crash when parsing invalid syntax of '?' expression. Compiler was not handling the case when "NULL" pointer returned from parsing sub-expression. The "NULL" was incorrect.
• Change "undefined procedure (with no parameters)" error message from 'info' level to 'warning'
• Update to XbeeTools for a "char/short" issue
• Conditional Compiler for tUARTs to avoid confusion between uartOne and UART1.
• "Motors and Sensors Setup" for configuring I2C encoders on VEX Cortex was broken. It used to be two columns -- a check mark and a drop down menu for the "encoder sensor port"; this was replaced by single drop down menu as the check mark was redundant. The change was incorrectly implemented; it didn't set the flag that indicated motor was equipped with encoder support. So "#pragma config(motor, ...." line was incorrectly generated. So user programs could not look up the encoder value from the "get encoder value for motor 'xx'" function. This is now fixed.Changes from 3.55.1 to 3.55.2:
* Debugger Panes for "Locals" and "Globals" (especially Globals) was not properly handling updates to 'long' and 'float' variables. Globals was completely broke -- only lower two bytes of 4-byte variables was being updated which broke 'long' and 'float' variables. IN both, 'char' variables were updating a short value -- i.e. overwriting following characters.
* Fix problem with incorrect user code using a "short" variable and "sprintf" format code of "%f". This can crash ROBOTC VM firmware if the short variable is not aligned on a 32-bit boundary. Catch this case and generate an exception instead. Required new firmware for NXT and Cortex which I rebuilt -- but did not up issue firmware version.
* Add additional entries for StringFind for Character Constants and added test program.
* Fix issue for "Motors" tab for Arduino in "Motors a nd Sensors Setup" property sheet. Was incorrectly trying to setup "encoder information for motor", but Arduino platform does not "associate encoder sensor with motor" -- which is currently only a feature for VEX Cortex.
* Redefine datalog opcodes and intrinsics. Legacy datalog incompatible with 3.5x VM operands which split memory variables and intrinsic properties into separate items.Outstanding Issues include:
- VEX PID functionality (we should have a BETA available on Monday/Tuesday of next week)
- Passing "NULL" as a parameter to a "display printing" function (using %s/%d) causes a crash.Download the ROBOTC 3.55.2 BETA here!
*Note that this is a BETA and as such may have bugs and/or issues. If you encounter a bug, please post it in our Bugs and Issues forum
or send us a support ticket via http://www.robotc.net/support/