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

C51: 32 bits unsigned returned values treated as signed 16 bits

Hi!

In a full project a simple unsigned long ( u32 )returned value from a function lead to this (odd) assembler code.
It make us think that the u32 is considered as s16 ( signed short ).

If the sub-function th_microSecondsNow() returns the u32 0x0000FFCA the local_us returned will be 0xFFFFFFCA.
If the returned u32 is 0x00120233 the local_us returned will be 0x00000233.

For example the value is well settled in R4 = 00, R5 = 12, R6 = 02, R7 = 33 but at the end
R4 = 00, R5 = 00, R6 = 02, R7 = 33

We tried the same code in an empty project and in this case the function's behaviour is totally normal ( returned local_us values 0x0000FFCA or 0x00120233 ).

Any Ideas of what went wrong?

Many thanks in advance.

//please find below the assembler code abstract

   271: u32 microSecondsNow(void)
   272: {
   273:     u32 local_us;
   274:     local_us = th_microSecondsNow();
C:0x8DCB    1287A5   LCALL    th_microSecondsNow(C:87A5)
C:0x8DCE    EE       MOV      A,R6
C:0x8DCF    33       RLC      A
C:0x8DD0    95E0     SUBB     A,ACC(0xE0)
C:0x8DD2    FD       MOV      R5,A
C:0x8DD3    FC       MOV      R4,A
C:0x8DD4    900D1C   MOV      DPTR,#0x0D1C
C:0x8DD7    121DD0   LCALL    C?LSTXDATA(C:1DD0)
   275:     return local_us;

Parents
  • 1) what do you mean by 'generated code'
    Excel based code generation, MATLAB model based code generation which always gives QAC warnings, compiler warnings in first time integration. Single C file is auto generated based on configuration. File may be large which resulted many warnings or may be migrated to another platform.

    But for this kind of auto generated code we can not generate block by block or partial to test with your module as far as i know.

Reply
  • 1) what do you mean by 'generated code'
    Excel based code generation, MATLAB model based code generation which always gives QAC warnings, compiler warnings in first time integration. Single C file is auto generated based on configuration. File may be large which resulted many warnings or may be migrated to another platform.

    But for this kind of auto generated code we can not generate block by block or partial to test with your module as far as i know.

Children
No data