|SHDesigns: Embedded Systems Design, Consulting and Developer Resources||Page hits:|
Bugs/Limitations (as of 1.58):
#pragma init_file( ), the variable must not start with an underscore.
#pragma init_file() the file must be less than 64k.
The TCP/IP lib will fail on an RCM2250. Note, this has been fixed in the latest released libs from Softools.
The Ethernet.lib has a bug that will not determine the correct board type. Either force the board type to be a RCM2200 or fix the following in ethinitall.c and ethintrt.c:
Look for the line:
case RCM2200 >> 8 :
case RCM2250 >> 8 :
You will need to build the ethernet.lib and the tcp/ip libs.
Also, usingAsix() will not work. usinalAll() will work fine.
Look at the source to ethinitasix.c.
After the line:
case RCM3200 >> 8 :
add a line:
rt->send = pd_sendpacket;
You will need to rebuild the ethernet.lib and the stcpip libs. Note: both of these fixes are in the next version of the TCP/IP stack.
#asm and _asm mixed with C
Beware of mixing #asm and _asm with C. The compiler has a bug if the asm follows a if/for/while/case or any control block. I.e:
if (some_var) printf("some_var is true\n"); else printf("some_far is false\n"); #asm ; this code is only executed as part of the else statement. ld hl,(_some_var) inc hl ld (_some_var),hl #endasm
Ok, so add an ';' before the #asm command and it will work. This bug is documented in the SCRabbit user's manual. Version 1.68 will warn if this situation occurs.
Logical area overlap:
There needs to be at least a 4k area between CONST and BSS segments. Here's an example:
CONST ends at 0x3200
BSS starts at 0x3800
BSS will set the STACKSEG boundary to 0x3000 (BSS rounded down to 4k.) This causes the last 200 bytes of CONST to be remapped to BSS. If you set BSS to align on a 4k boundary, the linker will then flag this error.
Linker order: cstart.obj must be first in the list of modules to link. Otherwise, it will look like it links properly but it will not run.
Turning off "Default functions far": If this is turned off, many library functions will fail on the link.
Code runs under debugger but fails in flash: Be sure to include WDT_DISABLE() in the start of main(), otherwise the watchdog will reset. The debugger will often hide this problem. You probably also want to add an ipset0(); call to enable interrupts.