UCOS-II移植到STM32F407VG后的问题

2019-07-21 04:09发布

    这两天移植了UCOS-II到STM32F407VG中,出现以下问题,希望大家能帮忙解决一下:
    我在系统中创建了两个任务,分别是让两个不同的LED灯以不同的频率闪烁,如下:
static  void  App_Task1(void *p_arg) { (void)p_arg; GPIO_Configuration(); while(1) {  GPIOD->BSRRL = GPIO_Pin_15;//输出高电平  OSTimeDly(200);  GPIOD->BSRRH = GPIO_Pin_15;//输出低电平 OSTimeDly(200); } }
static  void  App_Task2(void *p_arg) { (void)p_arg; //OSTaskSuspend(OS_PRIO_SELF); GPIO_Configuration_Add(); while(1) {  GPIOD->BSRRL = GPIO_Pin_14;//输出高电平           OSTimeDly(800);  GPIOD->BSRRH = GPIO_Pin_14;//输出低电平   //delay(400);   OSTimeDly(800); } }
     我现在的问题是,如果将第二个任务中的
OSTimeDly(800)替换成单纯的延时delay(400)的话,就会出现这样的情况:任务一中使用的OSTimeDly(200)能够释放CPU的使用权,使得CPU能够执行任务优先级较低的任务二,但是程序就一直在任务二里面执行,而且灯能够闪烁,但再也回不到任务一了!当然,因为我第二个任务用的是delay(400),并没有释放CPU。可问题是,我在第二个任务中如果用的是OSTimeDly(800)来延时,CPU依然能够被释放去执行任务二,但是程序运行就死在了OSTimeDly(800)里面了。我曾经试过单步调试,也同样可以调试看到,程序从任务一调到任务二后一直在OSTimeDly(800)里面死循环。另外,我在调用OSInit()和OS_CPU_SysTickInit()后,立刻使用OSTimeDly(10)来进行延时,程序依然死在了OSTimeDly(10)里面。究竟是什么原因导致这样的呢?原子大哥请帮帮忙,谢谢啦!我的OS_CPU_SysTickInit()里面是这样写的:

void  OS_CPU_SysTickInit (void) {     OS_CPU_SR  cpu_sr =0;     while(SysTick_Config(OS_CPU_SysTickClkFreq() / OS_TICKS_PER_SEC)!=0);     OS_ENTER_CRITICAL();      OSIntNesting++;     OS_EXIT_CRITICAL();     OSTimeTick();            OSIntExit();          }
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。