ROBOTC.net Blog  

ROBOTC News

Archive for the ‘Releases’ Category

Official Release of ROBOTC 3.60!

without comments

ROBOTC 36

 

We are very excited to announce that today is the first day of Spring and …. the first day of ROBOTC 3.60! ROBOTC is the premiere robotics programming language for educational robotics and competitions. ROBOTC is a C-Based Programming Language with an Easy-to-Use Development Environment. We are really proud of this release and can’t wait to hear what you think! Remember, we could not do this without your support and feedback. We hope you’ll continue to share your comments with us, either in the forums or on our Facebook or Twitter page.
 

Some of the key enhancements are:

  • Added support for proxy server when activating ROBOTC (Proxy Support guide can be found here).
  • Add watchdog timer support to VEX Cortex to alleviate processor crashes that can occur with static (more information on this issue can be found on the VEX IME Product Page).
  • Fixed a bug in the NXT color sensor that now allows you to read individual RGB values.
  • Updated with the latest version of the 3rd party sensor drivers for NXT. (Thanks Xander!)
  • Updated Curriculum Tables included for Robot Virtual Worlds.

See below for the more detailed changelog and download ROBOTC 3.60 here!

ROBOTC Hangout
 

To celebrate the official release, we will be having our first Google Hangout! Tim Friez, John Watson, and Xander Soldaat will be there to discuss the new features and answer some of your questions. To tune in live, visit ROBOTC.net/hangouts at 2pm EST tomorrow (Thursday, March 21.)

—————————————————————————————————————-

3.59 to 3.60 BETA Changelog

VEX:

  • New Standard Models Added for PLTW.
  • Update VEX Cortex I2C interrupt handler to handle case where interrupt for last received character is not processed until STOP signal has already been sent.
  • Add parameter to I2C Device Driver (VEX Cortex) to indicate whether being called for a “timer tick” or for a “message is now complete”. Add a few more statistics to the error collection.
  • Increase VEX Cortex I2C message timeout to 6 milliseconds from 3.
  • Start sending VEX Cortex I2C polling messages immediately after last poll has finished. Improves I2C responsiveness for VEX Cortex.

LEGO:

  • Xander’s 3rd Party Driver Suite updated to version 3.3.1

Arduino:

  • New firmware conditional compiles to eliminate the get/set property opcodes for ‘long’ and ‘float’.
  • Arduino only. “Copy opcode from flash to RAM” performance improved.
  • On Arduino, sensor initialization incorrectly assumed as sensor types had the extra “sensor buffer” structure. But the extra buffer is only linked for complicated sensor types so RAM was being overwritten. Fixed.

General:

  • Updated application and desktop icon quality.
  • Fix “Multiple overloads match” error introduced with change that did proper validation of pointer expression with point procedure parameter variable.
  • Improved validation of procedure parameter matching for function overloads. Previously when parameter was a pointer, only checked to confirm that calling expression was also a pointer. Check was extended to also (correctly) match on the type of pointer as well.
  • Could not change “check array bounds” in Compiler Code
    cialis

    Optimization tab. The issue was that after changing the check mark the “code optimization type” would be recalculated and then the “optimization type” radio buttons updated. Array bounds checking is not used in determining the optimization type; but in setting the type it is modified. So the changed check mark was being accepted and then software was overwriting. Fixed.

  • Split “auto save” into two individually settable flags: (1) to auto save source files before compile and (2) auto save files when application exits.
  • Incorrect code optimization involving ‘struct’ variable offsets and perhaps other cases. For the assignment instruction “<variable2> is assigned address of <variable1>” compiler was replacing references to “<variable2> with “<variable1>. This optimization should only occur for “simple assignments” of “<variable2> = <variable1>”. Fixed.
  • Change ‘nSysTime’ and ‘nPgmTime’ intrinsic variables to “unsigned”. ‘unsigned’ intrinsic variables were being converted to ‘signed’ when used in comparison expressions generating a warning regarding mixed ‘signed’ / ‘unsigned’ comparison. Fixed.
  • Upper range check for “array bounds check” opcode used “>” instead of “>=” in comparison allowing ‘one past’ array size as valid.

3.54 to 3.59 BETA Changelog

