Hi All, I am running into problem, where I could not pass sbit variables to a function. Here's an example: My SBIT definitions: sbit OLD_JTAG_TCK = 0xB0+3; sbit NEW_JTAG_TCK = 0x80+7; My Function: void Pulse_TCK(bit sbJTAG_TCK) { sbJTAG_TCK = 1; } My Main code: if (old_hardware) { Pulse_TCK(OLD_JTAG_TCK) } else { Pulse_TCK(NEW_JTAG_TCK) } For some reason, the above code does not work as I dont see any activity on the TCK pins. Can anyone please help me how to resolve this issue?. Note that I had used the type bit in my function parameter instead of sbit as the later gives syntax error.
I tried making entirely 2 different copies of those, but unfortunately they both dont fit into the memory.
If you are extremely tight for memory you may need to do something a little less "pretty" You can make two versions based on a flag
#define NEW_HW // comment this out if compiling for old hardware #ifdef NEW_HW shift_data_into_FPGA_new_hardware(); #else shift_data_into_FPGA_old_hardware(); #endif
they both dont fit into the memory. Well, I did say you "could possibly" go all this far, not that you absolutely should do that. You just found the reason for that caution. If you can't afford two complete copies, you can't move the conditional all this far out of the main loops --- so don't do that. Move it up only to a byte-level or block-level writing routine, or whatever other subdivision size fits your protocol.
#ifdef NEW_HW
My issue is I want to have a single driver that would work for both the hardwares. Having a compiler switch would force me to do 2 different drivers which kind of defeats the whole purpose. On a given system, they can use both the hardwares and we are trying to comeup with a unified driver that would support both.
Take a look at the following knowledgebase article: http://www.keil.com/support/docs/98.htm Jon
Having a compiler switch would force me to do 2 different drivers which kind of defeats the whole purpose agreed, as I said you may need to do something a little less "pretty" I merely mentioned it to show that (unpleasant) possibility. there is somewhat convoluted way to do what you want
My Function: void Pulse_TCK(bit sbJTAG_TCK) { sbJTAG_TCK = 1; } instead void Pulse_TCK(old_hardware) { if (old_hardware) OLD_JTAG_TCK = 1; else NEW_JTAG_TCK = 1; }