ST STM32F101xB 및 μC/OS-II를 사용하고 있습니다. 이전 보드에서 외부 클럭 (HSE)을 사용하고 있었고 정상적으로 실행 중입니다. 우리는 새로운 보드에서 내부 클럭 (HSI)을 사용하고 싶었지만, 내부 클럭을 사용하여 RTOS (Appmaintask())를 실행하지 못했습니다. 아래 코드를 변경했는데, 무엇이 잘못되었는지 생각해보십시오.RTOS μC/OS-II가 예상대로 동작하지 않습니다.
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);
}
}
감사합니다.
안녕하세요, 관련 코드를 포함 할 수 있습니까? (예를 들어, 아마도 당신이 바꾼 비트를 말해주십시오)? 또한 - 변경 사항이 잘못된 점을 알려주십시오. 너 무슨 일이 있었 니? 너는 무엇을 기대 했는가? –
주파수가 전환 된 후 바하 웰을 먼저 확인해야합니다. CPU가 어떤 코드를 실행하고 있으며 그 다음에 어떤 일이 발생합니까? –
내 문제는 OSstart() 후에 Appmaintask()가 호출되지 않습니다. – user3770444