CH32X035延時(shí)函數不生效

微信截圖_20240904191147.png


麻煩技術(shù)人員幫忙分析下,最下面的Delay_Ms(10000);不起作用。

用的是EVT里的低速率鍵盤(pán)例程。

代碼不全。建議整個(gè)工程文件夾上傳。


CH32X035_EVT\EXAM\USB\USBFS\DEVICE\CompositeKM_LowSpeed例程,只改了main函數如上圖部分。

icon_rar.gifCompositeKM_LowSpeed.rar



Delay_Ms(10000);

改成:

for(uint8_t?i=0;i<10;i++){
????Delay_Ms(1000);
}

會(huì )大約延遲5秒;

兩個(gè)問(wèn)題:

1、延遲較大數字時(shí)整個(gè)延遲函數不起作用。

2、延遲較小數字時(shí)有作用,但是時(shí)間不準。



您好,關(guān)于Delay_Ms(10000)沒(méi)有生效問(wèn)題,這邊具體看了一下是和USB中斷函數中掛起下面的延時(shí)沖突了,具體原因應該是Delay_Ms(10000)執行的時(shí)候進(jìn)入USB掛起中斷,然后中斷函數中延時(shí)函數執行完成后對應狀態(tài)標志位被清除導致Delay_Ms(10000)函數沒(méi)有完全執行完成。你可以按照下圖將中斷函數中延時(shí)函數注釋掉應該就可以了。

image.png



謝謝,已驗證可以。

PS.

老師麻煩再請教下,這種中斷處理函數與用戶(hù)函數共享延遲函數狀態(tài)標志位,導致延遲函數不可重入的問(wèn)題最好應該怎么解決?


原則上中斷快進(jìn)快出,不要在中斷中做耗時(shí)操作。如果由于時(shí)序等特殊情況不得不延時(shí),可以用兩個(gè)方案:死循環(huán)延時(shí),或是改寫(xiě)循環(huán)邏輯,讓SysTick只負責記錄系統啟動(dòng)以來(lái)的ms數,具體延時(shí)邏輯寫(xiě)成可重入的;或者是中斷里放置標志位提示主循環(huán)中需要處理某個(gè)延時(shí)邏輯。


只有登錄才能回復,可以選擇微信賬號登錄
97精品依人久久久大香线蕉97-亚洲欧美日韩一区二区三区-国产亚洲欧美精品久久久-久久99精品久久久大学生-亚洲成a人片在线不卡一二三区 97精品依人久久久大香线蕉97-亚洲欧美日韩一区二区三区-国产亚洲欧美精品久久久-久久99精品久久久大学生-亚洲成a人片在线不卡一二三区