stm32f405 ucoslll 跳转后可以进入主程序,但是卡死在OSTaskCreate函数里,任务无法运行。 void JumpToApp(void) { uint32_t i=0; USART_Cmd(UART4, DISABLE); __set_PRIMASK(1); /* 禁止全局中断 */ /* 关闭滴答定时器,复位到默认值 */ SysTick->CTRL = 0; SysTick->LOAD = 0; SysTick->VAL = 0; /* 关闭所有中断,清除所有中断挂起标志 */ for (i = 0; i < 8; i++) { NVIC->ICER[i] = 0xFFFFFFFF; NVIC->ICPR[i] = 0xFFFFFFFF; } __set_PRIMASK(0); /* 使能全局中断 */ SCB->VTOR=FLASH_BASE|0x30000; ApplicationAddress = APP_ADDRESS; //printf("JumpToApp = 0x%x\r\n",(*(vu32*)ApplicationAddress)); //printf("JumpToApp = 0x%x\r\n",((*(vu32*)ApplicationAddress) & 0x2FFE0000 )); if (((*(vu32*)ApplicationAddress) & 0x2FFE0000 ) == 0x20000000) { /* Jump to user application */ m_JumpAddress = *(vu32*) (ApplicationAddress + 4); JumpToApplication = (FunVoidType) m_JumpAddress; //printf("m_JumpAddress = 0x%x\r\n",m_JumpAddress); /* Initialize user application's Stack Pointer */ __set_MSP(*(vu32*) ApplicationAddress); JumpToApplication(); } } 我用的是uart4打印串口日志,所以先禁止USART_Cmd(UART4, DISABLE),测试程序没有其他什么中断设置。但是调用JumpToApp函数后可以进入main函数,但是卡死在OSTaskCreate函数里。请问有谁知道还需要怎么配置? |
0x8000000地址是跳转测试程序入口 0x8030000地址是需要跳转到执行地方入口
跟踪后发现卡死在OSStartHighRdy函数里出不来
楼主看一下systicks中断是否正常,还有ucos需要的两个任务切换的中断。
解决了,谢谢