VEX:

  • Add watchdog timer support to VEX Cortex. This will allow the VEX Cortex User Processor to “restart” automatically once the processor crashes/is halted. Useful for any potential static issue that may cause the User Processor to “crash”.
  • Change watchdog implementation from “windowed” watchdog to standard watchdog (no window, reset any time). Increase watchdog timeout to 0.75 seconds.
  • In Debugger Motors display the last motor was not always properly updated. Fixed.
  • Enable emulator for VEX PIC. Fix subsequent bug with “Motors” debugger display for VEX PIC locking up IDE when emulator is enabled; this bug should be limited to VEX PIC Emulator only.
  • VEX PIC downloading was failing when master firmware was out of date. Getting stuck in a repetitive loop that wasn’t exiting. Fixed.
  • VEX PIC was not executing user programs. Bug was that “start of flash file system VTOC” needed to be aligned on 4-byte boundary. Previous change had added a 1-byte field to the header preamble and there was not a corresponding 3-byte file added for VEX PIC. ARM platforms worked OK. This may also have broken Arduino (i.e. any 8-bit) platform).
  • Added a Conditional Compile flag for tUARTs to avoid confusion between uartOne and UART1
  • 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.
  • User configurable UART setup was screwed up for the platforms whose “uart 0″ is fixed as non-configurable and usable only for system communications port to PC — i.e. VEX Cortex, VEX PIC. The ROBOTC IDE was storing the data in the persistent data table (at start of flash file system) offset by one entry. I.E. data for “uart 1″ on VEX Cortex was stored in “uart 2″, etc.

LEGO:

  • NXT color sensor read RGB individual values broken with pointer implementation. Change “getMemoryParmXXX” function calls to “getCommonParamaterValueXXX” function calls. Check rest of firmware for same mistake.
  • New feature for 3rd Party Sensor Driver Suite to set the two digital I/O lines on NXT sensors. Added two new sensor types (sensorCustom, sensorCustom9V) for this along with two new property intrinsic variables to set I/O line direction and values; these intrinsic variables are bit masks (2-bits) for the two lines.
  • “setPixel” intrinsic (and corresponding “clearPixel” and “invertPixel”) take “unsigned” parameters. But implementation was using “signed” parameters and not properly range checking if parameters were negative. If negative, then should do nothing. Instead they were incorrectly wring to invalid buffer address which eventually caused a firmware crash.

Arduino:

  • Fix issue for “Motors” tab for Arduino in “Motors and 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.

General:

  • Added Support for Proxy Server when activating ROBOTC – Users can set Proxy preferences under “Detailed Preferences – General – Environment”.
  • Incorrect generation of compiler error message when double pointer (i.e. “**”) is used.
  • “Print” a range of pages was not working when the starting page was not ’1′. Fixed.
  • Remove incorrect error message from error “Assignment between two different pointer types” when one side of ‘=’ is a ‘void *’.
  • Compiler was incorrectly generating error message for “Expected a pointer expression in a pointer expression with ‘++’ or ‘-+’ operand. Compiler was incorrectly checking to verify the right operand was an integer value.
  • Compiler was incorrectly generating error message for “Invalid pointer expression” in a pointer expression with ‘+’ or ‘-’ operand. One operand of the expression must be a pointer and the other operand must be an integer (without implied conversion of a pointer to an integer). Compiler was incorrectly checking for the integer — the expression incorrectly had a “!” in it!
  • Change code generation of ‘var arg’ for pointers to be consistent with standard C — i.e. the value of the pointer is placed in the argument. This may result in an additional instruction generated when argument is a ‘string’; previously RobotC got too cute trying to save this extra instruction which only worked for “%s” format codes but was broken for “%d” on a pointer.
  • In ‘sprintf” implementation for “%s” and “%p” format codes– change from  “get Address of parameter” to”get value of parameter” to match corresponding change in compiler code. Also minor cleanup of “%s” and “%p” format codes.
  • Assignment expressions of “<char * variable> = <char constant> were generating compiler error because the “<char constant>” was evaluated as a “string” type. Added code in “get expression type” to check for this and not generate error as the compiler auto converts “string” to “char *” during code generation.
  • Fixes an issue with the Live Start Page and “check for updates” that may have caused crashes.
  • Improved validation of pointer expressions. Fix bug in calculating expression type of pointer expressions like “<ptr sub-expression> + <numeric constant>”; the result was (always?) incorrectly set as “long *”? Also added check that “=” of pointer is from a pointer of the same type – otherwise generate error message.
  • Fixed consistency in implementation of “random” intrinsic property.
  • Eliminate compiler error message in constant expression evaluation of sub-expressions using “*” operator. If either of the two operands is ‘zero’ then result is zero regardless of whether the other operand is a compile time constant.
  • Do not generate additional errors — “too many parameters” specified — when procedure is “compiler generated undefined symbol”.
  • When switch between “real robots” and “emulator”, the function that calculates “size of RAM pointer variable” was not being called. It adjusts between 2-byte (VEX PIC, Arduino) and 4-byte (Emulator, VEX Cortex, NXT) pointer sizes. No issue with VEX Cortex and NXT as they only use 4-byte pointers. But a problem with VEX PIC and Arduino where real robots use 2-byte RAM pointers! Added the appropriate call to function setup.
  • Small code optimization for “postfix –”/postfix ++” operators to avoid temporary. In some cases they can be simplified to prefix operands.
  • Incorrect initialization of static variables in “inner scope” for local procedure. They were initialized every time inner scope block was accessed rather than once on program startup.
  • 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.
  • Add additional entries for StringFind for Character Constants and added test program.
  • Redefine datalog opcodes and intrinsics. Legacy datalog incompatible with 3.5x VM operands which split memory variables and intrinsic properties into separate items.
  • Firmware for all platforms now call “datalogHandlerInit()”. Conditional compile will define as NULL macro if a platform does not support Datalog. Datalog support is now conditionally compiled via “bHasDatalog” define rather than hard-coded as NXT only.
  • Fix incorrect compiler type checking error when string constant is assigned to a char pointer.
  • Fix bug in check for “is this a preprocessor string comparison expression”.
  • 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 an “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.
  • Function to extract 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.

