I'm having some bizarre behavior with functions that take multiple long values as parameters. If I change them to ints, all is fine, but if they are longs the target locks up on the function call. The simulator also shows "extra" hex addresses on the call stack, but is "normal" when the params are ints. I simply have a main() routine that calls the following function: unsigned char *GetBuffer(long, long, long, long); I.E. b=GetBuffer(0, 320, 240, 1); Am I missing something obvious? The target is a 80C390, but I'm not running in contiguous mode (yet), just in the large memory model. I just updated to v6.22. (But I had not tried this with v6.21)
I found a bug with v6.20 which messed up a function with a long parameter, but v6.22 fixed that for me. (the body of my function was actually written as inline assembler). The key section in the Release Notes seems to be: "C51 v6.20 introduced 'Dynamic Register Allocation'. C51 v6.22 corrects several problems that were introduced by this new optimisation technique"