如题所述
æ æ³åå°ä¸éç¨cpuï¼ä½æ¯ææ¹æ³å¯ä»¥è®©å»¶æ¶çæ¶åä¸è®©cpuåå°çå¾
ã
举个å¨ææ§æ§è¡ç¨åºä½ä¸è®©CPUçå¾ çä¾åï¼
ä½ è®¾ç½®ä¸ä¸ªè¶³å¤å¤§åé为clockï¼åå§å¼ä¸ºé¶ï¼æå®æ¾å¨Systickä¸æå½æ°éé¢æ§è¡clock++ï¼
å设Systickä¸æå¨æ为1msï¼é£ä¹ä½ å设置ä¸ä¸ªåé为clockAï¼åå§å¼ä¸º0ï¼å¨å主循ç¯ä½¿ç¨
ifï¼clock-clockA > 1000ï¼
{
clockA = clock;
â¦â¦ï¼
}
è¿æ ·å°±å¯ä»¥ä¸è®©CPUçå¾ ï¼ä½åè¾¾å°äºå¨ææ§å¤ççç®çã
åªæ³æ§è¡ä¸æ¬¡çè¯ï¼å°±å ä¸ä¸ªæ¡ä»¶å¤æ就好äºï¼è¿ç¹å°±èªå·±æ¸ç´¢å§ã
举个å¨ææ§æ§è¡ç¨åºä½ä¸è®©CPUçå¾ çä¾åï¼
ä½ è®¾ç½®ä¸ä¸ªè¶³å¤å¤§åé为clockï¼åå§å¼ä¸ºé¶ï¼æå®æ¾å¨Systickä¸æå½æ°éé¢æ§è¡clock++ï¼
å设Systickä¸æå¨æ为1msï¼é£ä¹ä½ å设置ä¸ä¸ªåé为clockAï¼åå§å¼ä¸º0ï¼å¨å主循ç¯ä½¿ç¨
ifï¼clock-clockA > 1000ï¼
{
clockA = clock;
â¦â¦ï¼
}
è¿æ ·å°±å¯ä»¥ä¸è®©CPUçå¾ ï¼ä½åè¾¾å°äºå¨ææ§å¤ççç®çã
åªæ³æ§è¡ä¸æ¬¡çè¯ï¼å°±å ä¸ä¸ªæ¡ä»¶å¤æ就好äºï¼è¿ç¹å°±èªå·±æ¸ç´¢å§ã
温馨提示:答案为网友推荐,仅供参考
第1个回答 2017-11-04
无法做到不适用cpu,但是有方法可以让延时的时候不让cpu原地等待。 举个周期性执行程序但不让CPU等待的例子: 你设置一个足够大变量为clock,初始值为零,把它放在Systick中断函数里面执行clock++; 假设Systick中断周期为1ms,那么你再设置一个变量为clockA,初始值为0,在再主循环使用 if(clock-clockA > 1000) { clockA = clock; ……; } 这样就可以不让CPU等待,但又达到了周期性处理的目的。 只想执行一次的话,就加一个条件判断就好了,这点就自己摸索吧。本回答被提问者采纳