Written by Cara Friez

March 20th, 2013 at 2:58 pm

New Versions of RVW Curriculum and Competition Tables

with one comment

The Robot Virtual World team has a fresh round of updates available for you. We’ve listened to your feedback and have made some changes to our Curriculum Companion, Sack Attack, and Ring It Up virtual worlds. Read on for more details!

What’s new in the Curriculum Companion 2.2.4:

  • Adjusted the NXT – Obstacle Course table to more closely meet the level specifications
  • Adjusted the VEX – Robo Slalom 2 table to give more room between the lines and obstacles
  • Adjusted the Camera 2 View of the VEX – Minefield Retrieval Challenge

What’s new in VEX Sack Attack 1.5.1:

  • Resolved a bug where motor values were being overwritten

What’s new in Ring It Up 1.5.1:

  • Resolved a bug where motor values were being overwritten
  • Adjusted robot models to drive straighter
  • Adjusted sensor and encoder behavior
  • Improved the gripper-ring interaction behavior

Thanks again for the feedback, and keep it coming. You can post it to the Robot Virtual Worlds section of the ROBOTC Forums.

Written by Jesse Flot

November 19th, 2012 at 4:54 pm

FTC Ring It Up and VEX Sack Attack v1.50 Now Available!

with 2 comments

Following up from an earlier post, new versions of the FTC Ring It Up and VEX Sack Attack Virtual Worlds are now available!

In version 1.50 of Ring It Up, all arm, wrist, and gripper motors now include encoders, allowing you to get feedback and implement precise control over the robots. We’ve also swapped the Compass Sensor for the Gyroscope, which was highly requested by FTC teams. New Sample code  for the encoders and gyroscope is installed with the world.

 

In version 1.50 of Sack Attack, we’ve added encoders to the arm motors on all of the robots, and a potentiometer to the scooper motor on Scooperbot, giving you very precise control. All robot models have also had the Compass sensor replaced with a Gyroscope, better aligning them with the real world VEX system. As with the Ring It Up world, Sample code for all of the new functionality is included.

We genuinely appreciate all of the feedback and comments we’ve received about these worlds, and we hope that these changes show that we’re listening. Keep the feedback coming!

Adding support for all of the new inputs required a significant update of our back end, so these versions require ROBOTC 3.54 or later to be installed. Happy programming!

Written by Jesse Flot

November 5th, 2012 at 1:33 pm

Posted in NXT,Releases,VEX

Tagged with , , , ,

ROBOTC 3.54 Update Now Available!

with one comment

The ROBOTC development team is happy to announce the release of ROBOTC 3.54. This new version adds a number of new features and numerous bug fixes from user reports. Existing ROBOTC 3.xx users can download a free update from inside of the ROBOTC software (Help – Check for Updates) or from the ROBOTC.net website.

In addition to ROBOTC 3.54, the ROBOTC Development team is excited to announce support for PID with the VEX Cortex system (using motors with integrated motor encoders). The new VEX PID functionality will be available in a public BETA to be released in the very near future.

The latest update to ROBOTC also includes a number of new features for Robot Virtual Worlds. The new update includes new support many more motors, encoders and sensors. Look for an update for your favorite virtual worlds in the near future to take advantage of this great new functionality.

A summary of the major changes are below:

