This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

strncmp

if (!strncmp((char *)(PillDBPtr - (DATA1 & 0x0F)-(DATA1 >> 4)), drec.bcdRXCheck, (DATA1 >> 4)))

Could anyone suggest why the above statement would evaluate to true on the following conditions.

PillDBPtr = 0x201F
DATA1 = 0x66
drec.bcdRXCheck => 0x00, 0x04, 0x50, 0x51, 0x36, 0x01

Data Locations starting at 0x2010:
00 43 28 00 00 00 00 00 00 30 04 51 36 10 50 66

What appears to be happening is that the equation evaluates the first byte,
0x2003 and bdrec.bcdRXCheck, and discontinues the evalution. Since the first bytes equate it evaluates to true. If I change this byte in either location if evaluates to false.

-Please help.

Parents
  • This code is pretty obfuscated. If you re-write it so its intent is obvious, maybe you will be able to see the bug. I'm not to comfortable with your pointer arithmetic there. Is ANSI integer promotion disabled (you need to set this in the compiler settings)? In 10 years of using C51 I've never allowed ANSI integer promotion. If DATA1 is an SFR then you are actually reading its value 3 different times, possibly getting different values each time. Maybe take a snap shot of it with a normal variable.

    - Mark

Reply
  • This code is pretty obfuscated. If you re-write it so its intent is obvious, maybe you will be able to see the bug. I'm not to comfortable with your pointer arithmetic there. Is ANSI integer promotion disabled (you need to set this in the compiler settings)? In 10 years of using C51 I've never allowed ANSI integer promotion. If DATA1 is an SFR then you are actually reading its value 3 different times, possibly getting different values each time. Maybe take a snap shot of it with a normal variable.

    - Mark

Children
No data