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

asm endasm and src directive, combining C and ASM languages

Hi,

I have a pretty big file that during it's performance, in a specific place of the code flow, I would like to wait for exactly 4 clock cycles.

The best way for me to do this, is using the empty line command (; // nop).
Unfortunately, this doesn't produce any ASM code line (why ? maybe it was optimized ?)

Next, I tried to add an the following lines:
#pragma asm
NOP;
NOP;
NOP;
NOP;
#pragma endasm
and have enabled the SRC directive for this particular file from the Keil uVision.
This works, but with one limitation: the whole file was translated into assembler file, not just these 4 lines, and this cause the debug operation to be much harder (when runing step-by-step, for example).

Is there a way to tell the complier to create an assembler code for this NOP section only ?

Can you think of any other (better) way to achive the required goal ?

Thanks,
Amit A.

Parents
  • If you will look carefully, you will see a semicolon before the "// nop" remark.
    the semicolon is the reason for me to expect the Compiler to generate a NOP !"


    No, you should not expect a 'C' null statement to generate a NOP.
    (In fact, you should not expect any 'C' source line to generate any specific machine instructions - the choice of instructions is entirely at the Compiler's discretion)

    "About the _nop_ function - this information helped me, I was not aware for it"

    Perhaps now would be a good time for you to familiarise yourself with the C51 Manual, so you don't miss any other useful bits?

    "I was asking if anyone knows a way for mixing ASM code in C code that is better then the one mentioned above."

    IF parts of your code need to be in assembler, write them in assembler in separate assembler source file(s) and call them from 'C'.
    Do not mess about trying to mix assembler into your 'C' source files.

    There is a whole section in the C51 Manual about interfacing 'C' and Assembler.

Reply
  • If you will look carefully, you will see a semicolon before the "// nop" remark.
    the semicolon is the reason for me to expect the Compiler to generate a NOP !"


    No, you should not expect a 'C' null statement to generate a NOP.
    (In fact, you should not expect any 'C' source line to generate any specific machine instructions - the choice of instructions is entirely at the Compiler's discretion)

    "About the _nop_ function - this information helped me, I was not aware for it"

    Perhaps now would be a good time for you to familiarise yourself with the C51 Manual, so you don't miss any other useful bits?

    "I was asking if anyone knows a way for mixing ASM code in C code that is better then the one mentioned above."

    IF parts of your code need to be in assembler, write them in assembler in separate assembler source file(s) and call them from 'C'.
    Do not mess about trying to mix assembler into your 'C' source files.

    There is a whole section in the C51 Manual about interfacing 'C' and Assembler.

Children
No data