LEGO/TETRIX:

  • Support for MATRIX Robotics “Move to Encoder” in NXT firmware using the nMotorEncoderTarget functionality.
  • Fix TETRIX motor control. “Move to encoder position” functionality was not working correctly.
  • New functionality for I2C test program to optionally create message log traces for I2C ‘write’ and ‘read’.
  • TETRIX user defined servo names were not being properly setup by compiler. Fixed.
  • nxtDisplayRicFile intrinsic was broken. Auto downloading of files from PC was disabled. Both are fixed.
  • Xander’s 3rd Party Sensor Drivers (from BotBench.com) are now updated and compatible with ROBOTC 3.54. The new driver are included in the NXT Sample Program’s directory.

VEX Cortex/PIC:

  • Fix bug related to ‘char *’ and ‘string’. It was introduced with fix for “playSoundFile” not working. “playSoundFile” is now working for the Cortex.

General ROBOTC:

  • Support for “Classic Mode” – This mode will disable the “variable stack” and treat all variable as “Global Variables” like ROBOTC used to before version 3.50. This setting is under “view – preferences”.
  • Enhance directories for “Sound” files. There are now three possible choices — “common files” directory, “platform specific” directory and “user specified” directory. Implemented separate “Preferences” tab for “sounds”.
  • Add new “Motors and Sensors Property Page” to configure size of “datalog” and “debug stream” buffers. Applicable to super user level only.
  • Clear highlighted execution line when “Debugger” closes. Previously the line of current execution was left highlighted.
  • Add support for “mouse wheel” with “Debug Stream Window”.
  • Add command to “compile all source files in specified directory. Add separate pane to retain the new “multi-file compilation” errors. The normal error window is erased on next compile and you’ll likely want the multi-file results to hang around.
  • Support for multiple user defined directories for compiler include files. Split “Detailed Preferences” into multiple property sheets when not menu basic and multiple tabs to display.
  • Instead of hiding command for invalid debugger pane during Emulator/Virtual Worlds, the command is shown – When opened a message box will display indicating that window is not supported under emulator/virtual worlds.

