A tooltip should be a top level window to ensure that it is visible. It is only shown when requested by the user and closed when clicking anywhere with the mouse. So it does not interfere with other GUI elements. If you have a working solution I would stay with that.
I really do not know where to post this and I hope I can explain my question , so be gentle.
I am using SAM3x8e hardware timer (TC3) as an interrupt.
The “TC3_Handler” (callback?) global function name is “hardcoded” somewhere and fires as expected at desired intervals.
I do some verification of this by outputting simple message to LCD.
The LCD “class” is declared / instantiated as a global class to the entire application and works amicably.
Simple “lcd.print(“OK”)” is executed just fine in the TC3 handler.
I also do some hardware output – turn on / off LED – just for an additional indication the handler is being executed.
Now I want to execute a method / function of ANOTHER globally defined / instantiated class, again in same TC3 handler.
Adding cpal.Run(); did not compile – undefined “cpal”.
I had to ADD extern CPAL cpal; so it would compile and execute cpal.Run();
My question is
both LCD and CPAL classes are global, the LCD can be used OK, but the CPAL has to have the extern “reference” added into the TC3 handler. Why?
Thanks for reading, appreciate any help.
makes perfect sense.
I am not sure I'll spent time to actually look for such declaration, but I need to learn more about hardware interrupts so maybe I'll run into it sooner or later.
You know, it's one thing to obfuscate, it's another to code in such a style as approaching enemy action. It's hard enough to write clear code. The style of code I posted just seems easy to break and difficult to debug. The debugger is going to treat that like one line of code.
Caveat: I freely admit that I choose to restrict how much code I put on a line. I like using ternary or conditional operator as it can make things much cleaner, as long as you don't get silly with it.
<italic>Stuck in a dysfunctional matrix from which I must escape...
"Where liberty dwells, there is my country." B. Franklin, 1783
“They who can give up essential liberty to obtain a little temporary safety deserve neither liberty nor safety.” BF, 1759
This is not too complex, but at the limit where I would consider breaking it up into multiple statements.
That said, if that were a while condition, I might be more inclined to leave it like that, because (a) the increment might be considered part of the loop iteration, and (b) moving part of the condition might require more than one additional line (e. g. once before the start of the loop and once inside).
Apart from that, I am more bothered with the naming
GOTOs are a bit like wire coat hangers: they tend to breed in the darkness, such that where there once were few, eventually there are many, and the program's architecture collapses beneath them. (Fran Poretto)
I think you have the parameter names backward so it's confusing to me.
After the strcpy, Result and Source should contain the same address, the value there should be 465, and the value at Destination should also be 456.
Is that what you see? Is that not what you want?
Be aware that you are not implementing a "swap" at all.
Unless there are other concerns, if you want to "swap" then swap the pointers, not the values:
Result = Destination;
Destination = Source;
Source = Result;
It should not work at all. String constants declared as above are read-only, so you should not be able to use strcpy to overwrite one of them by another. When I try it I get an access violation on the write, as I would expect. I am not sure why your system does not give the fault, maybe a peculiarity of Arduino. But since strcpy is supposed to return the pointer to the destination field, Result will now point to the data that Source points to, i.e. "123", but the original data should be untouched.