PIC用nop関数
#define JOIN(x, y) x ## y #define nop() asm("nop") #define NOP1 nop() #define NOP2 NOP1;nop() #define NOP3 NOP2;nop() /* 中略 */ #define NOP100 NOP99;nop() #define NOP(n) JOIN(NOP, n) NOP(10); /* これでnop10回分になる */
このコードの良いところは、__delay()関数シリーズより正確(本当にnopを並べているだけだから)という点です。
いちいちNOP1から1つずつ定義する必要がありますが
(マクロ関数なので再帰関数は作れない)、
必要なものだけ作ってもいいので、その辺は臨機応変に。
例えば、NOP30とNOP40だけほしいのなら、
#define JOIN(x, y) x ## y #define nop() asm("nop") #define NOP5 nop();nop();nop();nop();nop() #define NOP10 NOP5;NOP5 #define NOP30 NOP10;NOP10;NOP10; #define NOP40 NOP30;NOP10 #define NOP(n) JOIN(NOP, n)
とやればOKです。