Freertos在程序中使用了精确延时 Delay(50); //100MS ,但却出现变长的现象,该任务的
void Delay(__IO uint32_t nTime){
TimingDelay = nTime;
while(TimingDelay != 0);
}
后来把configUSE_PREEMPTION 设置为0就可以了。 //设置为1,使用抢先式内核;设置为0,为合作轮转内核
但我觉得用合作轮转内核体现不出操作系统的优势,
还有我想在程序中精确的延时100us,与600us也很难, 程序经常动不动就发出大于100us与600us的波形来。
郁闷不知哪里会影响请高手指点下 什么CPU,官方port吗?用没用中断? 延时100us,与600us,需要硬件定时器
延时比较大可以vTaskDelay stm32 有用中断 延时是纯软件延时, 为何会变呢/
voidDelay_us(__IO uint32_t nTime)
{
while(nTime-->0);
}
谢谢各位的回答 没关中断呗。 在进入与退出时有使用了portENTER_CRITICAL();
与portEXIT_CRITICAL(); #define portENTER_CRITICAL() __asm{ pushf }\
__asm{ cli } \
#define portEXIT_CRITICAL() __asm{ popf }
#define portDISABLE_INTERRUPTS() __asm{ cli }
#define portENABLE_INTERRUPTS() __asm{ sti } 用delayuntil
页:
[1]