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