ROBOTC Compiler and Other Fixes:

  • Incorrect calculation of expression type of form <condition> ? true : false. Expression type was incorrectly calculated as a “integer type” rather than a “boolean type”. Fixed.
  • Fix type in calculating binary expression numeric type.
  • Fix incorrect calculation of expression types involving float constants. They were being set to “integer” type.
  • Changed a few intrinsic procedure parameters from ‘int’ to ‘short’.
  • Incorrect calculation of compile time constant code was resulting in unnecessary code generation for a complex, but constant value, expression.
  • “Terminate expression parsing priority” comparison was effectively  “>=” instead of “>”.  Priority was being screwed up so that expressions “A + B – C” was generating code for “A – (B + C)”
  • A few cases of “compile time constant” expressions values were not detected by compiler resulting in run-time code calculation for constant expressions. Specifically “0 / XX” is always zero regardless of ‘XX’ value. Also, constant expression of form AA = <numeric one> – <numeric two>” was generating code for run-time calculation even though could be calculated at compile time. Fixed.
  • VM opcode uses 16-bit unsigned constant. But compiler was checking if 16-bit SIGNED value was in range.
  • Incorrect compiler error message about array index out of bounds is possible when index is expression like “<constantVar> + numeric constant>”. The code for checking array bound range was only looking at “<constantVar>” and not including the <numeric constant>”. This is fixed.
  • Fixed an error that did not mark precompiled headers as invalid if the precompiled source file had any errors from the previous compile attempt.
  • Created separate Sample Program Root folders when in Virtual Worlds mode.
  • Benign. Better support for type checking “void” and “void *” expressions to eliminate incorrect compiler warnings.
  • Fix code generation for ‘string’ types. There were issues with “const string” variables having improper memory allocated. Improve code generation for assignment of “&” (address of) operator to avoid an unnecessary temporary.
  • Eliminate legacy code that re-ordered syntax tress to optimize code generation for numeric. This was not “standard C” compliant because it re-ordered the order of how expressions were evaluated. Code generation is nearly as optimal except something like “X = 5 + y +6″ will separately generate instructions to add ’5′ and ’6′ rather than a single add of ’11′
  • Better implementation of “type checking on string expressions”. Old implementation was occasionally generating incorrect compiler errors.
  • Add support (in emulator only) for invalid pointer calculation in “get address of parameter” opcodes. It performs a range check to ensure calculated values are in range. This is not a complete check for invalid pointers but will catch many occurrences of unassigned pointers.
  • Code generation for “large constants” (i.e. doesn’t fit in two bytes) was broken. Fixed.
  • Incorrect calculation of “assign “&’ value to variable”. Bug recently introduced with string fixes.
  • Improve code generation for ‘char string constants’.
  • Add error message when no parameter is specified for nMotorEncoder/Motor/SensorValue/etc.
  • Fix a few small issues in Licensing System for oft-used cases.
  • Add compiler error message when no “main task” is defined.
  • Add compiler error message that “&” is snot supported as part of a ‘cast’ qualifier. This is a C++ feature and not found in ANSI C.
  • Fix bug in code generation for “goto XXX;” statement. Compiler optimization may not emit the unconditional branch and code generation was not handling the case of  a NULL pointer that resulted.
  • Fix code generation problem with large constants (i.e. >16 bits) assigned to long variable. Compiler was incorrectly trying to generate code for optimized short forms (i.e. 16-bits or smaller parm index).
  • “Events” no long work. Delete the sample program that illustrates them.
  • Incorrect calculation of operator parsing priority for “&” (address of unary op) which should be ’3′. Instead it was using the priority for ‘&’ (bit and) which is priority ’10′.
  • Fix incorrect code generation when assigning ‘float’ expressions to ‘int’ (char, short or long) variables.
  • Fix compiler code generation for expressions using pointer subtraction — “<pointer> – <pointer”. also fix “<pointer> – <number>”
  • Fixing an issue when a license is in the “clock rolled back” state and needs to be reset using a 30-day reset key – previously was not updating the “clock rolled back” state.
  • Compiler does not handle ‘const string kConfigName = “FTCConfig.txt”;’ properly. Changed to ‘string kConfigName = “FTCConfig.txt”;’.
  • Fix recent bug where “*” in declaration of type “typedef OBJ *POBJ” was being discarded. Extend typedef parsing to support declaration like “typedef unsigned char ubyte, *PUbyte”; i.e. change single declaration to a comma separated list.
  • Debugger window for NXT Remote Screen in emulator was not properly recognizing the remote buttons. The message sent to emulator should have been a mask of buttons and instead was a index of a single button. Fixed.
  • NULL char in middle of char string constant — e.g. “abc\0def” — resulted in incorrect storage by compiler into constant pool. Only the chars up to the NULL were being stored. Fixed.
  • Char arrays whose array dimensions were initialized with empty bounds were incorrectly assigned one byte too large. The trailing NULL on the end of the char string constant was being included in the array dimension.
  • Token scanner was not properly handling ‘\ddd’ special chars where ‘d’ is octal digit. This is now fixed and the standardized format for hex digits of ‘\xhh’ is also accepted.
  • Complete implementation of new registry toggle to optionally automatically close start page on first user compiler. Also added as a command to the menu “View -> Preferences -> Close Start Page on First Compile”.
  • Compiler was not parsing postfix “++” and “–” properly when they followed an expression. It worked fine on expressions with simple variables — “structVar.NN++” or “pStructVar->NN++” but didn’t work for more complicated expressions like “((TStruct *) &strucVar)->NN++”. It now handles the complicated expressions.
  • Fix incorrect calculation of “useless expressions” for binary opcodes. Compiler detects ‘useless’ expressions and does not generate code for these. It was incorrectly flagging binary “+”, “-”, … operations as useless which is incorrect if one of the parameters has side effects like being a procedure call or an expression like “++” or an expression containing a “=” operator.
  • Compiler crash when “++” or “==” were to expressions that didn’t immediately resolve to a symbol. e.g. “++((&g_obj)->n2);”.
  • Fix code generation for expression like “(&OBJ)->n1″. Was throwing compiler error and generating incorrect code.
  • Clear Debugger “Local Variables” pane when user program is finished or executing (vs suspended). When executing, don’t know which local variables (on stack) are valid.
  • Expanded declaration support for statements like “int A, * B, *C, D;” where A and D are “int” and B and C are “int *”
  • Signed / Unsigned type fixes for pointer variables. Allow “const string” procedure parameters to be matched by char constants (e.g. “ABC”).
  • Fix issue with compiler indicating reference variables are only “read” but not “written”.
  • Compiler was incorrectly assigning the ‘signed’ type of pointer variables to “unsigned” (i.e. the signed value of a pointer) rather than the desired type. Formatting routine for this was also broken.
  • Ignore “find best procedure fit” parameter array checking when “void *”. “Void *” will match any pointer regardless of arrays.
  • Improved calculation of expression result types for binary opcodes.
  • Intermediate expressions were always converted to ‘signed’. Now if both operands (e.g. A + B” are unsigned then the expression result is also unsigned.
  • Calculating best fit procedure was not checking array bounds of parameters for matching indices when the parameter was a pointer variable and an array variable. Fixed.
  • “cast” operator now preserves signed type of typedefs that it references. Previously this information was lost.
  • ‘signed’ and ‘unsigned’ now work properly when used in a “cast”.
  • ‘char strings’ when used as arguments to ‘sprintf’ were broken. Fixed.
  • Eliminate some overly aggressive warning messages about mixed expressions of numeric and ‘enums’. Standard C does not perform this level of checking and allows much more liberal mixed mode without warnings/errors.
  • Better support for arrays. Allow variable to be declared with arrays that is based on a typedef that also specifies arrays. Previously arrays could only be declared in one “item”. Array bounds were not checked for integrity (i.e. the bounds match) when validating procedure parameters and calculating best fit procedure when multiple procedure overloads.
  • Improved generation of “&” (address of) code.
  • Improved type checking to allow equivalent but differently declared operand types to match. Previously had to be exact match.
  • Generate compiler error for ‘&’ operator applied to a “property” (motor, servo, encoder, sensor) variable.
  • Generate compiler error for ‘&’ operator applied to a numeric constant.
  • Fix code generation for expressions like “char *ptr2 = buffer;” where ‘buffer’ is a implied pointer (e.g. a array of char). Previously code generation was assigning the contents of the first element of the array to “ptr2″ rather than the address of “buffer”.
  • If the previous line triggered an “indent” — like a “if (xxx)” or “else” statement then next line was auto indented and when “{” is entered want to “undent” the auto indent. Add check for this case.
  • Minor bug in calculation constant expression with unary ‘-’ with a constant numeric parm. Fixed.
  • Code optimization for conditional branches with trinary opcodes where the trinary condition is a compile time constant.

Written by Tim Friez

November 3rd, 2012 at 2:15 pm

RVW Sneak Peek!

with one comment

We want to thank everyone who has been using our Robot Virtual World software and providing valuable feedback. Just so you know we’re listening, here are some of the major improvements that will be coming soon!

We had to do an overhaul of our infrastructure, but our VEX Sack Attack and FTC Ring it Up competition tables now support encoders on each joint! Here’s a screenshot of the Sensor and Motor Debug windows – look at all those inputs and outputs!

FTC Ring it Up!
Every NXT and TETRIX Motor on the robots is now equipped with an encoder. Due to several requests, we’ve also replaced the Compass Sensor with a Gyroscope! (Click the picture to enlarge)

VEX Sack Attack
Like the Ring it Up table, we’ve added encoders to the “shoulder” motors on Scooperbot and Clawbot. We also added a potentiometer to the scooper on Scooperbot, and Gyroscopes on all three of the robot models! (Click the picture to enlarge)

These are just some of the major improvements we’ve made in the competition tables. We’ve made lots of other great ones that you’ll just have to wait to see. :)

Keep an eye on our blog for their public availability, scheduled for the very beginning of November.

Written by Jesse Flot

October 25th, 2012 at 5:26 pm

Posted in NXT,Releases,VEX

Tagged with ,

Check out the new RVW Level Builder Video!

with one comment

We’ve just produced an exciting video that shows off the new RVW Level Builder! Check it out to see how easy it is to get started with the powerful new software.

Download the initial version of the software, here. For more information on the Level Builder, visit this page.

Written by Jesse Flot

September 26th, 2012 at 2:37 pm

Posted in General News,Releases

Tagged with ,

ROBOTC 3.51 Update – Now Available!

with 3 comments

The ROBOTC Development team is proud to announce an update to ROBOTC  - Version 3.51 for the LEGO Mindstorms, VEX Cortex and PIC, Arduino, and Robot Virtual World platforms is now available! The new ROBOTC 3.51 update is free-of-charge for ALL existing ROBOTC 3.0 license holders. This build fixes a number of the issues reported by end users – A full change log is below.

Change log for ROBOTC 3.51 (since version 3.50):

  • 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.

Written by Tim Friez

September 20th, 2012 at 7:45 pm

Robot Virtual World Level Builder v. 1.0 Now Available!

with 3 comments

The project that you’ve all been waiting for is here at last! We are thrilled to announce that our first version of the Robot Virtual World Level Builder is now available. Configure your own levels out of a wide selection of classroom-themed assets: balls, cylinders, boxes, walls, line tracking tiles, and more. Challenge yourself, or share your levels with students, classmates, or teammates. It’s a free download for all ROBOTC for RVW users, so what are you waiting for?


Once you have the Level Builder installed, you can launch it within ROBOTC by going to Window > Open RVW Level Builder Utility. (Note that you must have ROBOTC 3.50 or newer installed, and that Virtual Worlds must be selected as your Platform Type.)


The Level Builder will appear with two options: CREATE and PLAY.

  • Use CREATE to configure your own virtual world level out of classroom themed assets.
  • Use PLAY to program a virtual robot to complete a level generated in CREATE mode.


In CREATE mode, you’re presented with a blank 12′x12′ table just waiting for you to fill it with objects.

  • Drag-and-drop cubes, cylinders, balls, walls, and line tracking tiles onto the table to configure your level.
  • Use the PROPERTIES panel to adjust the orientation of the objects.
  • Zoom in and out on the table using the slider in the bottom right.
  • Your virtual robot will always start on the START tile, facing out.
  • Be creative!!!

Once you’ve configured the table to your heart’s content, save it, and press PLAY.


From there, you’ll be brought to the Level and Robot selection screen.

  • SELECT LEVEL will automatically be populated with the table that you just configured.
  • Additional demo levels are included in the download.
  • Choose from several available robots, each with their details listed on the screen.
  • Press START LEVEL to load your level with the currently selected robot.

Your level will load with the robot that you selected.

  • Compile and Download ROBOTC code to solve the challenge.
  • Switch quickly between BUILD MODE and LEVEL SELECTION as you create your perfect level.
  • USE the “WASD” keys to easily check out the level before writing code or passing it on to your students or fellow classmates.

More instructions, details, and videos are coming soon! We would love to hear what you think of the Level Builder, so let us know! Any feedback and suggestions are welcome. Most of all, have fun!

Need help getting up and running with ROBOTC for RVW? Check here for setup instructions. Not already a ROBOTC for RVW user? Download a free 60-day trial right now.

Written by Jesse Flot

September 19th, 2012 at 5:07 pm

RVW Update: VEX Sack Attack v1.2.1 Now Available!

without comments

Attention all VEX teams! We just released a substantial update to this year’s VEX Sack Attack virtual world. Download it here, or on the RVW Level Packs download page. Here’s what’s new:

New Robot: Clawbot

  • Clawbot features a 4-wheel, 2-motor drive system, an arm motor, a gripper, and the full array of sensors. Best of all, it’s fully programmable in ROBOTC!
  • Additional sample code for Clawbot is installed with the update, and can be downloaded here.

Pre-loads and Automatic Scoring

  • Both Gripperbot and Scooperbot can be pre-loaded with a sack! You can control what side the robot starts on, whether it gets a pre-load, and enable the autonomous duration all from the main menu.
  • Scoring is fully implemented in this new version.
    • Earn normal points from sacks, bonus points from bonus sacks, and even more bonus points from the autonomous bonus and “parking” your robot before time runs out.
    • A cool, new timer and scoreboard keeps track of the match in the top-left corner of the window. Compete with your classmates or teammates to see who can get the highest score before time runs out!
  • Driver Control loads are also implemented once the autonomous period ends. Introduce them into the playing field by clicking on the green sack icons in the top-right corner.

Sensor View

  • Ever wonder why your Ultrasonic sensor “sees” the values that it does? Enable the new Sensor View to see what’s triggering the Ultrasonic sensor and the heading of your compass.

Additional Enhancements

  • We’ve improved the robot-sack interaction on all of the robots.
  • The lighting and contrast of the game have been enhanced, making it easier to grab and score the sacks.
  • Lots of small tweaks and adjustments.

To view the original post for the VEX Sack Attack virtual world (complete with video), visit this link.

Written by Jesse Flot

September 19th, 2012 at 11:16 am

ROBOTC 3.50 Now Available!

with 4 comments

The ROBOTC Development team is proud to announce that ROBOTC 3.50 for the LEGO Mindstorms, VEX Cortex and PIC, Arduino, and Robot Virtual World platforms is now available! The new ROBOTC 3.50 update is free-of-charge for ALL existing ROBOTC 3.0 license holders. Download today and try out all of the new features and enhancements available in ROBOTC 3.50!

Change log for ROBOTC 3.50 (since version 3.08):

MAJOR UPDATES:

  • Full ANSI-C support to support pointers, recursion, and stacks with an updated compiler and updated robot firmware.
  • New and Updated Debugger Windows:
    • “Local Variables” to monitor variables in the current task or function.
    • (Note: Local variables are only available when your program is suspended)
    • “Global Variables” to monitor variables available to your entire program.
    • “Call Stacks” to monitor function calls in the currently selected task.
  • Updated Documentation and Wiki (www.robotc.net/wiki) – Constantly Updating!
  • Support for Standard C commands – sprintf(), sscanf(), support for character arrays, unsigned variables, etc.
  • Support for the Arduino family of controllers (Uno, Mega, Mega 2560) with future support and expanded functionality for the Arduino Leonardo and Due controllers.
  • Updated Robot Virtual Worlds support to include additional sensors and motors.
  • Improved Robot Virtual Worlds performance to simulate more realistic physics and robot behaviors.
  • Support for the new MATRIX building system with the NXT.

Robot Specific Fixes:

  • NXT I2C sensors were incorrectly initializing clock and data lines as outputs when first configuration. They were correctly left as inputs after first message was sent. Change was to initialize as inputs. Before change, the first I2C message on an empty port will incorrectly appear to succeed.
  • Ignore HiTechnic Textrix Motor Controller spurious encoder counts. I.E. if encoder value read is hex ‘FF80xxxx’ then force a reread. Always accept the re-read value.
  • Eliminate Z-Axis from VEX joystick window as is unused.
  • Arduino boards now support controlling LEDs from PWM pins.
  • Arduino boards now will read zero when connecting analog to ground.

Interface Updates/Fixes:

  • Add “Show Current Program Counter” button to Debugger.
  • Add new template for “New File”. All new programs will start with a task main structure. This template can be modified by the user (it lives in  /Sample Programs/Platform/Templates)
  • Always force “Save As” for all template files. Before the files were being saved in a default directory.
  • Allow any serial port to be used with VEX PIC systems.
  • Allow user entered blank (empty) lines before first “#pragma config(” lines. Currently generates a compiler error.
  • Improve placement of related compiler generated errors to appropriate line numbers.
  • Fix bug where “Motors and Sensors Setup” did not work on empty files.
  • Properly restore floating “Debugger Panes” when Debugger is invoked.
  • Changed Checkmarks to Radio Icons for many menu items. This shows a “dot” instead of a “check mark” in the menu icon field.
  • Created tooltip strings in resource file for all missing commands.
  • Prepare to add two new Debugger panes to display “Breakpoints” and “Bookmarks”. Based on the existing “Compiler Errors” pane architecture. The new panes are displayed but the content is still empty.
  • Better synchronization of breakpoints between “Source File” and “Disassembly Listing”. Previously when breakpoint was added/removed in one window the corresponding change was not properly made in the other window. Now the breakpoint ICONs are always refreshed whenever a window is “Activated” (i.e. made topmost).
  • Add two new menu commands for “increase indent” and “decrease indent”.
  • Tweak “auto close breakpoint hit” message box implementation. Add a check mark to the dialog.
  • Add new “Compile OR Compile+Download” toolbar.
  • Debug “Task Status” window — minor enhancements.
  • FONT name was not being updated in Preferences “Font” tab correctly. Fixed.

Compiler and Command Updates/Fixes:

  • Pointer support. New functions positioning for improvements in the dereference (“*”) and address of (“&”) unary operators.
  • New “#pragma debugWindows(…)” to specify a list of Debugger Windows that should be opened.
  • Add new intrinsic function “DebugStreamClear” to allow programs on robot to clear the debug stream.
  • Support for “Implied Pointers” in functions.
  • Fixed compiler priority for binary and unary versions of ‘&’, ‘*’, ‘+’ and ‘-’ operators.
  • Support for unsigned longs.
  • Add new intrinsic function for “round”.
  • Added support for ‘atan2′.
  • Allow ‘struct’ pointers as valid function return types.
  • Fix issue in ‘struct’ declaration causing a random memory overwrite in ROBOTC IDE.
  • Support pointer variables for ‘++’ and ‘–’.
  • ‘sizeof’ operator now accepts argument types of ‘char’, ‘short’, ‘long’, ‘float’, …
  • Fix bug in evaluating “complicated” / compound constant expressions in “#if”.
  • Add support for ‘%p’ format code in ‘sprintf’.
  • Improve code generation for pointer references to ‘struct’.
  • Added doubly nested ‘->’ operator.
  • Fixed bug in unary ‘-’ VM opcode.
  • Improve code generation for structure element access.
  • Fix implementation of structure element access code generation; i.e. the “.” operator.
  • Partially re-implement “sizeof” operator for proper calculation of ‘pointer’ and ‘reference’ variables.
  • Add “drop down toolbar button” to “Compile and Download” toolbar to select “Download + Compile” or “Compile” only; vs two separate buttons.
  • Add partial support for new download “write to RAM” message. Needed for new “local variables” window.
  • Add support for new “trinary opcodes” (+, – and *) with ‘long’ operands. Previously trinary opcodes were for ‘short’ variables. Trinary opcodes are primarily used for efficient code generation for array and structure element access.
  • Added definition for new “NoOp” command.

Written by Jesse Flot

September 18th, 2012 at 5:46 pm