next up previous contents
Next: Canny Edge Detection Up: SLI practical writeup Previous: Analysis and conclusion   Contents

Using VCC

Although being a very powerful tool for simulating execution and communication of behaviours across different platforms, VCC has many issues that makes programming, version control and especially debugging extremely (and seemingly unnecessarily) difficult. In my opinion way too much development time was wasted fighting battles with the program. Most of these problems were due to unspecific error messages (IE. in the worst of all the battles in which I was involved, Benjamin and I spent six hours merging our code which was very hard because of an error message which did not make any sense to us (``Error executing pinpointu.exe'') and this even being used for two different problems (one of them simply being that the path name was too long) so that the true problem was extremely hard to identify), but also problems such as VCC being unable to use newly added data types before exiting and restarting the program made the implementation into a very time consuming task. That each and every behaviour in a simulation has to be recompiled before simulating meant that debugging included waiting approximately six minutes every time you change some code (I know that the solution to this is just writing correct code in the first place, but this is not always realistic to do).

One annoying problem is that the whitebox C is not ANSI C compliant. This means that for example the following does not work:

(&variable+1)=value;

whereas the following is fine:

pointer = &variable;
(pointer+1)=value;

When you know this you can of course easily avoid any problems, but I cannot see the point in implementing something which is almost but not entirely ANSI C.

Another place where whitebox C differs from other standards is when using memcpy. In this implementation it seems that the memory areas may overlap (which they mustn't if conforming to the ISO 9899 standard). Something like this will be likely to cause problems when moving from the simulation environment to a real C language and might even produce incorrect simulation results as the correct function to use in this case is memmove which must be about twice as slow as memcpy (but which I can't even find in VCC). I am probably being too pedantic about this.


next up previous contents
Next: Canny Edge Detection Up: SLI practical writeup Previous: Analysis and conclusion   Contents
Morten Bek 2001-04-16