Please note: We are aware of an issue affecting replies on the Arm Community forums, which may not be loading as expected.
We apologize for any inconvenience and appreciate your patience while we investigate and work to resolve the issue.
Thank you for your understanding.
Hi,
I use C51 version 9.60a (v9.60.0.0) for Nuvoton N76E003 chip programming.
Example of code:
//All fields are uint8_t type if ((buttons.Hold & BUTTON_SET)) { if ((buttons.Duration > (uint8_t)(2 * BUTTON_HOLD_TICK))) { config.displayOff ^= 0x01; } }
//All fields are uint8_t type
if ((buttons.Hold & BUTTON_SET)) {
if ((buttons.Duration > (uint8_t)(2 * BUTTON_HOLD_TICK))) {
config.displayOff ^= 0x01;
}
generates listing:
00B6 E500 R MOV A,buttons+02H00B8 30E20A JNB ACC.2,?C0063 00BB E500 R MOV A,buttons+04H00BD D3 SETB C00BE 9464 SUBB A,#064H00C0 4003 JC ?C0063 00C2 630001 R XRL config+06H,#01H The question: why all direct adresses shown as 00 value (in MOV / XRL operations of this example)?
00B6 E500 R MOV A,buttons+02H
00B8 30E20A JNB ACC.2,?C0063
00BB E500 R MOV A,buttons+04H
00BD D3 SETB C
00BE 9464 SUBB A,#064H
00C0 4003 JC ?C0063
00C2 630001 R XRL config+06H,#01H
Thanks.
Because that's a compiler listing. The compiler has no idea where those variables will eventually be placed. That's for the linker to decide.
Which is what that lone ´R´ is about: it marks a relocation yet to be resolved.
If (for whatever reason) you actually need a listing with the actual addresses, look up the "absolute listing" option in the linker manual.