STM32跑UCOSII有问题,疯了

2019-03-23 20:07发布

代码如下,先说问题,为何程序烧尽去后,有时候任务能跑不起来,有时候却可以,但中断串口无论什么时候都可以被执行到,被折磨的不行



int main(void)
{
CPU_INT08U os_err;

//禁止CPU中断
CPU_IntDis();
SystemInit();//为了使能48M
//UCOS 初始化
OSInit(); /* Initialize "uC/OS-II, The Real-Time Kernel". */

//硬件平台初始化
NVIC_Configuration(); //中断优先级初始化
HW_Init(); //初始化串口1,2
Tim2Config(); //定时器初始化



//建立主任务, 优先级最高 建立这个任务另外一个用途是为了以后使用统计任务
os_err = OSTaskCreate((void (*) (void *)) App_TaskStart, //指向任务代码的指针
(void *) 0, //任务开始执行时,传递给任务的参数的指针
(OS_STK *) &App_TaskStartStk[APP_TASK_START_STK_SIZE - 1], //分配给任务的堆栈的栈顶指针 从顶向下递减
(INT8U) APP_TASK_START_PRIO); //分配给任务的优先级

//ucos的节拍计数器清0 节拍计数器是0-4294967295 对于节拍频率100hz时, 每隔497天就重新计数
OSTimeSet(0);
OSStart(); /* Start multitasking (i.e. give control to uC/OS-II). */
/* Start multitasking (i.e. give control to uC/OS-II). */

return (0);
}

static void App_TaskStart(void* p_arg)
{

(void) p_arg;
//初始化ucos时钟节拍
OS_CPU_SysTickInit(); /* Initialize the SysTick. 1MS产生一个滴答 */

//使能ucos 的统计任务
#if (OS_TASK_STAT_EN > 0)
//----统计任务初始化函数
OSStatInit(); /* Determine CPU capacity. */
#endif
//建立其他的任务
App_TaskCreate();

//启动心跳包
TimDelay2(0);
//启动24小时定时
TimDelay3(0);
while (1)
{
//1秒一次循环
//OSTimeDlyHMSM(0, 0,10, 0);

OSTaskSuspend(OS_PRIO_SELF);

}
} 此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。