The ROBOTC development team have released a new version of ROBOTC 3.51 that addresses a number of issues that were present and reported by users in 3.50. Below is a list of changes that were made:
- Change joystick button commands to return a short to avoid “int == bool” comparison warning.
- Incorrect calculation of “sizeof” operator for ‘call by reference’ variables. Was returning the size of a single pointer rather the the size of the item!!
- Prevent crash when downloading header file to Emulator.
- Fixed bug in Tetrix motor encoders not reading correctly.
- Update File I/O intrinsic definitions to fix issues with string parameters.
- Operator precedence was changed so that it was all left-to-right order when precedence is equal. Except the assignment operators — +, ++, -+, *=, … are evaluated right-to-left.
- Trinary — improved calculation of expression type to avoid allocating a temp string variable when both true and false sides are “char *”.
- Update “motors and sensors setup to re-enable “encoder equipped” check box for Tetrix 12V motors.
- Add a separate string for “standard models” directory that is different from “sample programs” directory since TETRIX shares the sample programs with NXT but has a different standard models directory.
- Fix issue with VEX LCD assignment. If two ports are inadvertently assigned to VEX LCD only one is active. But removing assignment from inactive port was wiping out the mapping for the active port. Now when second port is assigned, any existing assignment on another port is changed to “uart none”.
- Code generation for char string on platforms that don’t support constant pool was not working right. e.g. “display const char string on VEX PIC LCD” was not working. Compiler was incorrectly attempting to store the string constant into the “constant pool” even through the result value was never used. Fixed.
- Debugger “Task Status” window was incorrectly trying to read address of “variable stack” from VEX PIC. VEX PIC does not support ‘variable stack’ and instead stores everything in global variables (and hence has no recursion). Fixed.
- Prevent IDE crash when trying to format an invalid property.
- Emulator was not automatically stopping motors for NXT and TETRIX.
- Improve definition of the two different enums for “LCD buttons” to make differences clear.
- Create compiler error when negative value is specified for size of array bounds.
- Fix bug introduced with “Matrix Controller” support when servo index name to numeric mapping is incorrect.
- Add new NXT high speed write function to write a single char. Previous opcode only wrote a pointer to an array of bytes and you had to specify the number of bytes to write.
- Tetrix Servo controller — hold servos on user program stop – variable was not working as expected – now fixed.
- Correct intrinsic definitions for ‘nxtWriteRawHS’ and ‘nxtReadRawBluetooth’.
- Cast of “(string *)” was incorrectly calculating the nested “*” level. E.g. “(string *) (char *)” was calculated as if it was “**” (double pointer) rather than “*” (single).
- Prevent IDE crash when closing file from ‘X’ on top right of main frame and debugger is open; the debugger should also be closed at same time. NOTE: Debugger was closed if you used the “Close” command on the file.
- Add code to generate compiler errors for mix of ‘*’ and ‘array index’ in a single expression.
- Add compiler error when trying to dereference (‘*’) an expression that is not a pointer.
Some of these bugs affected my upcoming Driver Suite in a major way, so hopefully now there is nothing standing between releasing it. As I am currently on a business trip, the 3.0 beta 1 Suite is scheduled for release either Monday or Tuesday next week.
You can find the original article here: [LINK]. Your ROBOTC program will inform you of the update or you can check manually from the Help menu.