Here's another good one. Again, works fine on simulator/debugger, but not on the target hardware. If I do this: BYTE process_Help(char *cmdBuffer) reentrant { cmdBuffer[0] = '\0'; printf( "Help Message"); return TRUE; } everything works fine. But if I do this: BYTE process_Help(char *cmdBuffer) reentrant { char *strHelp = "Help Message"; cmdBuffer[0] = '\0'; printf(strHelp); return TRUE; } it works fine on the simulator/debugger, but nothing is displayed when executed on the target hardware. Any/All help welcome and appreciated. Thanks, Chris Beattie
I can not duplicate the error. Can you post code that will generate the error.
I'd be happy to zip up and send you the entire project (I actually just renewed my annual maintenance agreement). If you can send your email address to CBeattie@yahoo.com, I'll respond from my real email address. Thanks, Chris Beattie
You can download the code from: http://briefcase.yahoo.com/bc/cbeattie/lst?.dir=/Keil&.view=l
Your code uses funtion pointers. They are tricky to use in the Keil c51 compiler. If you can, delare them in the function that uses them. Otherwise you have to do some tricky stuff with the linker. I suggest to change HandleNormalData to:
BYTE process_EraseFlash(char xdata *cmdBuf); BYTE process_ProgramFlash(char xdata *cmdBuf); BYTE process_GO(char xdata *cmdBuf); BYTE process_DisplayMemory(char xdata *cmdBuf); BYTE process_Help(char xdata *cmdBuf); void uart0_HandleNormalData(void) { static const CmdData code gCmdTable[] = { { "EF", process_EraseFlash }, { "PF", process_ProgramFlash }, { "GO", process_GO }, { "DM", process_DisplayMemory }, { "HELP", process_Help }, { "?", process_Help } }; static const BYTE code gNumCmds = sizeof(gCmdTable) / sizeof(CmdData); //..the rest of the code <\pre>
Jon, Could you please explain what this "tricky stuff" is? What is the difference using funct ptrs declared in and out of the function?
Could you please explain what this "tricky stuff" is? http://www.keil.com/support/docs/210.htm Application Note 129 And see OVERLAY in the Linker manual.
I'm not sure what "tricky stuff" you're referring to but I tried replacing the fcn pointers with a case statement and had the same results, so I don't think it's that... Anyone have any ideas on the wierd L13 Warnings? I'll post the code again... http://briefcase.yahoo.com/bc/cbeattie/lst?.dir=/Keil&.view=l Chris