RTOSμC/ OS-II未按预期运行

时间:2014-07-10 07:09:44

标签: rtos

我正在使用ST STM32F101xB和μC/ OS-II,我在旧主板上安装了外部时钟(HSE)并且运行正常。我们想在新的主板上使用内部时钟(HSI),然而,RTOS(Appmaintask())不能使用内部时钟运行,我已经改变了我的代码如下,任何想法改变的原因是什么:

void  BSP_Init (void)
{
    RCC_DeInit();
    //RCC_HSEConfig(RCC_HSE_ON);
    //RCC_WaitForHSEStartUp();

    RCC_HCLKConfig(RCC_SYSCLK_Div1);
    RCC_PCLK2Config(RCC_HCLK_Div1);   // APB2 clock divide by 1 => 64MHz
    RCC_PCLK1Config(RCC_HCLK_Div2);   // APB1 clock divide by 2 => 32MHz

    FLASH_SetLatency(FLASH_Latency_2);
    FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);
    //RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_8); // 64MHz
    RCC_PLLConfig(RCC_PLLSource_HSI_Div2, RCC_PLLMul_8); 
    RCC_PLLCmd(ENABLE);

    RCC_LSEConfig(RCC_LSE_OFF);

    while (RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET) {
        ;
    }

    RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);

    while (RCC_GetSYSCLKSource() != 0x08) {
        ;
    }

    //Set the Vector Table base location at 0x08000000
    //NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0);

    // Need to finalize and arange priority for each interrupts in future,
    // So that 1 interrupt wont blocks another interrupt.
    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_3);
}


void main()
{
  INT8U   err;

  cpuObj = new Cstm32f10x();

  BSP_Init();

  BSP_IntDisAll();         /* Disable all ints until we are ready to accept them.  */

  OSInit();

  err = OSTaskCreateExt (AppMainTask,
                     (void *)0,
                     (OS_STK *)&AppMainTaskStk[APP_MAIN_TASK_STK_SIZE-1],
                     APP_MAIN_TASK_PRIO,
                     APP_MAIN_TASK_ID,
                     (OS_STK *)&AppMainTaskStk[0],
                     APP_MAIN_TASK_STK_SIZE,
                     (void *)0,
                     OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR);

  OSStart();                    // Start multitasking (i.e. give control to uC/OS-II)
}

void  AppMainTask (void *p_arg)
{ 
  OS_CPU_SysTickInit();
  while(TRUE)
  {
    OSTimeDly(1);
  }
}

感谢。

1 个答案:

答案 0 :(得分:0)

通常在ST / ARM提供的CMSIS启动代码中执行PLL的设置。在调用 main()之前,此代码作为运行时环境启动的一部分执行。我建议您使用此代码进行芯片初始化,因为静态数据初始化和静态对象构造函数在 main()之前运行,并且会在可能的关键初始化之前运行。

STM32 Standard Peripheral Library中包含具有Cortex-M3内核和STM32F1xx特定设备支持的CMSIS。实际完成工作的文件是system_stm32f10x.c。您在BSP_Init()中执行的其他功能(如闪存延迟)也由CMSIS启动代码处理。即使您自定义此代码,我强烈建议您使用早期环境初始化的这种方法。

另一种可能性是使用STM32CubeMX实用程序生成配置代码。这似乎是对现在显而易见的STM32 MicroXplorer实用程序的替代。