麻煩技術(shù)人員幫忙分析下,最下面的Delay_Ms(10000);不起作用。
用的是EVT里的低速率鍵盤例程。
麻煩技術(shù)人員幫忙分析下,最下面的Delay_Ms(10000);不起作用。
用的是EVT里的低速率鍵盤例程。
代碼不全。建議整個(gè)工程文件夾上傳。
CH32X035_EVT\EXAM\USB\USBFS\DEVICE\CompositeKM_LowSpeed例程,只改了main函數(shù)如上圖部分。
將
Delay_Ms(10000);
改成:
for(uint8_t?i=0;i<10;i++){ ????Delay_Ms(1000); }
會(huì)大約延遲5秒;
兩個(gè)問題:
1、延遲較大數(shù)字時(shí)整個(gè)延遲函數(shù)不起作用。
2、延遲較小數(shù)字時(shí)有作用,但是時(shí)間不準(zhǔn)。
您好,關(guān)于Delay_Ms(10000)沒有生效問題,這邊具體看了一下是和USB中斷函數(shù)中掛起下面的延時(shí)沖突了,具體原因應(yīng)該是Delay_Ms(10000)執(zhí)行的時(shí)候進(jìn)入U(xiǎn)SB掛起中斷,然后中斷函數(shù)中延時(shí)函數(shù)執(zhí)行完成后對(duì)應(yīng)狀態(tài)標(biāo)志位被清除導(dǎo)致Delay_Ms(10000)函數(shù)沒有完全執(zhí)行完成。你可以按照下圖將中斷函數(shù)中延時(shí)函數(shù)注釋掉應(yīng)該就可以了。
謝謝,已驗(yàn)證可以。
PS.
老師麻煩再請(qǐng)教下,這種中斷處理函數(shù)與用戶函數(shù)共享延遲函數(shù)狀態(tài)標(biāo)志位,導(dǎo)致延遲函數(shù)不可重入的問題最好應(yīng)該怎么解決?
原則上中斷快進(jìn)快出,不要在中斷中做耗時(shí)操作。如果由于時(shí)序等特殊情況不得不延時(shí),可以用兩個(gè)方案:死循環(huán)延時(shí),或是改寫循環(huán)邏輯,讓SysTick只負(fù)責(zé)記錄系統(tǒng)啟動(dòng)以來的ms數(shù),具體延時(shí)邏輯寫成可重入的;或者是中斷里放置標(biāo)志位提示主循環(huán)中需要處理某個(gè)延時(shí)邏輯。