發(fā)現(xiàn)sdk自帶了微秒和毫秒延時(shí)函數(shù),但是沒有發(fā)現(xiàn)納秒級(jí)延時(shí)(不需要精確到1ns,只要比如60ns或者120ns的倍數(shù)即可)
于是我想到了用for循環(huán)來實(shí)現(xiàn)納秒延時(shí),遺憾的是需要知道指令周期才能確定,for循環(huán)實(shí)際執(zhí)行了多久
比如
for(int?i=100;?i>0;--i) asm?volatile("nop");
匯編代碼是:
? ?li a5,100
.j: nop
? ?addi a5,a5,-1
? ?bnez a5,.j
這4行代碼,目前確定第二行 nop 需要 1個(gè)指令周期 6.94ns(144M頻率)
其他3行代碼,并不知道具體執(zhí)行指令的周期,也就沒法計(jì)算for循環(huán)實(shí)際需要執(zhí)行多久
是否有什么數(shù)據(jù)手冊(cè),可以提供比如 li 指令 addi 指令 bnez等指令的執(zhí)行周期
這樣,就能編寫一個(gè)宏,實(shí)現(xiàn) 比如delay300ns,delay600ns這樣的功能