Hello. I copied "LCD_4bit.c" and "LCD.h" files from Keil examples folder to my project folder and add it to my project. Then I changed Pins definition in "LCD_4bit.c" according to my project board LCD pins(LPC 2378). (I don't think that The problem is here.) Then I could successfully Build it, but when I download it to my project board,there is no signs that LCD works. However when I compile "LCD_4bit.c" in IAR environment ,the produced "hex file" works well on my project board. Thanks for your help.
you have that with HLLs too:
No.
if not at the time of writing the (HLL) code but certainly after the compilation and having looked at the disassembly.
.. but that only holds until the next time you run the compiler and/or linker, with modifications somewhere else in the source code, or a different compiler version, or just different switch settings.
Looking at what the compiler did today doesn't, in general, tell you anything about what will happen tomorrow. If you want a specific machine code sequence to look the same everytime, you have to write it in assembly.
To summarize: writing delays in pure software (without reference to a hardware time of some sorts) is already a bad idea --- writing them in any other language above assembly, however, is lunacy.