jd9945 发表于 2011-7-28 21:06:47

Freertos在程序中使用了精确延时 Delay(50); //100MS ,但却出现变长的现象,该任务的

void Delay(__IO uint32_t   nTime)
{
TimingDelay = nTime;

while(TimingDelay != 0);
}
后来把configUSE_PREEMPTION   设置为0就可以了。      //设置为1,使用抢先式内核;设置为0,为合作轮转内核
但我觉得用合作轮转内核体现不出操作系统的优势,

还有我想在程序中精确的延时100us,与600us也很难, 程序经常动不动就发出大于100us与600us的波形来。
郁闷不知哪里会影响请高手指点下

i55x 发表于 2011-7-28 22:34:58

什么CPU,官方port吗?用没用中断?

liquan1010 发表于 2011-7-29 08:21:37

延时100us,与600us,需要硬件定时器
延时比较大可以vTaskDelay

jd9945 发表于 2011-7-29 10:04:25

stm32   有用中断

jd9945 发表于 2011-7-29 10:06:01

延时是纯软件延时, 为何会变呢/
voidDelay_us(__IO uint32_t   nTime)
{
while(nTime-->0);
}

谢谢各位的回答

i55x 发表于 2011-7-29 11:15:12

没关中断呗。

jd9945 发表于 2011-7-29 12:08:46

在进入与退出时有使用了portENTER_CRITICAL();
与portEXIT_CRITICAL();

jd9945 发表于 2011-7-29 12:10:40

#define portENTER_CRITICAL()                        __asm{ pushf }\
                                                                                __asm{ cli        }        \

#define portEXIT_CRITICAL()                                __asm{ popf }

#define portDISABLE_INTERRUPTS()                __asm{ cli }

#define portENABLE_INTERRUPTS()                        __asm{ sti }

zkyu 发表于 2011-7-29 13:42:45

用delayuntil
页: [1]
查看完整版本: Freertos在程序中使用了精确延时 Delay(50); //100MS ,但却出现变长的现象,该任务的